<?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>134142</bug_id>
          
          <creation_ts>2014-06-20 16:06:55 -0700</creation_ts>
          <short_desc>Refactor our current implementation of for-in</short_desc>
          <delta_ts>2015-11-12 21:19:08 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>135033</blocked>
    
    <blocked>135034</blocked>
    
    <blocked>135068</blocked>
    
    <blocked>134141</blocked>
    
    <blocked>135066</blocked>
    
    <blocked>135067</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>vaag</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1017108</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-20 16:06:55 -0700</bug_when>
    <thetext>The baseline JIT and the LLInt currently do some simple static optimizations in the presence of for-in. We can refactor and expand upon this implementation to add support for iterating indexed properties as well as non-indexed properties for a variety of objects (e.g. vanilla JS objects, JS arrays, and typed arrays) in an efficient fashion that will also make it easier for our higher tier compilers to support these opcodes.

for-in iteration currently works something like the following. Assuming I had the following for-in loop:

for (var p in object) {
   &lt;body using object and p&gt;
}

This loop would be roughly equivalent to the following more explicit loop:

var o = object;
while (o != null) {
    for (var i = 0; i &lt; o.length; ++i) {
        &lt;body using object and i (instead of p)&gt;
    }
    var propertyNames = o.getOwnPropertyNames();
    for (var i = 0; i &lt; propertyNames.length; ++i) {
        var p = propertyNames[i];
        &lt;body using object and p&gt;
    }
    o = o.getPrototype();
}

There are a few additional details, like what to do if the object changes as its being iterated and avoiding visiting the same propertyName twice, but this is roughly what should happen for most objects. The current plan is to expand the original loop into something that looks like the second loop by duplicating the loop body and adding some additional bytecodes to support advancing to the next property and making sure the object hasn&apos;t changed while we are iterating over it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017128</commentid>
    <comment_count>1</comment_count>
      <attachid>233484</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-20 16:32:26 -0700</bug_when>
    <thetext>Created attachment 233484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017129</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-20 16:32:42 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=233484) [details]
&gt; Patch

Work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017143</commentid>
    <comment_count>3</comment_count>
      <attachid>233490</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-20 17:33:28 -0700</bug_when>
    <thetext>Created attachment 233490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017144</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-20 17:36:21 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=233490) [details]
&gt; Patch

More work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018174</commentid>
    <comment_count>5</comment_count>
      <attachid>233765</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-06-24 16:46:53 -0700</bug_when>
    <thetext>Created attachment 233765
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020146</commentid>
    <comment_count>6</comment_count>
      <attachid>234305</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-02 18:40:27 -0700</bug_when>
    <thetext>Created attachment 234305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020147</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-02 18:41:19 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=234305) [details]
&gt; Patch

More work. I decided to take a simpler approach and just iterate the indexed and Structure properties of the base object, and then leave the remaining properties on the base object and any object in its prototype chain to the fully generic loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020983</commentid>
    <comment_count>8</comment_count>
      <attachid>234531</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-07 18:30:31 -0700</bug_when>
    <thetext>Created attachment 234531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020985</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-07 18:36:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=234531) [details]
&gt; Patch

More work. Implemented the DFG part of this initial refactoring. Right now it&apos;s still mostly calls to C++ except for HasIterableProperty, which does some inline hole checks for the most common ArrayModes. Everything compiles, passes tests, and I&apos;m able to surf the web in a debug build without crashing.

There are still some performance issues. The current bottleneck is ToIndexString, which spends a lot of time converting ints to Identifiers and then allocating JSStrings. We can take a lot of the load off by having get_by_val use the integer local rather than the return value of to_index_string. Then we can do something clever with the to_index_string bytecode to avoid having to do all of the extra conversion and allocation work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021231</commentid>
    <comment_count>10</comment_count>
      <attachid>234604</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-08 16:06:47 -0700</bug_when>
    <thetext>Created attachment 234604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021233</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-08 16:11:32 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=234604) [details]
&gt; Patch

More work. Modified the BytecodeGenerator&apos;s ForInContext stuff so that we can successfully use the integer index for get_by_vals in the indexed property loop. Next is to make Structure property access fast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021541</commentid>
    <comment_count>12</comment_count>
      <attachid>234685</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-09 20:43:54 -0700</bug_when>
    <thetext>Created attachment 234685
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021542</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-09 20:46:27 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=234685) [details]
&gt; Patch

More work. Added support for fast loading of Structure properties via the &quot;get_direct_pname&quot; opcode (and corresponding DFG nodes). There are some potential optimizations we could do in the DFG (e.g. avoid the Structure check if we know the Structure isn&apos;t clobbered in the body of the loop). Now getting the next property name is the bottleneck, so I&apos;ll rework JSPropertyNameEnumerator so that it already has JSStrings pre-allocated and in a more JIT-friendly layout so that we can quickly load the next property name rather than calling out to C++ code during each loop iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021761</commentid>
    <comment_count>14</comment_count>
      <attachid>234738</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-10 19:24:27 -0700</bug_when>
    <thetext>Created attachment 234738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021765</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-10 19:31:40 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=234738) [details]
&gt; Patch

More work. Refactored JSPropertyNameEnumerator to pre-allocate JSStrings. We now grab the next property from the enumerator in the Structure and generic sub loops. We also now cache generic enumerators when possible. We&apos;re ~45% slower than typical idiomatic indexed property iteration (from being 20x slower) and we&apos;re faster for Structure property enumeration (exactly how much faster I haven&apos;t measured accurately, but a good upper bound would be ~20% faster which is the branch vs. trunk). Keep in mind these are iteration micro benchmarks, and all of this is DFG-only performance. With the FTL we can expect further gains.

I think we&apos;re in a good enough state w.r.t. performance and stability to start landing this stuff. The only major thing standing in the way now is the 32-bit side of the JIT code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023148</commentid>
    <comment_count>16</comment_count>
      <attachid>235101</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-17 17:46:31 -0700</bug_when>
    <thetext>Created attachment 235101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023149</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-17 17:47:23 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=235101) [details]
&gt; Patch

Fixed some erroneous tests, added 32-bit support. All that remains is to clean some stylistic things up for a final review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023173</commentid>
    <comment_count>18</comment_count>
      <attachid>235107</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-17 18:45:15 -0700</bug_when>
    <thetext>Created attachment 235107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023186</commentid>
    <comment_count>19</comment_count>
      <attachid>235107</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-17 19:17:15 -0700</bug_when>
    <thetext>Comment on attachment 235107
Patch

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

&gt; Source/JavaScriptCore/API/JSCallbackObjectFunctions.h:519
&gt; +                if (entry-&gt;getProperty &amp;&amp; (!(entry-&gt;attributes &amp; kJSPropertyAttributeDontEnum) || (shouldIncludeDontEnumProperties(mode))))

extra parens

&gt; Source/JavaScriptCore/API/JSCallbackObjectFunctions.h:530
&gt; +                if (!(entry-&gt;attributes &amp; kJSPropertyAttributeDontEnum) || (shouldIncludeDontEnumProperties(mode)))

extra parens

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2683
&gt; +    // Lexically invalidating ForInContexts is kind of weak sauce, but it&apos;s sufficiently 
&gt; +    // rare to either (1) re-assign the loop iteration variable in the body of the loop
&gt; +    // or (2) capture the loop the iteration variable. Because of the rarity of either of 
&gt; +    // these situations, it&apos;s okay to poison the remainder of the loop body whenever we encounter them.

A better way to state this:

Lexically invalidating ForInContexts is kind of weak sauce, but it only occurs if either of the following conditions is true:
(1) The loop iteration variable is re-assigned within the body of the loop.
(2) The loop iteration variable is captured in the lexical scope of the function.
These two situations occur sufficiently rarely that it&apos;s okay to use this style of &quot;analysis&quot; to make iteration faster. If we didn&apos;t want to do this, we would either have to perform some flow-sensitive analysis to see if/when the loop iteration variable was reassigned, or we&apos;d have to resort to runtime checks to see if the variable had been reassigned from its original value.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5534
&gt; +

Revert this file.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1892
&gt; +JSCell* JIT_OPERATION operationGetStructurePropertyEnumerator(ExecState* exec, JSCell* cell, int32_t length)

Refactor this into a separate function that can be called from both JITOperations.cpp and CommonSlowPaths.cpp

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1916
&gt; +JSCell* JIT_OPERATION operationGetGenericPropertyEnumerator(ExecState* exec, JSCell* baseCell, int32_t length, JSCell* structureEnumeratorCell)

Ditto.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1936
&gt; +    // If we still have the same Structure that we started with, we don&apos;t need to revisit the JSObject properties.

If we still have the same Structure that we started with, our Structure allows us to access its properties quickly (i.e. the Structure property loop was able to do things), and we iterated the full length of the object (i.e. there are no more own indexed properties that need to be enumerated), then the generic property iteration can skip any properties it would get from the JSObject base class. This turns out to be important for hot loops because most of our time is then dominated by trying to add the own Structure properties to the new generic PropertyNameArray and failing because we&apos;ve already visited them.

&gt; Source/JavaScriptCore/runtime/JSCell.h:49
&gt;  enum EnumerationMode {

Break this and associated functions out into a separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023318</commentid>
    <comment_count>20</comment_count>
      <attachid>235139</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-18 12:35:04 -0700</bug_when>
    <thetext>Created attachment 235139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023361</commentid>
    <comment_count>21</comment_count>
      <attachid>235147</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-18 14:15:09 -0700</bug_when>
    <thetext>Created attachment 235147
benchmark results

~1.5% improvement on kraken due to a ~30% win on audio-beat-detection a few smaller wins on some of the other kraken benchmarks. Neutral on the other benchmarks we track.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023417</commentid>
    <comment_count>22</comment_count>
      <attachid>235162</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-18 18:26:29 -0700</bug_when>
    <thetext>Created attachment 235162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023418</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-18 18:27:03 -0700</bug_when>
    <thetext>Mmmm, looks juicy.  I will review this weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023419</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-18 18:27:41 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=235162) [details]
&gt; Patch

Just a couple DFG fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023561</commentid>
    <comment_count>25</comment_count>
      <attachid>235162</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-20 14:53:28 -0700</bug_when>
    <thetext>Comment on attachment 235162
Patch

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

I think it&apos;s almost there, but I&apos;m not sure about the inconsistencies between clobberize() and AI.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1799
&gt; +    case GetEnumerableLength: {
&gt; +        forNode(node).setType(SpecInt32);
&gt; +        break;
&gt; +    }
&gt; +    case HasGenericProperty: {
&gt; +        forNode(node).setType(SpecBoolean);
&gt; +        break;
&gt; +    }
&gt; +    case HasStructureProperty: {
&gt; +        forNode(node).setType(SpecBoolean);
&gt; +        break;
&gt; +    }

In clobberize(), these have write(World).  If that&apos;s right then you should be calling clobberWorld() here.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1803
&gt; +    case HasIndexedProperty: {
&gt; +        forNode(node).setType(SpecBoolean);
&gt; +        break;
&gt; +    }

In clobberize(), this has some cases where you claim to write(World).  If it&apos;s true that this cal clobber the world, then there should be a call to clobberWorld() here (predicated on the array modes that actually cause such clobberage, of course).

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1815
&gt; +    case GetDirectPname: {
&gt; +        forNode(node).makeHeapTop();
&gt; +        break;
&gt; +    }
&gt; +    case GetStructurePropertyEnumerator: {
&gt; +        forNode(node).setType(SpecCell);
&gt; +        break;
&gt; +    }
&gt; +    case GetGenericPropertyEnumerator: {
&gt; +        forNode(node).setType(SpecCell);
&gt; +        break;
&gt; +    }

See other comments about clobberize() and write(World).

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:158
&gt; +    case HasGenericProperty:
&gt; +    case HasStructureProperty:
&gt; +    case GetEnumerableLength:
&gt; +    case GetStructurePropertyEnumerator:
&gt; +    case GetGenericPropertyEnumerator:
&gt; +    case GetDirectPname: {
&gt; +        read(World);
&gt; +        write(World);
&gt; +        return;
&gt; +    }
&gt; +

If these can write the world, then the AbstractInterpreter needs to know about it.  I&apos;m kind of confused as to why these are so impure, though.  It seems like they&apos;re actually either pure, or at least, that they have a fairly confined set of things they can read.  Also, it would be good to have CSE rules for these (i.e. def()&apos;s).

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:163
&gt; +    case ToIndexString: {
&gt; +        read(HeapObjectCount);
&gt; +        write(HeapObjectCount);
&gt; +        return;
&gt; +    }

Does this really read+write HeapObjectCount?  Strings don&apos;t have object identity.  It&apos;s never necessary to create a second string with identical contents.  So, this feels like it&apos;s a pure operation.

Also, this should probably have def(PureValue(node)) to enable CSE to eliminate redundant index string creations.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:168
&gt; +    case NextEnumeratorPname: {
&gt; +        read(JSPropertyNameEnumerator_cachedPropertyNames);
&gt; +        return;
&gt; +    }

Can this ever return something different if called twice with the same arguments?  If it is pure then you don&apos;t need to claim to read anything.

Either way, it feels like this should have a def() of either a PureValue (if it&apos;s pure and doesn&apos;t read() anything) or a HeapLocation (if it&apos;s impure).

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:170
&gt; +    case HasIndexedProperty: {

This feels like it should def() a HeapLocation of some kind.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:183
&gt; +            read(World);
&gt; +            write(World);

If this can clobber the world, then it should also be clobbering the world in the corresponding AbstractInterpreter code.  I somewhat suspect that this doesn&apos;t *actually* write the world, though.

Note that if you&apos;re too lazy to enumerate what an out-of-bounds access does, but you know that it cannot write anything, then it&apos;s totally cool to say that it read(World).

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:195
&gt; +            read(World);
&gt; +            write(World);

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:207
&gt; +            read(World);
&gt; +            write(World);

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:219
&gt; +            read(World);
&gt; +            write(World);

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:225
&gt; +            read(World);
&gt; +            write(World);

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:4757
&gt; +    case NextEnumeratorPname: {

General comment about the name of this node: it has &quot;next&quot; in the name which made it seem to me that this increments some enumerator/iterator.  In fact it appears like this is not the case - it only retrieves something from a list.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:4743
&gt; +        m_jit.load64(MacroAssembler::BaseIndex(scratch2GPR, scratch1GPR, MacroAssembler::TimesEight, 
&gt; +            -2 * static_cast&lt;int32_t&gt;(sizeof(EncodedJSValue))), resultGPR);

I wonder if the math here could be abstracted somehow - maybe something from PropertyOffset.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024418</commentid>
    <comment_count>26</comment_count>
      <attachid>235400</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-23 18:20:33 -0700</bug_when>
    <thetext>Created attachment 235400
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024657</commentid>
    <comment_count>27</comment_count>
      <attachid>235400</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-24 16:25:00 -0700</bug_when>
    <thetext>Comment on attachment 235400
Patch

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

It would be really cool if you could cover some of the corner cases with stress tests - i.e. tests that would go into JavaScriptCore/tests/stress.  I&apos;ll let you use your judgement for that.  r=me.

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:160
&gt; +        read(World);
&gt; +        write(World);

So, this reads+writes world because of the possibility that the structure changed, right?  Can you add a comment to that effect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024726</commentid>
    <comment_count>28</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-24 18:30:22 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 235400 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235400&amp;action=review
&gt; 
&gt; It would be really cool if you could cover some of the corner cases with stress tests - i.e. tests that would go into JavaScriptCore/tests/stress.  I&apos;ll let you use your judgement for that.  r=me.

I wrote some corner-case-y tests while I was implementing various pieces of this, so I can just rework those and include them as stress tests.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGClobberize.h:160
&gt; &gt; +        read(World);
&gt; &gt; +        write(World);
&gt; 
&gt; So, this reads+writes world because of the possibility that the structure changed, right?  Can you add a comment to that effect?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024874</commentid>
    <comment_count>29</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-25 11:47:38 -0700</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/171605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024914</commentid>
    <comment_count>30</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-25 14:28:08 -0700</bug_when>
    <thetext>*** Bug 134141 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141758</commentid>
    <comment_count>31</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-11-12 21:19:08 -0800</bug_when>
    <thetext>*** Bug 118127 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233484</attachid>
            <date>2014-06-20 16:32:26 -0700</date>
            <delta_ts>2014-06-20 17:33:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140620163204.patch</filename>
            <type>text/plain</type>
            <size>191937</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMSBA
QAorMjAxNC0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhZGRzIGEgbmV3IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciB0aGF0IGhhbmRsZXMgdGhlIGNh
Y2hpbmcgb2YgYSBzZXQgb2YgcHJvcGVydHkgbmFtZXMgCisgICAgICAgIGZvciBhbiBvYmplY3Qg
d2l0aCBhIHBhcnRpY3VsYXIgU3RydWN0dXJlLiBJZiB0aGUgb2JqZWN0J3MgU3RydWN0dXJlIG9y
IGl0cyBwcm90b3R5cGUgY2hhaW4gY2hhbmdlcywgCisgICAgICAgIHRoZSBlbnVtZXJhdG9yIHdp
bGwgYmUgY29udmVydGVkIHRvIGEgZnVsbHkgZ2VuZXJpYyBtb2RlIHdoZXJlIGl0IHdpbGwgY2hl
Y2sgaGFzUHJvcGVydHkgZm9yIGVhY2ggCisgICAgICAgIG9mIGl0cyByZW1haW5pbmcgY2FjaGVk
IHByb3BlcnR5IG5hbWVzLgorCisgICAgICAgIEl0IGFsc28gYWRkcyBhIG51bWJlciBvZiBuZXcg
Ynl0ZWNvZGVzIHRvIHN1cHBvcnQgbW9yZSBleHBsaWNpdCBpdGVyYXRpb24gb2YgcHJvcGVydHkg
bmFtZXMuCisgICAgICAgIAorICAgICAgICBUaGUgY2hhbmdlcyB0byB0aGUgYnl0ZWNvZGUgZ2Vu
ZXJhdG9yIGFsc28gaW5jbHVkZSBleHBsaWNpdCBkdXBsaWNhdGlvbiBvZiB0aGUgZm9yLWluIGxv
b3AgYm9keSAKKyAgICAgICAgdG8gc2VncmVnYXRlIGl0ZXJhdGlvbiBvdmVyIGluZGV4ZWQgcHJv
cGVydHkgbmFtZXMsIFN0cnVjdHVyZS1iYXNlZCBwcm9wZXJ0eSBuYW1lcyAoaS5lLiBwcm9wZXJ0
eSAKKyAgICAgICAgbmFtZXMgc3RvcmVkIGRpcmVjdGx5IGluIHRoZSBTdHJ1Y3R1cmUpLCBhbmQg
Z2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyAoaS5lLiBwcm9wZXJ0aWVzIGFib3V0IHdoaWNoIAorICAg
ICAgICBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSB3aXRoIHJlZ2FyZCB0byB0aGUgbmFtZSBvZiB0
aGUgcHJvcGVydHksIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJvcGVydHksIAorICAgICAgICBvciBl
dmVuIHdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3Qgc3RpbGwgY29udGFpbnMgdGhhdCBwcm9wZXJ0
eSkuIFNwbGl0dGluZyB0aGUgbG9vcCBpbnRvIGl0cyAKKyAgICAgICAgbG9naWNhbCBjb21wb25l
bnRzIGFuZCB0aGVuIGV4cGxpY2l0bHkgaXRlcmF0aW5nIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4g
YWxsb3dzIHRoZSBydW50aW1lIG1vcmUgCisgICAgICAgIG9wcG9ydHVuaXRpZXMgdG8gb3B0aW1p
emUgdGhlIG92ZXJhbGwgaXRlcmF0aW9uLiAKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNp
Y0Jsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6aXNCcmFuY2gpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6
CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpMYWJlbDo6c2V0TG9jYXRp
b24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OndpbGxSZXNvbHZlVG9Bcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6bmV3VGVtcG9yYXJ5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmxvY2FsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5j
ZU9mKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlY3RQdXRCeUlk
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q3JlYXRlVGhpcyk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHBlY3RlZEZ1bmN0aW9uU25p
cHBldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3Blcyk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoVHJ5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OnBvcFRyeUFuZEVtaXRDYXRjaCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpiZWdpblN3aXRjaCk6CisgICAgICAgIChKU0M6OmtleUZvckNoYXJhY3RlclN3aXRjaCk6Cisg
ICAgICAgIChKU0M6OnByZXBhcmVKdW1wVGFibGVGb3JTd2l0Y2gpOgorICAgICAgICAoSlNDOjpw
cmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVuZFN3aXRjaCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0RW51bWVyYXRpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaElu
ZGV4ZWRGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcElu
ZGV4ZWRGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hT
dHJ1Y3R1cmVGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cFN0cnVjdHVyZUZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0Q2hlY2tQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5leHRJbmRleGVkUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0U3RydWN0dXJlUHJvcGVydHlOYW1lKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0R2VuZXJpY1Byb3BlcnR5TmFtZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dEVudW1lcmF0b3JFbnRy
eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvdG90eXBlKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpT
Qzo6T3B0aW1pemVkRm9ySW5TY29wZTo6T3B0aW1pemVkRm9ySW5TY29wZSk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXhwcmVzc2lvbkluZm8pOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkFycmF5Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJhY2tl
dEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEFyZ3VtZW50
czo6Q2FsbEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6TG9naWNhbE9wTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6TG9naWNhbE9wTm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRp
b25Db250ZXh0KToKKyAgICAgICAgKEpTQzo6UmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb25zdERlY2xOb2RlOjplbWl0Q29kZVNpbmdsZSk6Cisg
ICAgICAgIChKU0M6OklmRWxzZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6Oldo
aWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpGb3JJbk5vZGU6OmlkZW50aWZpZXJGb3JCb3VuZExvY2FsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcik6CisgICAgICAgIChKU0M6OkZvck9mTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29udGludWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpCcmVha05vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OnBy
b2Nlc3NDbGF1c2VMaXN0KToKKyAgICAgICAgKEpTQzo6Q2FzZUJsb2NrTm9kZTo6dHJ5VGFibGVT
d2l0Y2gpOgorICAgICAgICAoSlNDOjpDYXNlQmxvY2tOb2RlOjplbWl0Qnl0ZWNvZGVGb3JCbG9j
ayk6CisgICAgICAgIChKU0M6OlN3aXRjaE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChK
U0M6OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQm9keU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFycmF5UGF0dGVybk5vZGU6OmVtaXRE
aXJlY3RCaW5kaW5nKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAg
ICAoSlNDOjpSZWdpc3Rlcjo6ZW51bWVyYXRvckVudHJ5KToKKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6
OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpnZXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpoYW5kbGVIb3N0Q2FsbCk6CisgICAgICAgIChK
U0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwp
OgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAg
IChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc1B1cmUpOgorICAgICAgICAoSlNDOjpUaHJvd2FibGVQ
cmVmaXhlZFN1YkV4cHJlc3Npb25EYXRhOjpzZXRTdWJleHByZXNzaW9uSW5mbyk6CisgICAgICAg
ICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1l
L0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OmFyaXR5
Q2hlY2tGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzRm9yRW51bWVyYXRpb24pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6c2V0UmVtZW1iZXJlZCk6CisgICAg
ICAgICogcnVudGltZS9KU0luZGV4U3RyaW5nLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lc0Zv
ckVudW1lcmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnN1cmVJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnN1
cmVEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZW5zdXJlQ29udGlndW91cyk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpyYWdlRW5zdXJlQ29udGlndW91cyk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjphcnJheVN0b3JhZ2VPck51bGwpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZW5zdXJlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluZGV4aW5nRGF0YSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWxldmFudExlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTRmluYWxPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXQpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJZk5lY2Vzc2FyeSk6
CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpF
bnVtZXJhdG9yRW50cnk6OmNsb25lKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpF
bnVtZXJhdG9yRW50cnkpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpkZXN0cm95KToKKyAgICAg
ICAgKEpTQzo6RW51bWVyYXRvckVudHJ5Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
RW51bWVyYXRvckVudHJ5OjphZGRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6RW51bWVyYXRvckVudHJ5OjphZGRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb252ZXJ0VG9HZW5lcmljRW51bWVyYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGVzdHJveSk6
CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6d2lsbFN0YXJ0QXBwZW5k
aW5nRm9yT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpz
ZXRJbmRleGluZ0xpbWl0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjphcHBlbmRTdHJ1Y3R1cmVJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjphcHBlbmRHZW5lcmljSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpFbnVtZXJhdG9yRW50cnk6OnNldE5leHQpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50
cnk6Om5leHQpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OnNldFN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6c2V0T2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6RW51bWVyYXRvckVudHJ5OjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9y
RW50cnk6Om9iamVjdCk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6c2V0SW5kZXhp
bmdMaW1pdCk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6aW5kZXhpbmdMaW1pdCk6
CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6aGFzTmV4dEluZGV4ZWRQcm9wZXJ0eU5h
bWUpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6Om5leHRJbmRleGVkUHJvcGVydHlO
YW1lKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpuZXh0U3RydWN0dXJlUHJvcGVy
dHlOYW1lKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpuZXh0R2VuZXJpY1Byb3Bl
cnR5TmFtZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp0YWtl
TmV4dEVudHJ5KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjdXJy
ZW50RW50cnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkUHJvcGVy
dHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hl
ZFByb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6Cisg
ICAgICAgIChKU0M6OmpzU3RyaW5nKToKKyAgICAgICAgKEpTQzo6anNBZGQpOgorICAgICAgICAo
SlNDOjpub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKToKKyAgICAgICAgKEpT
Qzo6bm9ybWFsaXplUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlNDOjppc1Byb3RvdHlwZUNo
YWluTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6OmpzSW5kZXhTdHJpbmcpOgorICAgICAgICAo
SlNDOjpqc1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0
dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6b3V0T2ZMaW5lQ2FwYWNpdHkpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om91dE9mTGluZVNpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENhY2hlZFBy
b3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVkUHJvcGVy
dHlFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6Cisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6c2NyYXRjaEJ1ZmZlckZvclNpemUp
OgorCiAyMDE0LTA2LTIwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgTWVyZ2UgcjE2OTkwMyB0byB0aGUgYnJhbmNoLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC04MDksNiArODA5LDggQEAKIAkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8qIEpT
TWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJBNEJCN0YyMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUlu
dGVybmFsLmggKi87IH07CiAJCTJBNEVDOTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJp
ZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi87
IH07CiAJCTJBNEVDOTBDMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNEVDOTBBMTg2
MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyQTYzQkM0MDE5NEEzOTlFMDA4NjAzQzgg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNjNCQzNFMTk0QTM5OUUwMDg2MDNDOCAvKiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwICovOyB9OworCQkyQTYzQkM0MTE5NEEzOTlFMDA4NjAzQzgg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQTYzQkMzRjE5NEEzOTlFMDA4NjAzQzggLyogSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmggKi87IH07CiAJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBD
b3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIgLyogQ29weVdyaXRlQmFycmllci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBNkY0NjI2
MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVh
cE9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBN0E1OEVFMTgwOEE0QzQwMDIw
QkRGNyAvKiBEZWZlckdDLmNwcCAqLzsgfTsKQEAgLTgxNiw2ICs4MTgsNyBAQAogCQkyQTgzNjM4
NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE4MzYzODQxOEQ3RDBFRTAwMDBF
QkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTgzNjM4OTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyQTgzNjM4NzE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlD
YWxsYmFjay5jcHAgKi87IH07CiAJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NB
Y3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTgzNjM4ODE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFj
ay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJB
ODU0M0Q2MTk1MjU5MzAwMEQzMzQ5MCAvKiBKU0luZGV4U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTg1NDNENTE5NTI1OTMwMDBEMzM0OTAg
LyogSlNJbmRleFN0cmluZy5oICovOyB9OwogCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkE4ODA2NzYxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hp
dGVsaXN0LmNwcCAqLzsgfTsKIAkJMkE4ODA2NzkxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0
aW9uV2hpdGVsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyQTg4MDY3NzE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCAq
LzsgfTsKIAkJMkFBQUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFBQUEzMTAxOEJE
NDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTQyLDYgKzI5NDUsOCBAQAogCQkyQTRCQjdG
MjE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hbmFnZWRWYWx1ZUludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJh
cnJpZXJCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5
MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMkE2M0JDM0UxOTRBMzk5RTAwODYwM0M4IC8qIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
QTYzQkMzRjE5NEEzOTlFMDA4NjAzQzggLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTY4Mjk1QTE4NzVGODA1MDBCNkMzRTIg
LyogQ29weVdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3B5V3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBNkY0NjI1
MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEhlYXBPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJHQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yOTQ5LDYgKzI5NTQsNyBAQAogCQkyQTgzNjM4NDE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBODM2Mzg3MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bGxHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTgzNjM4ODE4RDdEMEZF
MDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTJBODU0M0Q1MTk1MjU5MzAwMEQzMzQ5MCAvKiBKU0luZGV4U3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW5kZXhTdHJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE4ODA2NzYxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1
bmN0aW9uV2hpdGVsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdGdW5jdGlvbldoaXRlbGlz
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBODgwNjc3MTkxMDdENTUwMENC
MEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdGdW5jdGlvbldoaXRlbGlzdC5oOyBwYXRoID0gZGZnL0RGR0Z1bmN0aW9uV2hp
dGVsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBQUFBMzEwMThCRDQ5RDEw
MDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3RydWN0dXJlSURCbG9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
OTM2LDYgKzQ5NDIsOSBAQAogCQkJCTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFu
ZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5o
ICovLAogCQkJCUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVz
LmggKi8sCisJCQkJMkE2M0JDM0UxOTRBMzk5RTAwODYwM0M4IC8qIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5jcHAgKi8sCisJCQkJMkE2M0JDM0YxOTRBMzk5RTAwODYwM0M4IC8qIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oICovLAorCQkJCTJBODU0M0Q1MTk1MjU5MzAwMEQzMzQ5MCAvKiBK
U0luZGV4U3RyaW5nLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtNjAxNiw2ICs2MDI1LDcgQEAKIAkJCQlBN0Q5QTI5NTE3QTBC
Qzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3MTRDQTUxNkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBNjNCQzQxMTk0QTM5OUUwMDg2MDND
OCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIw
MTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1REIgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MEIwODMzMTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5hcnlTd2l0
Y2guaCBpbiBIZWFkZXJzICovLApAQCAtNjUyMSw2ICs2NTMxLDcgQEAKIAkJCQlCQzE4QzQ0ODBF
MTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMjI4
RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDRCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBODU0
M0Q2MTk1MjU5MzAwMEQzMzQ5MCAvKiBKU0luZGV4U3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzA1MkMzNTBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJlbmEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQ0NBRTQ1MTZEMENGNzQwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc1OTQsNiArNzYwNSw3IEBACiAJCQkJMTQ3RjM5QzYxMDdFQzM3NjAw
NDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MjMx
MDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEz
NTY1MEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMkE2M0JDNDAxOTRBMzk5RTAwODYwM0M4IC8qIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgwODcgLyog
RGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE3QTU4RUYxODA4QTRD
NDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDNzEyREUxN0NE
ODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2lj
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsMTEgQEAgc3RhdGljIGJvb2wgaXNCcmFuY2goT3Bjb2RlSUQgb3Bjb2RlSUQp
CiAgICAgY2FzZSBvcF9nZXRfcG5hbWVzOgogICAgIGNhc2Ugb3BfbmV4dF9wbmFtZToKICAgICBj
YXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKKyAgICBjYXNlIG9wX2NoZWNrX3Byb3BlcnR5X2Vu
dW1lcmF0b3I6CisgICAgY2FzZSBvcF9uZXh0X2luZGV4ZWRfcG5hbWU6CisgICAgY2FzZSBvcF9u
ZXh0X3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX25leHRfZ2VuZXJpY19wbmFtZToKKyAg
ICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9lbnRyeToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTcwMjE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogWwogICAgIHsKLSAgICAgICAgInNlY3Rpb24i
IDogIkJ5dGVjb2RlcyIsICJlbWl0SW5IRmlsZSIgOiB0cnVlLCAiZW1pdEluQVNNRmlsZSIgOiB0
cnVlLCAKLSAgICAgICAgIm1hY3JvTmFtZUNvbXBvbmVudCIgOiAiQllURUNPREUiLCAiYXNtUHJl
Zml4IiA6ICJsbGludF8iLCAKKyAgICAgICAgInNlY3Rpb24iIDogIkJ5dGVjb2RlcyIsICJlbWl0
SW5IRmlsZSIgOiB0cnVlLCAiZW1pdEluQVNNRmlsZSIgOiB0cnVlLAorICAgICAgICAibWFjcm9O
YW1lQ29tcG9uZW50IiA6ICJCWVRFQ09ERSIsICJhc21QcmVmaXgiIDogImxsaW50XyIsCiAgICAg
ICAgICJieXRlY29kZXMiIDogWwogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW50ZXIiLCAi
bGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9hY3RpdmF0
aW9uIiwgImxlbmd0aCIgOiAyIH0sCkBAIC0xMTAsNiArMTEwLDE1IEBACiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF90b19wcmltaXRpdmUiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9wbmFtZXMiLCAibGVuZ3RoIiA6IDYgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX25leHRfcG5hbWUiLCAibGVuZ3RoIiA6IDcgfSwKKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yIiwgImxlbmd0aCIgOiAzIH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiLCAibGVu
Z3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX2luZGV4X3N0cmluZyIs
ICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY2hlY2tfcHJvcGVy
dHlfZW51bWVyYXRvciIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfbmV4dF9pbmRleGVkX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9uZXh0X3N0cnVjdHVyZV9wbmFtZSIsICJsZW5ndGgiIDogNCB9LAorICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfbmV4dF9nZW5lcmljX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9uZXh0X2VudW1lcmF0b3JfZW50cnkiLCAibGVu
Z3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9wcm90b3R5cGUiLCAi
bGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUi
LCAibGVuZ3RoIiA6IDYgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Nj
b3BlIiwgImxlbmd0aCIgOiA4IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9f
c2NvcGUiLCAibGVuZ3RoIiA6IDcgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2NhcHR1
cmVkX2Z1bmM6Ci0gICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjogCisgICAgY2FzZSBvcF9j
cmVhdGVfYWN0aXZhdGlvbjoKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2Fz
ZSBvcF90b190aGlzOgogICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKQEAgLTkxLDYg
KzkxLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfY2hlY2tfcHJvcGVy
dHlfZW51bWVyYXRvcjoKICAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgogICAgIGNhc2Ug
b3BfcHV0X2J5X3ZhbDogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24s
IG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpAQCAtMTE2LDYgKzExNywxMyBA
QCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9nZXRfcHJvdG90eXBlOgorICAg
IGNhc2Ugb3BfbmV4dF9nZW5lcmljX3BuYW1lOgorICAgIGNhc2Ugb3BfbmV4dF9zdHJ1Y3R1cmVf
cG5hbWU6CisgICAgY2FzZSBvcF9uZXh0X2luZGV4ZWRfcG5hbWU6CisgICAgY2FzZSBvcF9nZXRf
cHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoK
KyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2Nv
bnN0X25vcDoKICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OgogICAgIGNhc2Ugb3BfcHVz
aF9uYW1lX3Njb3BlOgpAQCAtMTQ3LDYgKzE1NSw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9lbnRyeToKICAgICBjYXNlIG9wX2dldF9ieV92
YWw6CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgogICAgIGNhc2Ugb3BfaW46CkBA
IC0yNDQsNiArMjUzLDcgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVC
bAogICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uLT51Lm9wY29kZSk7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIC8vIFRoZXNl
IGRvbid0IGRlZmluZSBhbnl0aGluZy4KKyAgICBjYXNlIG9wX2NoZWNrX3Byb3BlcnR5X2VudW1l
cmF0b3I6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9wX2luaXRf
Z2xvYmFsX2NvbnN0X25vcDoKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKQEAgLTM2Niw2
ICszNzYsMTQgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAg
IGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2RlbF9ieV9pZDoKICAgICBj
YXNlIG9wX2RlbF9ieV92YWw6CisgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoK
KyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNlIG9wX3RvX2luZGV4
X3N0cmluZzoKKyAgICBjYXNlIG9wX25leHRfaW5kZXhlZF9wbmFtZToKKyAgICBjYXNlIG9wX25l
eHRfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfbmV4dF9nZW5lcmljX3BuYW1lOgorICAg
IGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX2VudHJ5OgorICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlw
ZToKICAgICBjYXNlIG9wX3Vuc2lnbmVkOiB7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgTGFiZWw6
OnNldExvY2F0aW9uKHVuc2lnbmVkIGxvY2F0aW9uKQogewogICAgIG1fbG9jYXRpb24gPSBsb2Nh
dGlvbjsKLSAgICAKKwogICAgIHVuc2lnbmVkIHNpemUgPSBtX3VucmVzb2x2ZWRKdW1wcy5zaXpl
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgbV9n
ZW5lcmF0b3ItPm1faW5zdHJ1Y3Rpb25zW21fdW5yZXNvbHZlZEp1bXBzW2ldLnNlY29uZF0udS5v
cGVyYW5kID0gbV9sb2NhdGlvbiAtIG1fdW5yZXNvbHZlZEp1bXBzW2ldLmZpcnN0OwpAQCAtNjEs
NyArNjEsNyBAQCB2b2lkIExhYmVsOjpzZXRMb2NhdGlvbih1bnNpZ25lZCBsb2NhdGlvCiBQYXJz
ZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogewogICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0aW9uIik7Ci0gICAgCisKICAgICBt
X2NvZGVCbG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLnZpcnR1YWxSZWdpc3Rl
cigpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRl
cnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgYXV0byYgZW50cnkgPSBtX2RlY29uc3RydWN0ZWRQ
YXJhbWV0ZXJzW2ldOwpAQCAtNzYsNyArNzYsNyBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVy
YXRvcjo6Z2VuZXJhdGUoCiAgICAgICAgIFRyeVJhbmdlJiByYW5nZSA9IG1fdHJ5UmFuZ2VzW2ld
OwogICAgICAgICBpbnQgc3RhcnQgPSByYW5nZS5zdGFydC0+YmluZCgpOwogICAgICAgICBpbnQg
ZW5kID0gcmFuZ2UuZW5kLT5iaW5kKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFRoaXMgd2ls
bCBoYXBwZW4gZm9yIGVtcHR5IHRyeSBibG9ja3MgYW5kIGZvciBzb21lIGNhc2VzIG9mIGZpbmFs
bHkgYmxvY2tzOgogICAgICAgICAvLwogICAgICAgICAvLyB0cnkgewpAQCAtMTAxLDcgKzEwMSw3
IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICAgICAgLy8g
c3VjaCBoYW5kbGVycyBhdCBhbGwuCiAgICAgICAgIGlmIChlbmQgPD0gc3RhcnQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgCisKICAgICAgICAgQVNTRVJUKHJhbmdlLnRyeURhdGEt
PnRhcmdldFNjb3BlRGVwdGggIT0gVUlOVF9NQVgpOwogICAgICAgICBVbmxpbmtlZEhhbmRsZXJJ
bmZvIGluZm8gPSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhcnQpLCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oZW5kKSwKQEAgLTExMCw3ICsxMTAsNyBAQCBQYXJzZXJFcnJv
ciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgICAgIH07CiAgICAgICAgIG1fY29k
ZUJsb2NrLT5hZGRFeGNlcHRpb25IYW5kbGVyKGluZm8pOwogICAgIH0KLSAgICAKKwogICAgIG1f
Y29kZUJsb2NrLT5zZXRJbnN0cnVjdGlvbnMoc3RkOjptYWtlX3VuaXF1ZTxVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtPihtX2luc3RydWN0aW9ucykpOwogCiAgICAgbV9jb2RlQmxvY2stPnNocmlu
a1RvRml0KCk7CkBAIC0xMjcsNyArMTI3LDcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRk
VmFyKAogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRN
b2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlLCBSZWdpc3RlcklEKiYgcjApCiB7CiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm1fbnVtVmFycykgPT0gbV9jYWxsZWVS
ZWdpc3RlcnMuc2l6ZSgpKTsKLSAgICAKKwogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHN5bWJvbFRhYmxlKCkubV9sb2NrKTsKICAgICBpbnQgaW5kZXggPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCkpLm9mZnNldCgpOwogICAgIFN5bWJvbFRh
YmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50ID8gUmVh
ZE9ubHkgOiAwKTsKQEAgLTEzNywxNyArMTM3LDE3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZFZhcigKICAgICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5nZXRJbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAg
IGlmICh3YXRjaE1vZGUgPT0gSXNXYXRjaGFibGUpIHsKICAgICAgICAgd2hpbGUgKG1fd2F0Y2hh
YmxlVmFyaWFibGVzLnNpemUoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2RlQmxvY2stPm1f
bnVtVmFycykpCiAgICAgICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5hcHBlbmQoSWRlbnRp
ZmllcigpKTsKICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlkZW50KTsKICAg
ICB9Ci0gICAgCisKICAgICByMCA9IGFkZFZhcigpOwotICAgIAorCiAgICAgQVNTRVJUKHdhdGNo
TW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVCbG9jay0+
bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkpOwotICAgIAorCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTI2NCw3ICsyNjQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAKICAgICAgICAgZW1pdEluaXRMYXp5UmVnaXN0ZXIoYXJn
dW1lbnRzUmVnaXN0ZXIpOwogICAgICAgICBlbWl0SW5pdExhenlSZWdpc3Rlcih1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIpOwotICAgICAgICAKKwogICAgICAgICBpZiAoc2hvdWxkVGVhck9m
ZkFyZ3VtZW50c0VhZ2VybHkoKSkgewogICAgICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVf
YXJndW1lbnRzKTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd1bWVudHNS
ZWdpc3Rlci0+aW5kZXgoKSk7CkBAIC0zNzIsNyArMzcyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgaWYgKG1fc3ltYm9sVGFibGUtPmNhcHR1cmVD
b3VudCgpKQogICAgICAgICBlbWl0T3Bjb2RlKG9wX3RvdWNoX2VudHJ5KTsKLSAgICAKKwogICAg
IG1fcGFyYW1ldGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3Bh
Y2UgZm9yICJ0aGlzIgogCiAgICAgLy8gQWRkICJ0aGlzIiBhcyBhIHBhcmFtZXRlcgpAQCAtNTE1
LDE3ICs1MTUsMTcgQEAgYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6d2lsbFJlc29sdmVUb0FyZwog
ewogICAgIGlmIChpZGVudCAhPSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoIXNob3VsZE9wdGltaXplTG9jYWxzKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkg
PSBzeW1ib2xUYWJsZSgpLmdldChpZGVudC5pbXBsKCkpOwogICAgIGlmIChlbnRyeS5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fY29kZUJsb2NrLT51c2VzQXJn
dW1lbnRzKCkgJiYgbV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01NjUsNyArNTY1LDcgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6Om5ld1RlbXBvcgogICAgIC8vIFJlY2xhaW0g
ZnJlZSByZWdpc3RlciBJRHMuCiAgICAgd2hpbGUgKG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSAm
JiAhbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgpLnJlZkNvdW50KCkpCiAgICAgICAgIG1fY2FsbGVl
UmVnaXN0ZXJzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgCisKICAgICBSZWdpc3RlcklEKiByZXN1
bHQgPSBuZXdSZWdpc3RlcigpOwogICAgIHJlc3VsdC0+c2V0VGVtcG9yYXJ5KCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTExNjksNyArMTE2OSw3IEBAIExvY2FsIEJ5dGVjb2RlR2VuZXJhdG9y
Ojpsb2NhbChjb25zdCBJZGUKIHsKICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVydHlOYW1lcygp
LnRoaXNJZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gTG9jYWwodGhpc1JlZ2lzdGVyKCksIFJl
YWRPbmx5LCBOb3RDYXB0dXJlZCk7Ci0gICAgCisKICAgICBpZiAocHJvcGVydHkgPT0gcHJvcGVy
dHlOYW1lcygpLmFyZ3VtZW50cykKICAgICAgICAgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3Nhcnko
KTsKIApAQCAtMTI2Niw3ICsxMjY2LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRQdXRUbwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluc3Rh
bmNlT2YoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFz
ZVByb3RvdHlwZSkKLXsgCit7CiAgICAgZW1pdE9wY29kZShvcF9pbnN0YW5jZW9mKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQodmFsdWUtPmluZGV4KCkpOwpAQCAtMTMzOCw3ICsxMzM4LDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREaXJlYwogICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXpl
ci5wdXRCeUlkKGJhc2UtPmluZGV4KCksIHByb3BlcnR5SW5kZXgpOwogCiAgICAgbV9jb2RlQmxv
Y2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsK
LSAgICAKKwogICAgIGVtaXRPcGNvZGUob3BfcHV0X2J5X2lkKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3Bl
cnR5SW5kZXgpOwpAQCAtMTM5MCwxOSArMTM5MCwyNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEdldEFyCiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
R2V0QnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXpl
KCk7IGkgPiAwOyBpLS0pIHsKLSAgICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0ID0gbV9mb3JJ
bkNvbnRleHRTdGFja1tpIC0gMV07Ci0gICAgICAgIGlmIChjb250ZXh0LnByb3BlcnR5UmVnaXN0
ZXIgPT0gcHJvcGVydHkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfZ2V0X2J5X3BuYW1l
KTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwotICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKLSAgICAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LmV4cGVjdGVkU3Vic2NyaXB0UmVnaXN0ZXIt
PmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuaXRl
clJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChj
b250ZXh0LmluZGV4UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRzdDsK
KyAgICBmb3IgKHNpemVfdCBpID0gbV9vcHRpbWl6ZWRGb3JJblNjb3Blcy5zaXplKCk7IGkgPiAw
OyBpLS0pIHsKKyAgICAgICAgT3B0aW1pemVkRm9ySW5TY29wZSYgc2NvcGUgPSBtX29wdGltaXpl
ZEZvckluU2NvcGVzW2kgLSAxXTsKKyAgICAgICAgaWYgKHNjb3BlLmxvY2FsLmdldCgpICE9IHBy
b3BlcnR5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3dpdGNoIChzY29wZS50
eXBlKSB7CisgICAgICAgIGNhc2UgT3B0aW1pemVkRm9ySW5TY29wZTo6SW5kZXhlZEZvckluU2Nv
cGU6CisgICAgICAgIGNhc2UgT3B0aW1pemVkRm9ySW5TY29wZTo6U3RydWN0dXJlRm9ySW5TY29w
ZToKKyAgICAgICAgICAgIC8vIFRPRE86IFVzZSBKU0luZGV4U3RyaW5nCisgICAgICAgICAgICAv
LyBUT0RPOiBVc2UgSlNQcm9wZXJ0eU5hbWVTdHJpbmcKKyAgICAgICAgICAgIHByb3BlcnR5ID0g
c2NvcGUuaW5kZXguZ2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorCisgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIFVubGlua2Vk
QXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwogICAgIFVubGlu
a2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2J5X3Zh
bCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CkBAIC0xNDU4LDcgKzE0
NjUsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dEJ5CiAKIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q3JlYXRlVGhpcyhSZWdpc3RlcklEKiBkc3Qp
CiB7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBuZXdUZW1wb3JhcnkoKTsgCisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBuZXdUZW1wb3JhcnkoKTsKIAogICAgIG1fY29kZUJs
b2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7
CiAgICAgZW1pdE9wY29kZShvcF9nZXRfY2FsbGVlKTsKQEAgLTE0NjgsOSArMTQ3NSw5IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q3JlYXQKICAgICBzaXplX3QgYmVnaW4g
PSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyLmNy
ZWF0ZVRoaXMobV90aGlzUmVnaXN0ZXIuaW5kZXgoKSwgYmVnaW4gKyAzKTsKIAotICAgIGVtaXRP
cGNvZGUob3BfY3JlYXRlX3RoaXMpOyAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV90aGlz
UmVnaXN0ZXIuaW5kZXgoKSk7IAotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRl
eCgpKTsgCisgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfdGhpcyk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChmdW5jLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAg
cmV0dXJuIGRzdDsKIH0KQEAgLTE1OTcsNyArMTYwNCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0TmV3RnUKIHsKICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9
IG4tPmJvZHkoKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlv
bkV4cHIobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7Ci0gICAgCisKICAgICBjcmVhdGVBY3RpdmF0
aW9uSWZOZWNlc3NhcnkoKTsKICAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jX2V4cCk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIwLT5pbmRleCgpKTsKQEAgLTE2MTQsNyArMTYyMSw3IEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmNyZWF0ZUFyZ3VtZW50c0kKIHsKICAgICBpZiAobV9j
b2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlm
ICghbV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
NjU3LDE4ICsxNjY0LDE4IEBAIEV4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXQKICAgICAgICAgLy8gSWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgbm9uLXplcm8sIHRo
ZW4gd2UgY2FuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3RpbmcuCiAgICAgICAgIGlmIChjYWxsQXJn
dW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPj0gMikKICAgICAgICAgICAgIHJl
dHVybiBOb0V4cGVjdGVkRnVuY3Rpb247Ci0gICAgICAgIAorCiAgICAgICAgIHNpemVfdCBiZWdp
biA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKICAgICAgICAgZW1pdE9wY29kZShvcF9qbmVxX3B0
cik7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFNwZWNpYWw6Ok9iamVjdENvbnN0cnVjdG9yKTsKICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlYWxDYWxsLT5iaW5kKGJlZ2luLCBpbnN0cnVj
dGlvbnMoKS5zaXplKCkpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGRzdCAhPSBpZ25vcmVk
UmVzdWx0KCkpCiAgICAgICAgICAgICBlbWl0TmV3T2JqZWN0KGRzdCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICAgICAgCisKICAgICBjYXNlIEV4cGVjdEFycmF5Q29uc3RydWN0b3I6IHsK
ICAgICAgICAgLy8gSWYgeW91J3JlIGRvaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gIm5ldyBBcnJh
eSgpIiBvciAibmV3IEFycmF5KGZvbykiIHRoZW4gd2UKICAgICAgICAgLy8gZG9uJ3QgZG8gaW5s
aW5lIGl0LCBmb3Igbm93LiBUaGUgb25seSByZWFzb24gaXMgdGhhdCBjYWxsIGFyZ3VtZW50cyBh
cmUgaW4KQEAgLTE2NzcsMTMgKzE2ODQsMTMgQEAgRXhwZWN0ZWRGdW5jdGlvbiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdAogICAgICAgICAvLyB0aGluZ3Mgc291bmRzIGxpa2UgaXQncyB3b3J0aCBp
dC4KICAgICAgICAgaWYgKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSA+IDIpCiAgICAgICAgICAgICByZXR1cm4gTm9FeHBlY3RlZEZ1bmN0aW9uOwotICAgICAgICAK
KwogICAgICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgICAg
IGVtaXRPcGNvZGUob3Bfam5lcV9wdHIpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZnVuYy0+aW5kZXgoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChTcGVjaWFsOjpB
cnJheUNvbnN0cnVjdG9yKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlYWxDYWxs
LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICAgICAgCisKICAgICAg
ICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKICAgICAgICAgICAgIGlmIChjYWxsQXJn
dW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPT0gMikgewogICAgICAgICAgICAg
ICAgIGVtaXRPcGNvZGUob3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk7CkBAIC0xNzAxLDE3ICsxNzA4
LDE3IEBAIEV4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXQKICAgICAgICAg
fQogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQVNTRVJUKGV4cGVjdGVkRnVuY3Rpb24gPT0gTm9FeHBlY3RlZEZ1bmN0aW9uKTsKICAgICAg
ICAgcmV0dXJuIE5vRXhwZWN0ZWRGdW5jdGlvbjsKICAgICB9Ci0gICAgCisKICAgICBzaXplX3Qg
YmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgZW1pdE9wY29kZShvcF9qbXApOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkb25lLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMo
KS5zaXplKCkpKTsKICAgICBlbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwotICAgIAorCiAgICAg
cmV0dXJuIGV4cGVjdGVkRnVuY3Rpb247CiB9CiAKQEAgLTE3NDEsNyArMTc0OCw3IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICAgICAgZm9yICg7IG47IG4g
PSBuLT5tX25leHQpCiAgICAgICAgICAgICBlbWl0Tm9kZShjYWxsQXJndW1lbnRzLmFyZ3VtZW50
UmVnaXN0ZXIoYXJndW1lbnQrKyksIG4pOwogICAgIH0KLSAgICAKKwogICAgIC8vIFJlc2VydmUg
c3BhY2UgZm9yIGNhbGwgZnJhbWUuCiAgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGNhbGxGcmFt
ZTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7
ICsraSkKQEAgLTE3NTYsNyArMTc2Myw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbCgKIAogICAgIFJlZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CiAgICAg
ZXhwZWN0ZWRGdW5jdGlvbiA9IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMs
IGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwotICAgIAorCiAg
ICAgLy8gRW1pdCBjYWxsLgogICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9
IG5ld0FycmF5UHJvZmlsZSgpOwogICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBl
bWl0UHJvZmlsZWRPcGNvZGUob3Bjb2RlSUQpOwpAQCAtMTc3NCw3ICsxNzgxLDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJyYXlQcm9maWxlKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgCisKICAgICBpZiAoZXhwZWN0ZWRG
dW5jdGlvbiAhPSBOb0V4cGVjdGVkRnVuY3Rpb24pCiAgICAgICAgIGVtaXRMYWJlbChkb25lLmdl
dCgpKTsKIApAQCAtMTc5NSw3ICsxODAyLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRDb25zdAogewogICAgIHJldHVybiBlbWl0Q2FsbFZhcmFyZ3Mob3BfY29uc3RydWN0
X3ZhcmFyZ3MsIGRzdCwgZnVuYywgMCwgYXJndW1lbnRzLCBmaXJzdEZyZWVSZWdpc3RlciwgZmly
c3RWYXJBcmdPZmZzZXQsIHByb2ZpbGVIb29rUmVnaXN0ZXIsIGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7CiB9Ci0gICAgCisKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQgb3Bjb2RlLCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGZ1bmMsIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBS
ZWdpc3RlcklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwg
UmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90RW5kKQogewogICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKQEAg
LTE4MDMsNyArMTgxMCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bFYKICAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX3dpbGxfY2FsbCk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlSG9va1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICB9
Ci0gICAgCisKICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90
RW5kKTsKIAogICAgIC8vIEVtaXQgY2FsbC4KQEAgLTE4NjcsNyArMTg3NCw3IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKICAgICAvLyBHZW5lcmF0ZSBjb2RlIGZv
ciBhcmd1bWVudHMuCiAgICAgdW5zaWduZWQgYXJndW1lbnQgPSAwOwogICAgIGlmIChBcmd1bWVu
dHNOb2RlKiBhcmd1bWVudHNOb2RlID0gY2FsbEFyZ3VtZW50cy5hcmd1bWVudHNOb2RlKCkpIHsK
LSAgICAgICAgCisKICAgICAgICAgQXJndW1lbnRMaXN0Tm9kZSogbiA9IGNhbGxBcmd1bWVudHMu
YXJndW1lbnRzTm9kZSgpLT5tX2xpc3ROb2RlOwogICAgICAgICBpZiAobiAmJiBuLT5tX2V4cHIt
PmlzU3ByZWFkRXhwcmVzc2lvbigpKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbi0+
bV9uZXh0KTsKQEAgLTE4NzksNyArMTg4Niw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0Q29uc3QKICAgICAgICAgICAgICAgICBhcmd1bWVudFJlZ2lzdGVyID0gZXhwcmVz
c2lvbi0+ZW1pdEJ5dGVjb2RlKCp0aGlzLCBjYWxsQXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIo
MCkpOwogICAgICAgICAgICAgcmV0dXJuIGVtaXRDb25zdHJ1Y3RWYXJhcmdzKGRzdCwgZnVuYywg
YXJndW1lbnRSZWdpc3Rlci5nZXQoKSwgbmV3VGVtcG9yYXJ5KCksIDAsIGNhbGxBcmd1bWVudHMu
cHJvZmlsZUhvb2tSZWdpc3RlcigpLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAg
ICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoQXJndW1lbnRMaXN0Tm9kZSogbiA9IGFy
Z3VtZW50c05vZGUtPm1fbGlzdE5vZGU7IG47IG4gPSBuLT5tX25leHQpCiAgICAgICAgICAgICBl
bWl0Tm9kZShjYWxsQXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnQrKyksIG4pOwog
ICAgIH0KQEAgLTE4OTUsNyArMTkwMiw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q29uc3QKICAgICAgICAgY2FsbEZyYW1lLmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CiAK
ICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKLSAg
ICAKKwogICAgIFJlZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgZXhwZWN0ZWRG
dW5jdGlvbiA9IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwogCkBAIC0yMTEyLDcgKzIxMTks
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjCiAgICAgICAgICAg
ICBpZiAodG9wU2NvcGUgPT0gYm90dG9tU2NvcGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIFZlY3RvcjxDb250cm9sRmxvd0NvbnRleHQ+
IHNhdmVkU2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hJbmZvPiBzYXZl
ZFN3aXRjaENvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPEZvckluQ29udGV4dD4gc2F2ZWRG
b3JJbkNvbnRleHRTdGFjazsKQEAgLTIxMjAsNyArMjEyNyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAgTGFiZWxTY29wZVN0b3JlIHNhdmVkTGFi
ZWxTY29wZXM7CiAgICAgICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlICYmIHRvcFNj
b3BlLT5pc0ZpbmFsbHlCbG9jaykgewogICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBiZWZvcmVG
aW5hbGx5ID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwotICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHdvcmxkIHdoaWxlIGlu
c3RhdGluZyB0aGUgc3RhdGUgb2YgdGhlIHdvcmxkCiAgICAgICAgICAgICAvLyBmb3IgdGhlIGZp
bmFsbHkgYmxvY2suCiAgICAgICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dCA9
IHRvcFNjb3BlLT5maW5hbGx5Q29udGV4dDsKQEAgLTIxNjcsMTIgKzIxNzQsMTIgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAgICAgbV9maW5hbGx5
RGVwdGggPSBmaW5hbGx5Q29udGV4dC5maW5hbGx5RGVwdGg7CiAgICAgICAgICAgICBpbnQgc2F2
ZWREeW5hbWljU2NvcGVEZXB0aCA9IG1fbG9jYWxTY29wZURlcHRoOwogICAgICAgICAgICAgbV9s
b2NhbFNjb3BlRGVwdGggPSBmaW5hbGx5Q29udGV4dC5keW5hbWljU2NvcGVEZXB0aDsKLSAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAvLyBFbWl0IHRoZSBmaW5hbGx5IGJsb2NrLgogICAgICAg
ICAgICAgZW1pdE5vZGUoZmluYWxseUNvbnRleHQuZmluYWxseUJsb2NrKTsKLSAgICAgICAgICAg
IAorCiAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGFmdGVyRmluYWxseSA9IGVtaXRMYWJlbChu
ZXdMYWJlbCgpLmdldCgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBSZXN0b3Jl
IHRoZSBzdGF0ZSBvZiB0aGUgd29ybGQuCiAgICAgICAgICAgICBpZiAoZmxpcFNjb3Blcykgewog
ICAgICAgICAgICAgICAgIG1fc2NvcGVDb250ZXh0U3RhY2sgPSBzYXZlZFNjb3BlQ29udGV4dFN0
YWNrOwpAQCAtMjE5Niw3ICsyMjAzLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENv
bXBsZXhQb3BTYwogICAgICAgICAgICAgICAgIG1fbGFiZWxTY29wZXMgPSBzYXZlZExhYmVsU2Nv
cGVzOwogICAgICAgICAgICAgbV9maW5hbGx5RGVwdGggPSBzYXZlZEZpbmFsbHlEZXB0aDsKICAg
ICAgICAgICAgIG1fbG9jYWxTY29wZURlcHRoID0gc2F2ZWREeW5hbWljU2NvcGVEZXB0aDsKLSAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICAtLXRvcFNjb3BlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjI1NCwyOSArMjI2MSwyOSBAQCBUcnlEYXRhKiBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFRy
eShMYWJlCiAgICAgdHJ5RGF0YS50YXJnZXRTY29wZURlcHRoID0gVUlOVF9NQVg7CiAgICAgbV90
cnlEYXRhLmFwcGVuZCh0cnlEYXRhKTsKICAgICBUcnlEYXRhKiByZXN1bHQgPSAmbV90cnlEYXRh
Lmxhc3QoKTsKLSAgICAKKwogICAgIFRyeUNvbnRleHQgdHJ5Q29udGV4dDsKICAgICB0cnlDb250
ZXh0LnN0YXJ0ID0gc3RhcnQ7CiAgICAgdHJ5Q29udGV4dC50cnlEYXRhID0gcmVzdWx0OwotICAg
IAorCiAgICAgbV90cnlDb250ZXh0U3RhY2suYXBwZW5kKHRyeUNvbnRleHQpOwotICAgIAorCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cFRyeUFuZEVtaXRDYXRjaChUcnlEYXRhKiB0cnlEYXRhLCBSZWdpc3RlcklEKiB0YXJnZXRSZWdp
c3RlciwgTGFiZWwqIGVuZCkKIHsKICAgICBtX3VzZXNFeGNlcHRpb25zID0gdHJ1ZTsKLSAgICAK
KwogICAgIEFTU0VSVF9VTlVTRUQodHJ5RGF0YSwgbV90cnlDb250ZXh0U3RhY2subGFzdCgpLnRy
eURhdGEgPT0gdHJ5RGF0YSk7Ci0gICAgCisKICAgICBUcnlSYW5nZSB0cnlSYW5nZTsKICAgICB0
cnlSYW5nZS5zdGFydCA9IG1fdHJ5Q29udGV4dFN0YWNrLmxhc3QoKS5zdGFydDsKICAgICB0cnlS
YW5nZS5lbmQgPSBlbmQ7CiAgICAgdHJ5UmFuZ2UudHJ5RGF0YSA9IG1fdHJ5Q29udGV4dFN0YWNr
Lmxhc3QoKS50cnlEYXRhOwogICAgIG1fdHJ5UmFuZ2VzLmFwcGVuZCh0cnlSYW5nZSk7CiAgICAg
bV90cnlDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIAorCiAgICAgZW1pdExhYmVsKHRy
eVJhbmdlLnRyeURhdGEtPnRhcmdldC5nZXQoKSk7CiAgICAgdHJ5UmFuZ2UudHJ5RGF0YS0+dGFy
Z2V0U2NvcGVEZXB0aCA9IG1fbG9jYWxTY29wZURlcHRoOwogCkBAIC0yMzMzLDcgKzIzNDAsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpiZWdpblN3aXRjaChSZWdpCiAgICAgfQogCiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBwbGFjZSBob2xkZXIgZm9yIHRhYmxlIGluZGV4
Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOyAvLyBwbGFjZSBob2xkZXIgZm9yIGRlZmF1
bHQgdGFyZ2V0ICAgIAorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gcGxhY2UgaG9s
ZGVyIGZvciBkZWZhdWx0IHRhcmdldAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY3J1dGlu
ZWVSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgbV9zd2l0Y2hDb250ZXh0U3RhY2suYXBwZW5kKGlu
Zm8pOwogfQpAQCAtMjM1Niw3ICsyMzYzLDcgQEAgc3RhdGljIGludDMyX3Qga2V5Rm9yQ2hhcmFj
dGVyU3dpdGNoKEV4cAogICAgIEFTU0VSVChub2RlLT5pc1N0cmluZygpKTsKICAgICBTdHJpbmdJ
bXBsKiBjbGF1c2UgPSBzdGF0aWNfY2FzdDxTdHJpbmdOb2RlKj4obm9kZSktPnZhbHVlKCkuaW1w
bCgpOwogICAgIEFTU0VSVChjbGF1c2UtPmxlbmd0aCgpID09IDEpOwotICAgIAorCiAgICAgaW50
MzJfdCBrZXkgPSAoKmNsYXVzZSlbMF07CiAgICAgQVNTRVJUKGtleSA+PSBtaW4pOwogICAgIEFT
U0VSVChrZXkgPD0gbWF4KTsKQEAgLTIzNzIsMjAgKzIzNzksMjAgQEAgc3RhdGljIHZvaWQgcHJl
cGFyZUp1bXBUYWJsZUZvclN3aXRjaCgKICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNp
emUobWF4IC0gbWluICsgMSk7CiAgICAganVtcFRhYmxlLmJyYW5jaE9mZnNldHMuZmlsbCgwKTsK
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgY2xhdXNlQ291bnQ7ICsraSkgewotICAgICAg
ICAvLyBXZSdyZSBlbWl0dGluZyB0aGlzIGFmdGVyIHRoZSBjbGF1c2UgbGFiZWxzIHNob3VsZCBo
YXZlIGJlZW4gZml4ZWQsIHNvIAorICAgICAgICAvLyBXZSdyZSBlbWl0dGluZyB0aGlzIGFmdGVy
IHRoZSBjbGF1c2UgbGFiZWxzIHNob3VsZCBoYXZlIGJlZW4gZml4ZWQsIHNvCiAgICAgICAgIC8v
IHRoZSBsYWJlbHMgc2hvdWxkIG5vdCBiZSAiZm9yd2FyZCIgcmVmZXJlbmNlcwogICAgICAgICBB
U1NFUlQoIWxhYmVsc1tpXS0+aXNGb3J3YXJkKCkpOwotICAgICAgICBqdW1wVGFibGUuYWRkKGtl
eUdldHRlcihub2Rlc1tpXSwgbWluLCBtYXgpLCBsYWJlbHNbaV0tPmJpbmQoc3dpdGNoQWRkcmVz
cywgc3dpdGNoQWRkcmVzcyArIDMpKTsgCisgICAgICAgIGp1bXBUYWJsZS5hZGQoa2V5R2V0dGVy
KG5vZGVzW2ldLCBtaW4sIG1heCksIGxhYmVsc1tpXS0+YmluZChzd2l0Y2hBZGRyZXNzLCBzd2l0
Y2hBZGRyZXNzICsgMykpOwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJs
ZUZvclN0cmluZ1N3aXRjaChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQz
Ml90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+KiBs
YWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMpCiB7CiAgICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IGNsYXVzZUNvdW50OyArK2kpIHsKLSAgICAgICAgLy8gV2UncmUgZW1pdHRpbmcgdGhp
cyBhZnRlciB0aGUgY2xhdXNlIGxhYmVscyBzaG91bGQgaGF2ZSBiZWVuIGZpeGVkLCBzbyAKKyAg
ICAgICAgLy8gV2UncmUgZW1pdHRpbmcgdGhpcyBhZnRlciB0aGUgY2xhdXNlIGxhYmVscyBzaG91
bGQgaGF2ZSBiZWVuIGZpeGVkLCBzbwogICAgICAgICAvLyB0aGUgbGFiZWxzIHNob3VsZCBub3Qg
YmUgImZvcndhcmQiIHJlZmVyZW5jZXMKICAgICAgICAgQVNTRVJUKCFsYWJlbHNbaV0tPmlzRm9y
d2FyZCgpKTsKLSAgICAgICAgCisKICAgICAgICAgQVNTRVJUKG5vZGVzW2ldLT5pc1N0cmluZygp
KTsKICAgICAgICAgU3RyaW5nSW1wbCogY2xhdXNlID0gc3RhdGljX2Nhc3Q8U3RyaW5nTm9kZSo+
KG5vZGVzW2ldKS0+dmFsdWUoKS5pbXBsKCk7CiAgICAgICAgIGp1bXBUYWJsZS5vZmZzZXRUYWJs
ZS5hZGQoY2xhdXNlLCBsYWJlbHNbaV0tPmJpbmQoc3dpdGNoQWRkcmVzcywgc3dpdGNoQWRkcmVz
cyArIDMpKTsKQEAgLTIzOTYsNyArMjQwMyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVu
ZFN3aXRjaCh1aW50MzIKIHsKICAgICBTd2l0Y2hJbmZvIHN3aXRjaEluZm8gPSBtX3N3aXRjaENv
bnRleHRTdGFjay5sYXN0KCk7CiAgICAgbV9zd2l0Y2hDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgp
OwotICAgIAorCiAgICAgc3dpdGNoIChzd2l0Y2hJbmZvLnN3aXRjaFR5cGUpIHsKICAgICBjYXNl
IFN3aXRjaEluZm86OlN3aXRjaEltbWVkaWF0ZToKICAgICBjYXNlIFN3aXRjaEluZm86OlN3aXRj
aENoYXJhY3RlcjogewpAQCAtMjQwOCwxMCArMjQxNSwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbmRTd2l0Y2godWludDMyCiAgICAgICAgICAgICBqdW1wVGFibGUsIHN3aXRjaEluZm8u
Ynl0ZWNvZGVPZmZzZXQsIGNsYXVzZUNvdW50LCBsYWJlbHMsIG5vZGVzLCBtaW4sIG1heCwKICAg
ICAgICAgICAgIHN3aXRjaEluZm8uc3dpdGNoVHlwZSA9PSBTd2l0Y2hJbmZvOjpTd2l0Y2hJbW1l
ZGlhdGUKICAgICAgICAgICAgICAgICA/IGtleUZvckltbWVkaWF0ZVN3aXRjaAotICAgICAgICAg
ICAgICAgIDoga2V5Rm9yQ2hhcmFjdGVyU3dpdGNoKTsgCisgICAgICAgICAgICAgICAgOiBrZXlG
b3JDaGFyYWN0ZXJTd2l0Y2gpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAorCiAg
ICAgY2FzZSBTd2l0Y2hJbmZvOjpTd2l0Y2hTdHJpbmc6IHsKICAgICAgICAgaW5zdHJ1Y3Rpb25z
KClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDFdID0gbV9jb2RlQmxvY2stPm51bWJlck9m
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJ
bmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMl0gPSBkZWZhdWx0TGFiZWwtPmJpbmQoc3dpdGNoSW5mby5i
eXRlY29kZU9mZnNldCwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDMpOwpAQCAtMjQyMCw3
ICsyNDI3LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKHVpbnQzMgogICAg
ICAgICBwcmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKGp1bXBUYWJsZSwgc3dpdGNoSW5m
by5ieXRlY29kZU9mZnNldCwgY2xhdXNlQ291bnQsIGxhYmVscywgbm9kZXMpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgICAgIAorCiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CkBAIC0yNDU4LDcgKzI0NjUsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVhZE9ubHlFeGNlCiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoSWRlbnRpZmll
cihtX3ZtLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKSktPmluZGV4KCkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmYWxzZSk7CiB9Ci0gICAgCisKIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSwgRXhwcmVzc2lvbk5vZGUqIHN1YmplY3ROb2RlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKik+JiBjYWxsQmFjaykKIHsKICAgICBp
ZiAoc3ViamVjdE5vZGUtPmlzUmVzb2x2ZU5vZGUoKQpAQCAtMjQ2OCw3ICsyNDc1LDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogCiAgICAgICAgIExhYmVsU2Nv
cGVQdHIgc2NvcGUgPSBuZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwogICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBlbWl0TG9hZChuZXdUZW1wb3JhcnkoKSwganNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcENvbmRpdGlv
biA9IG5ld0xhYmVsKCk7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFi
ZWwoKTsKICAgICAgICAgZW1pdEp1bXAobG9vcENvbmRpdGlvbi5nZXQoKSk7CkBAIC0yNDc2LDcg
KzI0ODMsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oCiAgICAg
ICAgIGVtaXRMb29wSGludCgpOwogICAgICAgICBlbWl0R2V0QXJndW1lbnRCeVZhbCh2YWx1ZS5n
ZXQoKSwgdW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKSwgaW5kZXguZ2V0KCkpOwogICAg
ICAgICBjYWxsQmFjaygqdGhpcywgdmFsdWUuZ2V0KCkpOwotICAgIAorCiAgICAgICAgIGVtaXRM
YWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAgICAgICAgIGVtaXRJbmMoaW5kZXguZ2V0
KCkpOwogICAgICAgICBlbWl0TGFiZWwobG9vcENvbmRpdGlvbi5nZXQoKSk7CkBAIC0yNDk4LDkg
KzI1MDUsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJhdG9yTmV4dCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFy
eSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLml0ZXJhdG9yTmV4dFByaXZhdGVO
YW1lKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBuZXdUZW1wb3JhcnkoKTsKICAg
ICBlbWl0TG9hZCh2YWx1ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgCisKICAgICBlbWl0
SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgCisKICAgICBSZWZQdHI8TGFiZWw+
IGxvb3BTdGFydCA9IG5ld0xhYmVsKCk7CiAgICAgZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7
CiAgICAgZW1pdExvb3BIaW50KCk7CkBAIC0yNTE1LDQgKzI1MjIsMTI2IEBAIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICBlbWl0TGFiZWwoc2NvcGUtPmJyZWFr
VGFyZ2V0KCkpOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvcklu
U2NvcGUoY29uc3QgSWRlbnRpZmllciogYm91bmRMb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpCit7
CisgICAgaWYgKCFib3VuZExvY2FsKQorICAgICAgICByZXR1cm47CisgICAgTG9jYWwgbG9jYWwg
PSB0aGlzLT5sb2NhbCgqYm91bmRMb2NhbCk7CisgICAgQVNTRVJUKGxvY2FsLmdldCgpKTsKKyAg
ICBPcHRpbWl6ZWRGb3JJblNjb3BlIG5ld1Njb3BlKE9wdGltaXplZEZvckluU2NvcGU6OkluZGV4
ZWRGb3JJblNjb3BlLCBsb2NhbC5nZXQoKSwgaW5kZXgpOworICAgIG1fb3B0aW1pemVkRm9ySW5T
Y29wZXMuYXBwZW5kKG5ld1Njb3BlKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9w
SW5kZXhlZEZvckluU2NvcGUoY29uc3QgSWRlbnRpZmllciogYm91bmRMb2NhbCkKK3sKKyAgICBp
ZiAoIWJvdW5kTG9jYWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX29wdGltaXplZEZvckluU2Nv
cGVzLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVj
dHVyZUZvckluU2NvcGUoY29uc3QgSWRlbnRpZmllciogYm91bmRMb2NhbCwgUmVnaXN0ZXJJRCog
cHJvcGVydHlOYW1lKQoreworICAgIGlmICghYm91bmRMb2NhbCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIExvY2FsIGxvY2FsID0gdGhpcy0+bG9jYWwoKmJvdW5kTG9jYWwpOworICAgIEFTU0VSVChs
b2NhbC5nZXQoKSk7CisgICAgT3B0aW1pemVkRm9ySW5TY29wZSBuZXdTY29wZShPcHRpbWl6ZWRG
b3JJblNjb3BlOjpTdHJ1Y3R1cmVGb3JJblNjb3BlLCBsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1l
KTsKKyAgICBtX29wdGltaXplZEZvckluU2NvcGVzLmFwcGVuZChuZXdTY29wZSk7Cit9CisKK3Zv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0cnVjdHVyZUZvckluU2NvcGUoY29uc3QgSWRlbnRp
ZmllciogYm91bmRMb2NhbCkKK3sKKyAgICBpZiAoIWJvdW5kTG9jYWwpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX29wdGltaXplZEZvckluU2NvcGVzLnJlbW92ZUxhc3QoKTsKK30KKworUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQoreworICAgIGVtaXRPcGNvZGUob3BfZ2V0X3By
b3BlcnR5X2VudW1lcmF0b3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICByZXR1
cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1l
cmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnkp
Cit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChlbnVtZXJhdG9yRW50cnktPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGkpCit7CisgICAgZW1pdE9wY29kZShvcF90b19pbmRleF9zdHJpbmcp
OworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChpLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCit2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2hlY2tQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5
LCBMYWJlbCogYnJlYWtUYXJnZXQpCit7CisgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOworCisgICAgZW1pdE9wY29kZShvcF9jaGVja19wcm9wZXJ0eV9lbnVtZXJhdG9y
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChlbnVtZXJhdG9yRW50cnktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChicmVha1RhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Cit9
CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dEluZGV4ZWRQcm9wZXJ0
eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExhYmVs
KiB0b3BPZkxvb3ApCit7CisgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
OworCisgICAgZW1pdE9wY29kZShvcF9uZXh0X2luZGV4ZWRfcG5hbWUpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChl
bnVtZXJhdG9yRW50cnktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0b3BP
Zkxvb3AtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOworICAgIHJldHVybiBk
c3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dFN0cnVjdHVy
ZVByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRy
eSwgTGFiZWwqIHRvcE9mTG9vcCkKK3sKKyAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7CisKKyAgICBlbWl0T3Bjb2RlKG9wX25leHRfc3RydWN0dXJlX3BuYW1lKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZW51bWVyYXRvckVudHJ5LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQodG9wT2ZMb29wLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAg
ICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
eHRHZW5lcmljUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvckVudHJ5LCBMYWJlbCogdG9wT2ZMb29wKQoreworICAgIHNpemVfdCBiZWdpbiA9IGluc3Ry
dWN0aW9ucygpLnNpemUoKTsKKworICAgIGVtaXRPcGNvZGUob3BfbmV4dF9nZW5lcmljX3BuYW1l
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvckVudHJ5LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodG9wT2ZMb29wLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
KTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5leHRFbnVtZXJhdG9yRW50cnkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBMYWJlbCogdG9wT2ZMb29wKQoreworICAgIHNpemVf
dCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKKworICAgIGVtaXRPcGNvZGUob3BfbmV4
dF9lbnVtZXJhdG9yX2VudHJ5KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCh0b3BPZkxvb3AtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkp
OworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0R2V0UHJvdG90eXBlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKK3sKKyAg
ICBlbWl0T3Bjb2RlKG9wX2dldF9wcm90b3R5cGUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgp
KTsKKyAgICByZXR1cm4gZHN0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwy
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5
UmVnaXN0ZXI7CiAgICAgfTsKIAorICAgIHN0cnVjdCBPcHRpbWl6ZWRGb3JJblNjb3BlIHsKKyAg
ICAgICAgZW51bSBPcHRpbWl6ZWRGb3JJblNjb3BlVHlwZSB7CisgICAgICAgICAgICBJbmRleGVk
Rm9ySW5TY29wZSwKKyAgICAgICAgICAgIFN0cnVjdHVyZUZvckluU2NvcGUKKyAgICAgICAgfTsK
KworICAgICAgICBPcHRpbWl6ZWRGb3JJblNjb3BlKE9wdGltaXplZEZvckluU2NvcGVUeXBlIHR5
cGUsIFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCkKKyAgICAgICAgICAgIDog
dHlwZSh0eXBlKQorICAgICAgICAgICAgLCBsb2NhbChsb2NhbCkKKyAgICAgICAgICAgICwgaW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGltaXplZEZvcklu
U2NvcGVUeXBlIHR5cGU7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsb2NhbDsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluZGV4OworICAgIH07CisKICAgICBzdHJ1Y3QgVHJ5RGF0
YSB7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gdGFyZ2V0OwogICAgICAgICB1bnNpZ25lZCB0YXJn
ZXRTY29wZURlcHRoOwpAQCAtMTM5LDcgKzE1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBSZWdpc3RlcklEKiBnZXQoKSB7IHJldHVybiBtX2xvY2FsOyB9CiAKICAgICAgICAgYm9vbCBp
c1JlYWRPbmx5KCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVzICYgUmVhZE9ubHk7IH0KLSAgICAgICAg
CisKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkKCkgeyByZXR1cm4gbV9pc0NhcHR1cmVkOyB9CiAg
ICAgICAgIENhcHR1cmVNb2RlIGNhcHR1cmVNb2RlKCkgeyByZXR1cm4gaXNDYXB0dXJlZCgpID8g
SXNDYXB0dXJlZCA6IE5vdENhcHR1cmVkOyB9CiAKQEAgLTE2Niw3ICsxODQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoVk0mLCBFdmFsTm9kZSosIFVubGlu
a2VkRXZhbENvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlKTsKIAogICAgICAg
ICB+Qnl0ZWNvZGVHZW5lcmF0b3IoKTsKLSAgICAgICAgCisKICAgICAgICAgVk0qIHZtKCkgY29u
c3QgeyByZXR1cm4gbV92bTsgfQogICAgICAgICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJv
cGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3ZtLT5wcm9wZXJ0eU5hbWVzOyB9CiAKQEAg
LTE4Myw3ICsyMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIGlzQ2FwdHVy
ZWQoaW50IG9wZXJhbmQpOwogICAgICAgICBDYXB0dXJlTW9kZSBjYXB0dXJlTW9kZShpbnQgb3Bl
cmFuZCkgeyByZXR1cm4gaXNDYXB0dXJlZChvcGVyYW5kKSA/IElzQ2FwdHVyZWQgOiBOb3RDYXB0
dXJlZDsgfQotICAgICAgICAKKwogICAgICAgICBMb2NhbCBsb2NhbChjb25zdCBJZGVudGlmaWVy
Jik7CiAgICAgICAgIExvY2FsIGNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYpOwogCkBAIC0y
ODUsNyArMzAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lk
IGVtaXRFeHByZXNzaW9uSW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQp
Ci0gICAgICAgIHsgICAgICAgICAgICAKKyAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGRp
dm90Lm9mZnNldCA+PSBkaXZvdFN0YXJ0Lm9mZnNldCk7CiAgICAgICAgICAgICBBU1NFUlQoZGl2
b3RFbmQub2Zmc2V0ID49IGRpdm90Lm9mZnNldCk7CiAKQEAgLTM3OSwxNCArMzk3LDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0RGVsZXRlQnlWYWwoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRCeUluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVuc2lnbmVk
IGluZGV4LCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdldHRlclNl
dHRlcihSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0
ZXJJRCogZ2V0dGVyLCBSZWdpc3RlcklEKiBzZXR0ZXIpOwotICAgICAgICAKKwogICAgICAgICBF
eHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb25Gb3JJZGVudGlmaWVyKGNvbnN0IElkZW50
aWZpZXImKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dENhbGxFdmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgQ2FsbEFyZ3VtZW50
cyYsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMs
IFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlciwgUmVnaXN0ZXJJRCogYXJndW1lbnRzLCBSZWdpc3Rl
cklEKiBmaXJzdEZyZWVSZWdpc3RlciwgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCwgUmVnaXN0
ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlciwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kKTsKIAogICAgICAgICB2b2lkIGVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNz
aW9uRGF0YSogZW51bWVyYXRpb25Ob2RlLCBFeHByZXNzaW9uTm9kZSogc3ViamVjdE5vZGUsIGNv
bnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKT4m
IGNhbGxCYWNrKTsKLSAgICAgICAgCisKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJldHVybihS
ZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW5kKFJlZ2lzdGVySUQq
IHNyYykgeyByZXR1cm4gZW1pdFVuYXJ5Tm9Ec3RPcChvcF9lbmQsIHNyYyk7IH0KIApAQCAtNDEx
LDYgKzQyOSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdl
dFByb3BlcnR5TmFtZXMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBMYWJlbCogYnJlYWtUYXJnZXQpOwogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV4dFByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIFJlZ2lzdGVySUQqIGl0
ZXIsIExhYmVsKiB0YXJnZXQpOwogCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0
eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdEdldEVudW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yRW50cnkpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRl
eFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGluZGV4KTsKKyAgICAgICAgdm9p
ZCBlbWl0Q2hlY2tQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5LCBMYWJlbCogYnJlYWtU
YXJnZXQpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dEluZGV4ZWRQcm9wZXJ0eU5hbWUo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExhYmVsKiB0b3BP
Zkxvb3ApOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dFN0cnVjdHVyZVByb3BlcnR5TmFt
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSwgTGFiZWwqIHRv
cE9mTG9vcCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXh0R2VuZXJpY1Byb3BlcnR5TmFt
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSwgTGFiZWwqIHRv
cE9mTG9vcCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXh0RW51bWVyYXRvckVudHJ5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwg
TGFiZWwqIHRvcE9mTG9vcCk7CisKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFByb3RvdHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOworCiAgICAgICAgIHZvaWQgZW1p
dFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBTdGFydCBhIHRyeSBi
bG9jay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgpAQCAtNDE5LDcgKzQ0OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBwb3BUcnlBbmRFbWl0Q2F0Y2go
VHJ5RGF0YSosIFJlZ2lzdGVySUQqIHRhcmdldFJlZ2lzdGVyLCBMYWJlbCogZW5kKTsKIAogICAg
ICAgICB2b2lkIGVtaXRUaHJvdyhSZWdpc3RlcklEKiBleGMpCi0gICAgICAgIHsgCisgICAgICAg
IHsKICAgICAgICAgICAgIG1fdXNlc0V4Y2VwdGlvbnMgPSB0cnVlOwogICAgICAgICAgICAgZW1p
dFVuYXJ5Tm9Ec3RPcChvcF90aHJvdywgZXhjKTsKICAgICAgICAgfQpAQCAtNDUxLDYgKzQ4MCwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVt
b3ZlTGFzdCgpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBwdXNoSW5kZXhlZEZvckluU2Nv
cGUoY29uc3QgSWRlbnRpZmllciogYm91bmRMb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAg
ICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKGNvbnN0IElkZW50aWZpZXIqIGJvdW5kTG9j
YWwpOworICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKGNvbnN0IElkZW50aWZp
ZXIqIGJvdW5kTG9jYWwsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHZvaWQg
cG9wU3RydWN0dXJlRm9ySW5TY29wZShjb25zdCBJZGVudGlmaWVyKiBib3VuZExvY2FsKTsKKwog
ICAgICAgICBMYWJlbFNjb3BlUHRyIGJyZWFrVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKICAg
ICAgICAgTGFiZWxTY29wZVB0ciBjb250aW51ZVRhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAK
QEAgLTQ2MSwxNCArNDk1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgc2hv
dWxkRW1pdFByb2ZpbGVIb29rcygpIHsgcmV0dXJuIG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rczsg
fQogICAgICAgICBib29sIHNob3VsZEVtaXREZWJ1Z0hvb2tzKCkgeyByZXR1cm4gbV9zaG91bGRF
bWl0RGVidWdIb29rczsgfQotICAgICAgICAKKwogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKTsgfQotICAgICAgICAK
KwogICAgICAgICBib29sIGlzQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9pc0J1
aWx0aW5GdW5jdGlvbjsgfQotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBMYWJlbDsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBlbWl0T3Bjb2RlKE9wY29k
ZUlEKTsKICAgICAgICAgVW5saW5rZWRBcnJheUFsbG9jYXRpb25Qcm9maWxlIG5ld0FycmF5QWxs
b2NhdGlvblByb2ZpbGUoKTsKICAgICAgICAgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSBuZXdPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpOwpAQCAtNDkwLDEyICs1MjQsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGRvdWJsZSwgSlNWYWx1ZT4g
TnVtYmVyTWFwOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIEpTU3RyaW5n
KiwgSWRlbnRpZmllclJlcEhhc2g+IElkZW50aWZpZXJTdHJpbmdNYXA7Ci0gICAgICAgIAorCiAg
ICAgICAgIC8vIEhlbHBlciBmb3IgZW1pdENhbGwoKSBhbmQgZW1pdENvbnN0cnVjdCgpLiBUaGlz
IHdvcmtzIGJlY2F1c2UgdGhlIHNldCBvZgogICAgICAgICAvLyBleHBlY3RlZCBmdW5jdGlvbnMg
aGF2ZSBpZGVudGljYWwgYmVoYXZpb3IgZm9yIGJvdGggY2FsbCBhbmQgY29uc3RydWN0CiAgICAg
ICAgIC8vIChpLmUuICJPYmplY3QoKSIgaXMgaWRlbnRpY2FsIHRvICJuZXcgT2JqZWN0KCkiKS4K
ICAgICAgICAgRXhwZWN0ZWRGdW5jdGlvbiBlbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJn
dW1lbnRzJiwgTGFiZWwqIGRvbmUpOwotICAgICAgICAKKwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0Q2FsbChPcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBFeHBl
Y3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGRpdm90RW5kKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBuZXdSZWdpc3RlcigpOwpAQCAtNTEx
LDcgKzU0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIERpdHRvLiBSZXR1cm5z
IHRydWUgaWYgYSBuZXcgUmVnaXN0ZXJJRCB3YXMgYWRkZWQsIGZhbHNlIGlmIGEgcHJlLWV4aXN0
aW5nIFJlZ2lzdGVySUQgd2FzIHJlLXVzZWQuCiAgICAgICAgIGJvb2wgYWRkVmFyKGNvbnN0IElk
ZW50aWZpZXImLCBDb25zdGFudE1vZGUsIFdhdGNoTW9kZSwgUmVnaXN0ZXJJRComKTsKLSAgICAg
ICAgCisKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhp
cyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxlKCkuCiAgICAgICAgIFJlZ2lzdGVy
SUQqIGFkZFZhcigpCiAgICAgICAgIHsKQEAgLTU0NCwxNyArNTc4LDE3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB1bnNpZ25lZCBhZGRSZWdFeHAoUmVnRXhwKik7CiAKICAgICAgICAgdW5z
aWduZWQgYWRkQ29uc3RhbnRCdWZmZXIodW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgCisKICAg
ICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG1ha2VGdW5jdGlvbihGdW5jdGlvbkJv
ZHlOb2RlKiBib2R5KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU6OmNyZWF0ZShtX3ZtLCBtX3Njb3BlTm9kZS0+c291cmNlKCksIGJvZHks
IGZhbHNlLCBpc0J1aWx0aW5GdW5jdGlvbigpID8gVW5saW5rZWRCdWlsdGluRnVuY3Rpb24gOiBV
bmxpbmtlZE5vcm1hbEZ1bmN0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJbml0TGF6eVJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKLSAgICAgICAgCisKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdENvbnN0cnVjdFZhcmFyZ3MoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBmdW5jLCBSZWdpc3RlcklEKiBhcmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJl
Z2lzdGVyLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9v
a1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0
aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0Q2FsbFZhcmFyZ3MoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogZnVuYywgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyLCBSZWdpc3RlcklEKiBh
cmd1bWVudHMsIFJlZ2lzdGVySUQqIGZpcnN0RnJlZVJlZ2lzdGVyLCBpbnQzMl90IGZpcnN0VmFy
QXJnT2Zmc2V0LCBSZWdpc3RlcklEKiBwcm9maWxlSG9va1JlZ2lzdGVyLCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwotICAgICAgICAKKwogICAgIHB1YmxpYzoKICAgICAg
ICAgSlNTdHJpbmcqIGFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImKTsKIApAQCAt
NTk3LDcgKzYzMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0ZUFyZ3Vt
ZW50c0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNz
YXJ5KCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5
KFJlZ2lzdGVySUQqKTsKLSAgICAgICAgCisKICAgICAgICAgdW5zaWduZWQgd2F0Y2hhYmxlVmFy
aWFibGUoaW50IG9wZXJhbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcob3BlcmFuZCk7CkBAIC02MTAsMTIgKzY0NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgICAgICAgICByZXR1cm4gYWRkQ29u
c3RhbnQoaWRlbnQpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wgaGFzV2F0
Y2hhYmxlVmFyaWFibGUoaW50IG9wZXJhbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biB3YXRjaGFibGVWYXJpYWJsZShvcGVyYW5kKSAhPSBVSU5UX01BWDsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3c+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wgbV9zaG91bGRFbWl0
RGVidWdIb29rczsKQEAgLTY0OSw5ICs2ODMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFZlY3RvcjxDb250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Nj
b3BlQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250
ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9ySW5Db250ZXh0U3Rh
Y2s7CisgICAgICAgIFZlY3RvcjxPcHRpbWl6ZWRGb3JJblNjb3BlPiBtX29wdGltaXplZEZvcklu
U2NvcGVzOwogICAgICAgICBWZWN0b3I8VHJ5Q29udGV4dD4gbV90cnlDb250ZXh0U3RhY2s7CiAg
ICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFJlZ2lzdGVySUQ+LCBjb25zdCBEZWNvbnN0
cnVjdGlvblBhdHRlcm5Ob2RlKj4+IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnM7Ci0gICAgICAg
IAorCiAgICAgICAgIFZlY3RvcjxUcnlSYW5nZT4gbV90cnlSYW5nZXM7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxUcnlEYXRhLCA4PiBtX3RyeURhdGE7CiAKQEAgLTY2Niw3ICs3MDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIEZ1bmN0aW9uQm9k
eU5vZGUqLCBXVEY6OkludEhhc2g8dW5zaWduZWQgaW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czx1bnNpZ25lZCBpbnQ+PiBtX2xhenlGdW5jdGlvbnM7CiAgICAgICAgIHR5
cGVkZWYgSGFzaE1hcDxGdW5jdGlvbkJvZHlOb2RlKiwgdW5zaWduZWQ+IEZ1bmN0aW9uT2Zmc2V0
TWFwOwogICAgICAgICBGdW5jdGlvbk9mZnNldE1hcCBtX2Z1bmN0aW9uT2Zmc2V0czsKLSAgICAg
ICAgCisKICAgICAgICAgLy8gQ29uc3RhbnQgcG9vbAogICAgICAgICBJZGVudGlmaWVyTWFwIG1f
aWRlbnRpZmllck1hcDsKICAgICAgICAgSlNWYWx1ZU1hcCBtX2pzVmFsdWVNYXA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE0ICs2NiwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgeCA9IDEKIAogICAgIGJlY29tZXMKLSAgICAKKwogICAg
ICAgICBsb2FkIHJbeF0sIDEKLSAgICAKLSAgICBpbnN0ZWFkIG9mIAorCisgICAgaW5zdGVhZCBv
ZgogCiAgICAgICAgIGxvYWQgcjAsIDEKICAgICAgICAgbW92IHJbeF0sIHIwCi0gICAgCisKICAg
ICBiZWNhdXNlIHRoZSBhc3NpZ25tZW50IG5vZGUsICJ4ID0iLCBwYXNzZXMgclt4XSBhcyBkc3Qg
dG8gdGhlIG51bWJlciBub2RlLCAiMSIuCiAqLwogCkBAIC0xNTQsNyArMTU0LDcgQEAgUmVnaXN0
ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3Qs
IGxvY2FsLmdldCgpKTsKICAgICB9Ci0gICAgCisKICAgICBKU1RleHRQb3NpdGlvbiBkaXZvdCA9
IG1fc3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QsIG1fc3RhcnQsIGRpdm90KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2Nv
cGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIG1faWRlbnQpOwpAQCAtMTk0LDcgKzE5NCw3IEBAIFJlZ2lzdGVySUQqIEFycmF5Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICB9CiAKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVU
b0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBhcnJheS5nZXQoKSk7Ci0gICAgCisKIGhhbmRsZVNw
cmVhZDoKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcihsZW5ndGgpKTsKICAgICBhdXRvIHNw
cmVhZGVyID0gW3RoaXMsIGFycmF5LCBpbmRleF0oQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogdmFsdWUpCkBAIC0yMTMsNyArMjEzLDcgQEAgaGFuZGxlU3ByZWFkOgog
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaW5kZXguZ2V0KCkpOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgaWYgKG1fZWxpc2lvbikgewogICAgICAgICBnZW5lcmF0b3IuZW1p
dEJpbmFyeU9wKG9wX2FkZCwgaW5kZXguZ2V0KCksIGluZGV4LmdldCgpLCBnZW5lcmF0b3IuZW1p
dExvYWQoMCwganNOdW1iZXIobV9lbGlzaW9uKSksIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjpu
dW1iZXJUeXBlSXNJbnQzMigpLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlSXNJbnQzMigpKSk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChhcnJheS5nZXQoKSwgZ2VuZXJhdG9yLnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGluZGV4LmdldCgpKTsKQEAgLTI2OCw5ICsyNjgsOSBAQCBSZWdp
c3RlcklEKiBPYmplY3RMaXRlcmFsTm9kZTo6ZW1pdEJ5dGVjCiBSZWdpc3RlcklEKiBQcm9wZXJ0
eUxpc3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmogPSBnZW5lcmF0
b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7Ci0gICAgCisKICAgICBnZW5lcmF0b3IuZW1pdE5ld09i
amVjdChuZXdPYmouZ2V0KCkpOwotICAgIAorCiAgICAgLy8gRmFzdCBjYXNlOiB0aGlzIGxvb3Ag
anVzdCBoYW5kbGVzIHJlZ3VsYXIgdmFsdWUgcHJvcGVydGllcy4KICAgICBQcm9wZXJ0eUxpc3RO
b2RlKiBwID0gdGhpczsKICAgICBmb3IgKDsgcCAmJiBwLT5tX25vZGUtPm1fdHlwZSA9PSBQcm9w
ZXJ0eU5vZGU6OkNvbnN0YW50OyBwID0gcC0+bV9uZXh0KSB7CkBAIC0zMTQsNyArMzE0LDcgQEAg
UmVnaXN0ZXJJRCogUHJvcGVydHlMaXN0Tm9kZTo6ZW1pdEJ5dGVjbwogICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RGlyZWN0UHV0QnlWYWwobmV3T2JqLmdldCgpLCBwcm9wZXJ0eU5hbWUu
Z2V0KCksIGdlbmVyYXRvci5lbWl0Tm9kZShwLT5tX25vZGUtPm1fYXNzaWduKSk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZS0+bV9hc3Np
Z24pOwogCiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZ2V0L3NldCBwcm9wZXJ0eSwgZmluZCBp
dHMgZW50cnkgaW4gdGhlIG1hcC4KQEAgLTMyNiw3ICszMjYsNyBAQCBSZWdpc3RlcklEKiBQcm9w
ZXJ0eUxpc3ROb2RlOjplbWl0Qnl0ZWNvCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyBhbHJlYWR5
IGdlbmVyYXRlZCBhcyBhIHBhcnQgb2YgaXRzIHBhcnRuZXI/CiAgICAgICAgICAgICBpZiAocGFp
ci5zZWNvbmQgPT0gbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAKKwogICAg
ICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIHBhaXJlZCBub2RlIG5vdy4KICAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBnZXR0ZXJSZWc7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2V0dGVyUmVnOwpAQCAtMzYzLDcgKzM2Myw3IEBAIFJlZ2lzdGVySUQqIFByb3BlcnR5TGlz
dE5vZGU6OmVtaXRCeXRlY28KIAogUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKLSAgICBpZiAobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkgCisgICAgaWYgKG1fYmFzZS0+aXNS
ZXNvbHZlTm9kZSgpCiAgICAgICAgICYmIGdlbmVyYXRvci53aWxsUmVzb2x2ZVRvQXJndW1lbnRz
KHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKQogICAgICAg
ICAmJiAhZ2VuZXJhdG9yLnN5bWJvbFRhYmxlKCkuc2xvd0FyZ3VtZW50cygpKSB7CiAgICAgICAg
IFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0KTsK
QEAgLTQzOCw3ICs0MzgsNyBAQCBDYWxsQXJndW1lbnRzOjpDYWxsQXJndW1lbnRzKEJ5dGVjb2Rl
R2VuCiAgICAgICAgIG1fYXJndltpXSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oaSkgPT0gbV9hcmd2LnNpemUoKSAtIDEgfHwg
bV9hcmd2W2ldLT5pbmRleCgpID09IG1fYXJndltpICsgMV0tPmluZGV4KCkgLSAxKTsKICAgICB9
Ci0gICAgCisKICAgICB3aGlsZSAoc3RhY2tPZmZzZXQoKSAlIHN0YWNrQWxpZ25tZW50UmVnaXN0
ZXJzKCkpIHsKICAgICAgICAgbV9hcmd2Lmluc2VydCgwLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCkpOwogICAgICAgICBtX3BhZGRpbmcrKzsKQEAgLTYzNiw3ICs2MzYsNyBAQCBSZWdpc3RlcklE
KiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoMCkpOwogICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYXJn
dW1lbnRzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
IGF1dG8gZXh0cmFjdG9yID0gWyZ0aGlzUmVnaXN0ZXIsICZhcmd1bWVudHNSZWdpc3RlciwgJmlu
ZGV4XShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiB2YWx1ZSkKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gaGF2ZVRo
aXMgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKQEAgLTk5NywxNCArOTk3LDE0IEBAIFJlZ2lzdGVy
SUQqIFVuYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEJpdHdpc2VOb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gCisKIFJlZ2lzdGVySUQqIEJpdHdpc2VOb3ROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBzcmMyID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwganNOdW1iZXIoLTEpKTsKICAgICBSZWdpc3RlcklEKiBzcmMxID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fZXhwcik7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0QmluYXJ5T3Ao
b3BfYml0eG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEpLCBzcmMxLCBz
cmMyLmdldCgpLCBPcGVyYW5kVHlwZXMobV9leHByLT5yZXN1bHREZXNjcmlwdG9yKCksIFJlc3Vs
dFR5cGU6Om51bWJlclR5cGVJc0ludDMyKCkpKTsKIH0KLSAKKwogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxOb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgTG9naWNhbE5vdE5vZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9u
Q29udGV4dChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBMYWJlbCogdHJ1ZVRhcmdldCwg
TGFiZWwqIGZhbHNlVGFyZ2V0LCBGYWxsVGhyb3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlKQpAQCAt
MTAzOCw3ICsxMDM4LDcgQEAgdm9pZCBMb2dpY2FsTm90Tm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25k
aQogLy8gVGhlIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIG9uIHRoZSBub2RlIGF0IHRoZSByb290
IG9mIHRoZSB0cmVlIG9mIHJlZ3VsYXIgYmluYXJ5IGFkZAogLy8gb3BlcmF0aW9ucyAobWFya2Vk
IGluIHRoZSBkaWFncmFtIHdpdGggYSBkb3VibGUgc2V0IG9mIHBhcmVudGhlc2VzKS4gIFRoaXMg
bm9kZSBtdXN0CiAvLyBiZSBwZXJmb3JtaW5nIGEgc3RyaW5nIGNvbmNhdGVuYXRpb24gKGRldGVy
bWluZWQgYnkgc3RhdGljYWxseSBkZXRlY3RpbmcgdGhhdCBhdCBsZWFzdAotLy8gb25lIGNoaWxk
IG11c3QgYmUgYSBzdHJpbmcpLiAgCisvLyBvbmUgY2hpbGQgbXVzdCBiZSBhIHN0cmluZykuCiAv
LwogLy8gU2luY2UgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHZhbHVlcyBiZWluZyBjb25jYXRlbmF0
ZWQgdG9nZXRoZXIgaXMgZXhwZWN0ZWQgdG8gYmUgMywgaWYKIC8vIGEgbGhzIHRvIGEgY29uY2F0
ZW5hdGluZyBhc3NpZ25tZW50IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSAgcm9vdCBhZGQgc2hv
dWxkIGhhdmUgYXQKQEAgLTEyOTksNyArMTI5OSw3IEBAIFJlZ2lzdGVySUQqIExvZ2ljYWxPcE5v
ZGU6OmVtaXRCeXRlY29kZSgKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8TGFiZWw+IHRhcmdldCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOwotICAgIAorCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXAu
Z2V0KCksIG1fZXhwcjEpOwogICAgIGlmIChtX29wZXJhdG9yID09IE9wTG9naWNhbEFuZCkKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZSh0ZW1wLmdldCgpLCB0YXJnZXQuZ2V0KCkp
OwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAgdm9pZCBMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNvZGVJ
bkNvbmRpdAogICAgIFJlZlB0cjxMYWJlbD4gYWZ0ZXJFeHByMSA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOwogICAgIGlmIChtX29wZXJhdG9yID09IE9wTG9naWNhbEFuZCkKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhwcjEsIGFmdGVyRXhwcjEuZ2V0KCks
IGZhbHNlVGFyZ2V0LCBGYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7Ci0gICAgZWxzZSAKKyAgICBlbHNl
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIxLCB0
cnVlVGFyZ2V0LCBhZnRlckV4cHIxLmdldCgpLCBGYWxsVGhyb3VnaE1lYW5zRmFsc2UpOwogICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoYWZ0ZXJFeHByMS5nZXQoKSk7CiAKQEAgLTE0MTIsNyArMTQx
Miw3IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwogICAgICAgICAg
ICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBP
cGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVz
Y3JpcHRvcigpKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGxvY2FsLmlz
Q2FwdHVyZWQoKQogICAgICAgICAgICAgfHwgZ2VuZXJhdG9yLmxlZnRIYW5kU2lkZU5lZWRzQ29w
eShtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKSkgewog
ICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKQEAgLTE0MjEsNyArMTQyMSw3IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNv
bHZlTm9kZTo6ZW1pdEIKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQo
KSwgcmVzdWx0LmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KLSAgICAgICAg
CisKICAgICAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50
KGdlbmVyYXRvciwgbG9jYWwuZ2V0KCksIGxvY2FsLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9y
LCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0
RGVzY3JpcHRvcigpKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRp
b25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQpAQCAtMTU1Myw3ICsxNTUzLDcgQEAgUmVn
aXN0ZXJJRCogQ29uc3REZWNsTm9kZTo6ZW1pdENvZGVTaW5nbAogICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKHRlbXBEc3QuZ2V0KCksIG1faW5pdCk7CiAgICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0ZW1wRHN0LmdldCgpKTsKICAgICAgICAg
fQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLmdl
dCgpLCBtX2luaXQpOwogICAgIH0KIApAQCAtMTY5Niw3ICsxNjk2LDcgQEAgYm9vbCBJZkVsc2VO
b2RlOjp0cnlGb2xkQnJlYWtBbmRDb250aW51ZQogdm9pZCBJZkVsc2VOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUo
KSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwotICAgIAorCiAgICAgUmVmUHRy
PExhYmVsPiBiZWZvcmVUaGVuID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExh
YmVsPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVs
PiBhZnRlckVsc2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKQEAgLTE3NTUsNyArMTc1NSw3IEBA
IHZvaWQgV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KIAogICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50
KCk7Ci0gICAgCisKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAK
ICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKQEAgLTE3
NzYsNyArMTc3Niw3IEBAIHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIK
IAogICAgIGlmIChtX2V4cHIxKQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSwgbV9leHByMSk7Ci0gICAgCisKICAgICBSZWZQdHI8TGFiZWw+IHRv
cE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIGlmIChtX2V4cHIyKQogICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9leHByMiwgdG9wT2ZMb29w
LmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgRmFsbFRocm91Z2hNZWFuc1RydWUpOwpAQCAt
MTgwMCw3ICsxODAwLDE5NyBAQCB2b2lkIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyCiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JJbk5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIEZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sK
KyAgICBMYWJlbFNjb3BlUHRyIG91dGVyU2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShM
YWJlbFNjb3BlOjpMb29wKTsKKworICAgIGlmICghbV9sZXhwci0+aXNBc3NpZ25tZW50TG9jYXRp
b24oKSkgeworICAgICAgICBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJMZWZ0
IHNpZGUgb2YgZm9yLWluIHN0YXRlbWVudCBpcyBub3QgYSByZWZlcmVuY2UuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgp
KTsKKworICAgIGNvbnN0IElkZW50aWZpZXIqIGJvdW5kTG9jYWwgPSB0aGlzLT5pZGVudGlmaWVy
Rm9yQm91bmRMb2NhbChnZW5lcmF0b3IpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlLmdl
dCgpLCBtX2V4cHIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yID0gZ2VuZXJh
dG9yLmVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBi
YXNlLmdldCgpKTsKKworICAgIFJlZlB0cjxMYWJlbD4gb3V0ZXJMb29wU3RhcnQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXh0RW50cnkgPSBnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvckVu
dHJ5KG5leHRFbnRyeS5nZXQoKSwgYmFzZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgb3V0ZXJM
b29wU3RhcnQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcChvdXRlclNjb3BlLT5icmVh
a1RhcmdldCgpKTsKKworICAgIGdlbmVyYXRvci5lbWl0TGFiZWwob3V0ZXJMb29wU3RhcnQuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworCisgICAgLy8gSW5kZXhlZCBw
cm9wZXJ0eSBsb29wCisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIGluZGV4ZWRJdGVyYXRp
b25TY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworCisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3RoID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJsZUxl
bmd0aChsZW5ndGguZ2V0KCksIG5leHRFbnRyeS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0TG9hZChpLmdldCgpLCBqc051bWJlcigwKSk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRCaW5hcnlPcChvcF9sZXNzLCByZXN1bHQuZ2V0KCksIGkuZ2V0KCksIGxlbmd0aC5nZXQo
KSwKKyAgICAgICAgICAgIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjpudW1iZXJUeXBlSXNJbnQz
MigpLCBSZXN1bHRUeXBlOjpudW1iZXJUeXBlSXNJbnQzMigpKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCBpbmRleGVkSXRlcmF0aW9uU2NvcGUtPmJy
ZWFrVGFyZ2V0KCkpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4gaW5uZXJMb29wU3RhcnQgPSBn
ZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChpbm5lckxv
b3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFRvSW5kZXhTdHJpbmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdl
dCgpKTsKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5h
bWUuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5wdXNoSW5kZXhlZEZvckluU2NvcGUoYm91
bmRMb2NhbCwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3Rh
dGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEluZGV4ZWRGb3JJblNjb3BlKGJvdW5kTG9j
YWwpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaW5kZXhlZEl0ZXJhdGlvblNjb3Bl
LT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDaGVja1Byb3BlcnR5
RW51bWVyYXRvcihiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBuZXh0RW50cnkuZ2V0KCks
IGluZGV4ZWRJdGVyYXRpb25TY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TmV4dEluZGV4ZWRQcm9wZXJ0eU5hbWUoaS5nZXQoKSwgbmV4dEVudHJ5LmdldCgpLCBp
bm5lckxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaW5kZXhl
ZEl0ZXJhdGlvblNjb3BlLT5icmVha1RhcmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBTdHJ1Y3R1
cmUgcHJvcGVydHkgbG9vcAorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0ciBzdHJ1Y3R1cmVJ
dGVyYXRpb25TY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3Ap
OworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChzdHJ1Y3R1cmVJdGVy
YXRpb25TY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisKKyAgICAgICAgUmVmUHRyPExhYmVsPiBp
bm5lckxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGlubmVyTG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
b29wSGludCgpOworCisgICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJv
cGVydHlOYW1lLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IucHVzaFN0cnVjdHVyZUZvcklu
U2NvcGUoYm91bmRMb2NhbCwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworICAgICAgICBnZW5lcmF0b3IucG9wU3RydWN0
dXJlRm9ySW5TY29wZShib3VuZExvY2FsKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KHN0cnVjdHVyZUl0ZXJhdGlvblNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRDaGVja1Byb3BlcnR5RW51bWVyYXRvcihiYXNlLmdldCgpLCBlbnVtZXJhdG9y
LmdldCgpLCBuZXh0RW50cnkuZ2V0KCksIHN0cnVjdHVyZUl0ZXJhdGlvblNjb3BlLT5icmVha1Rh
cmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0U3RydWN0dXJlUHJvcGVydHlOYW1l
KHByb3BlcnR5TmFtZS5nZXQoKSwgbmV4dEVudHJ5LmdldCgpLCBpbm5lckxvb3BTdGFydC5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc3RydWN0dXJlSXRlcmF0aW9uU2NvcGUt
PmJyZWFrVGFyZ2V0KCkpOworICAgIH0KKworICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcAor
ICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0ciBnZW5lcmljSXRlcmF0aW9uU2NvcGUgPSBnZW5l
cmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKKworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZ2VuZXJpY0l0ZXJhdGlvblNjb3BlLT5jb250aW51ZVRh
cmdldCgpKTsKKworICAgICAgICBSZWZQdHI8TGFiZWw+IGlubmVyTG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaW5uZXJMb29wU3Rh
cnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAg
dGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKKworICAgICAgICBn
ZW5lcmF0b3IuZW1pdExhYmVsKGdlbmVyaWNJdGVyYXRpb25TY29wZS0+Y29udGludWVUYXJnZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEdlbmVyaWNQcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lLmdldCgpLCBuZXh0RW50cnkuZ2V0KCksIGlubmVyTG9vcFN0YXJ0LmdldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChnZW5lcmljSXRlcmF0aW9uU2NvcGUtPmJyZWFrVGFy
Z2V0KCkpOworICAgIH0KKworICAgIGdlbmVyYXRvci5lbWl0TGFiZWwob3V0ZXJTY29wZS0+Y29u
dGludWVUYXJnZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRQcm90b3R5cGUoYmFzZS5nZXQo
KSwgYmFzZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvckVudHJ5KG5l
eHRFbnRyeS5nZXQoKSwgYmFzZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgb3V0ZXJMb29wU3Rh
cnQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0TGFiZWwob3V0ZXJTY29wZS0+YnJlYWtUYXJn
ZXQoKSk7Cit9CisKK2NvbnN0IElkZW50aWZpZXIqIEZvckluTm9kZTo6aWRlbnRpZmllckZvckJv
dW5kTG9jYWwoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKK3sKKyAgICBpZiAobV9sZXhw
ci0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
c3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2xleHByKS0+aWRlbnRpZmllcigpOworICAgICAg
ICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmIChsb2Nh
bC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiAmaWRlbnQ7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKSB7
CisgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0
aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKj4obV9sZXhwcik7CisgICAgICAg
IGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJpbmRpbmdzKCk7CisgICAgICAgIGlmICghYmlu
ZGluZy0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAg
ICAgICAgYXV0byBzaW1wbGVCaW5kaW5nID0gc3RhdGljX2Nhc3Q8QmluZGluZ05vZGUqPihiaW5k
aW5nKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzaW1wbGVCaW5kaW5nLT5i
b3VuZFByb3BlcnR5KCk7CisgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlk
ZW50KTsKKyAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSB8fCBsb2NhbC5pc0NhcHR1cmVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZpZGVudDsKKyAgICB9
CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBGb3JJbk5vZGU6OmVtaXRMb29wSGVh
ZGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBpZiAobV9sZXhwci0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2xleHByKS0+
aWRlbnRpZmllcigpOworICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVu
dCk7CisgICAgICAgIGlmIChsb2NhbC5nZXQoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgp
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
U2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpZGVudCk7CisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUsIGlkZW50LCBw
cm9wZXJ0eU5hbWUsIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6
IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChtX2xleHByLT5pc0RvdEFjY2Vzc29yTm9kZSgpKSB7CisgICAgICAgIERvdEFj
Y2Vzc29yTm9kZSogYXNzaWduTm9kZSA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+KG1f
bGV4cHIpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGFzc2lnbk5vZGUtPmlk
ZW50aWZpZXIoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShhc3NpZ25Ob2RlLT5iYXNlKCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWdu
Tm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBp
ZGVudCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9s
ZXhwci0+aXNCcmFja2V0QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgQnJhY2tldEFjY2Vzc29y
Tm9kZSogYXNzaWduTm9kZSA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihtX2xl
eHByKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogc3Vic2NyaXB0ID0g
Z2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPnN1YnNjcmlwdCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2Rl
LT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHN1YnNjcmlwdCwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9u
Tm9kZSgpKSB7CisgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqIGFzc2lnbk5v
ZGUgPSBzdGF0aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKj4obV9sZXhwcik7
CisgICAgICAgIGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJpbmRpbmdzKCk7CisgICAgICAg
IGlmICghYmluZGluZy0+aXNCaW5kaW5nTm9kZSgpKSB7CisgICAgICAgICAgICBhc3NpZ25Ob2Rl
LT5iaW5kaW5ncygpLT5iaW5kVmFsdWUoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBzaW1wbGVCaW5kaW5nID0g
c3RhdGljX2Nhc3Q8QmluZGluZ05vZGUqPihiaW5kaW5nKTsKKyAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBzaW1wbGVCaW5kaW5nLT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgIExv
Y2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKKyAgICAgICAgaWYgKCFsb2NhbC5n
ZXQoKSB8fCBsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIGFzc2lnbk5vZGUtPmJp
bmRpbmdzKCktPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdl
dCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworICAgIC8qCiB2b2lkIEZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IHsKICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFi
ZWxTY29wZTo6TG9vcCk7CkBAIC0xODU5LDcgKzIwNDksNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0
ID0gcHJvcGVydHlOYW1lOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShhc3NpZ25Ob2RlLT5iYXNlKCkpOwogICAgICAgICBSZWdpc3RlcklEKiBz
dWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+c3Vic2NyaXB0KCkpOwot
ICAgICAgICAKKwogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5v
ZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWduTm9kZS0+ZGl2b3RF
bmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgc3Vic2Ny
aXB0LCBwcm9wZXJ0eU5hbWUpOwogICAgIH0gZWxzZSB7CkBAIC0xODk3LDYgKzIwODcsNyBAQCB2
b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNl
dCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+
YnJlYWtUYXJnZXQoKSk7CiB9CisqLwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRm9yT2ZOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdm9pZCBG
b3JPZk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCkBAIC0xOTA1LDkgKzIwOTYsOSBAQCB2b2lkIEZvck9mTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVy
YXRvciwgIkxlZnQgc2lkZSBvZiBmb3Itb2Ygc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIExhYmVsU2NvcGVQdHIgc2Nv
cGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAKKwog
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExp
bmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAgIGF1dG8gZXh0cmFj
dG9yID0gW3RoaXMsIGRzdF0oQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogdmFsdWUpCiAgICAgewpAQCAtMTkyNiwxNCArMjExNywxNCBAQCB2b2lkIEZvck9mTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgICAgICAgICBEb3RBY2Nlc3Nvck5vZGUqIGFz
c2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihtX2xleHByKTsKICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gYXNzaWduTm9kZS0+aWRlbnRpZmllcigp
OwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUt
PmRpdm90U3RhcnQoKSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlKTsKICAgICAgICAgfSBl
bHNlIGlmIChtX2xleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICAgICAg
QnJhY2tldEFjY2Vzc29yTm9kZSogYXNzaWduTm9kZSA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nl
c3Nvck5vZGUqPihtX2xleHByKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNl
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7CiAgICAgICAgICAgICBS
ZWdpc3RlcklEKiBzdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+c3Vi
c2NyaXB0KCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgp
LCBhc3NpZ25Ob2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0
QnlWYWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCB2YWx1ZSk7CiAgICAgICAgIH0gZWxzZSB7CkBA
IC0xOTY1LDcgKzIxNTYsNyBAQCBMYWJlbCogQ29udGludWVOb2RlOjp0cml2aWFsVGFyZ2V0KEJ5
dGVjCiB2b2lkIENvbnRpbnVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdp
bGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0
T2Zmc2V0KCkpOwotICAgIAorCiAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5j
b250aW51ZVRhcmdldChtX2lkZW50KTsKICAgICBBU1NFUlQoc2NvcGUpOwogCkBAIC0xOTkyLDcg
KzIxODMsNyBAQCBMYWJlbCogQnJlYWtOb2RlOjp0cml2aWFsVGFyZ2V0KEJ5dGVjb2RlCiB2b2lk
IEJyZWFrTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqKQogewogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3Rh
dGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwot
ICAgIAorCiAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5icmVha1RhcmdldCht
X2lkZW50KTsKICAgICBBU1NFUlQoc2NvcGUpOwogCkBAIC0yMDQ0LDExICsyMjM1LDExIEBAIGlu
bGluZSB2b2lkIENhc2VDbGF1c2VOb2RlOjplbWl0Qnl0ZWNvZGUKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIENhc2VCbG9ja05vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotZW51bSBTd2l0Y2hLaW5kIHsgCitlbnVtIFN3aXRjaEtpbmQgewogICAgIFN3
aXRjaFVuc2V0ID0gMCwKLSAgICBTd2l0Y2hOdW1iZXIgPSAxLCAKLSAgICBTd2l0Y2hTdHJpbmcg
PSAyLCAKLSAgICBTd2l0Y2hOZWl0aGVyID0gMyAKKyAgICBTd2l0Y2hOdW1iZXIgPSAxLAorICAg
IFN3aXRjaFN0cmluZyA9IDIsCisgICAgU3dpdGNoTmVpdGhlciA9IDMKIH07CiAKIHN0YXRpYyB2
b2lkIHByb2Nlc3NDbGF1c2VMaXN0KENsYXVzZUxpc3ROb2RlKiBsaXN0LCBWZWN0b3I8RXhwcmVz
c2lvbk5vZGUqLCA4PiYgbGl0ZXJhbFZlY3RvciwgU3dpdGNoS2luZCYgdHlwZUZvclRhYmxlLCBi
b29sJiBzaW5nbGVDaGFyYWN0ZXJTd2l0Y2gsIGludDMyX3QmIG1pbl9udW0sIGludDMyX3QmIG1h
eF9udW0pCkBAIC0yMDg3LDcgKzIyNzgsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzQ2xhdXNlTGlz
dChDbGF1c2VMaXN0CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICB0
eXBlRm9yVGFibGUgPSBTd2l0Y2hOZWl0aGVyOwotICAgICAgICBicmVhazsgICAgICAgIAorICAg
ICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTIxMDgsMjIgKzIyOTksMjIgQEAgU3dpdGNoSW5m
bzo6U3dpdGNoVHlwZSBDYXNlQmxvY2tOb2RlOjp0cgogCiAgICAgU3dpdGNoS2luZCB0eXBlRm9y
VGFibGUgPSBTd2l0Y2hVbnNldDsKICAgICBib29sIHNpbmdsZUNoYXJhY3RlclN3aXRjaCA9IHRy
dWU7Ci0gICAgCisKICAgICBwcm9jZXNzQ2xhdXNlTGlzdChtX2xpc3QxLCBsaXRlcmFsVmVjdG9y
LCB0eXBlRm9yVGFibGUsIHNpbmdsZUNoYXJhY3RlclN3aXRjaCwgbWluX251bSwgbWF4X251bSk7
CiAgICAgcHJvY2Vzc0NsYXVzZUxpc3QobV9saXN0MiwgbGl0ZXJhbFZlY3RvciwgdHlwZUZvclRh
YmxlLCBzaW5nbGVDaGFyYWN0ZXJTd2l0Y2gsIG1pbl9udW0sIG1heF9udW0pOwotICAgIAorCiAg
ICAgaWYgKHR5cGVGb3JUYWJsZSA9PSBTd2l0Y2hVbnNldCB8fCB0eXBlRm9yVGFibGUgPT0gU3dp
dGNoTmVpdGhlcikKICAgICAgICAgcmV0dXJuIFN3aXRjaEluZm86OlN3aXRjaE5vbmU7Ci0gICAg
CisKICAgICBpZiAodHlwZUZvclRhYmxlID09IFN3aXRjaE51bWJlcikgewogICAgICAgICBpbnQz
Ml90IHJhbmdlID0gbWF4X251bSAtIG1pbl9udW07CiAgICAgICAgIGlmIChtaW5fbnVtIDw9IG1h
eF9udW0gJiYgcmFuZ2UgPD0gMTAwMCAmJiAocmFuZ2UgLyBsaXRlcmFsVmVjdG9yLnNpemUoKSkg
PCAxMCkKICAgICAgICAgICAgIHJldHVybiBTd2l0Y2hJbmZvOjpTd2l0Y2hJbW1lZGlhdGU7CiAg
ICAgICAgIHJldHVybiBTd2l0Y2hJbmZvOjpTd2l0Y2hOb25lOwotICAgIH0gCi0gICAgCisgICAg
fQorCiAgICAgQVNTRVJUKHR5cGVGb3JUYWJsZSA9PSBTd2l0Y2hTdHJpbmcpOwotICAgIAorCiAg
ICAgaWYgKHNpbmdsZUNoYXJhY3RlclN3aXRjaCkgewogICAgICAgICBpbnQzMl90IHJhbmdlID0g
bWF4X251bSAtIG1pbl9udW07CiAgICAgICAgIGlmIChtaW5fbnVtIDw9IG1heF9udW0gJiYgcmFu
Z2UgPD0gMTAwMCAmJiAocmFuZ2UgLyBsaXRlcmFsVmVjdG9yLnNpemUoKSkgPCAxMCkKQEAgLTIx
NTcsNyArMjM0OCw3IEBAIHZvaWQgQ2FzZUJsb2NrTm9kZTo6ZW1pdEJ5dGVjb2RlRm9yQmxvY2sK
ICAgICAgICAgICAgIGxhYmVsVmVjdG9yLmFwcGVuZChnZW5lcmF0b3IubmV3TGFiZWwoKSk7CiAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoY2xhdXNlVmFsLmdldCgpLCBsYWJl
bFZlY3RvcltsYWJlbFZlY3Rvci5zaXplKCkgLSAxXS5nZXQoKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgZm9yIChDbGF1c2VMaXN0Tm9kZSogbGlzdCA9IG1fbGlzdDI7IGxpc3Q7
IGxpc3QgPSBsaXN0LT5nZXROZXh0KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBjbGF1c2VWYWwgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdE5vZGUoY2xhdXNlVmFsLmdldCgpLCBsaXN0LT5nZXRDbGF1c2UoKS0+ZXhwcigp
KTsKQEAgLTIxOTksNyArMjM5MCw3IEBAIHZvaWQgQ2FzZUJsb2NrTm9kZTo6ZW1pdEJ5dGVjb2Rl
Rm9yQmxvY2sKIHZvaWQgU3dpdGNoTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxp
bmVTdGFydE9mZnNldCgpKTsKLSAgICAKKwogICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5l
cmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpTd2l0Y2gpOwogCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CkBAIC0yMjQ4LDcgKzI0
MzksNyBAQCB2b2lkIFRyeU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAKICAgICBS
ZWZQdHI8TGFiZWw+IHRyeVN0YXJ0TGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBn
ZW5lcmF0b3IuZW1pdExhYmVsKHRyeVN0YXJ0TGFiZWwuZ2V0KCkpOwotICAgIAorCiAgICAgaWYg
KG1fZmluYWxseUJsb2NrKQogICAgICAgICBnZW5lcmF0b3IucHVzaEZpbmFsbHlDb250ZXh0KG1f
ZmluYWxseUJsb2NrKTsKICAgICBUcnlEYXRhKiB0cnlEYXRhID0gZ2VuZXJhdG9yLnB1c2hUcnko
dHJ5U3RhcnRMYWJlbC5nZXQoKSk7CkBAIC0yMjU3LDIwICsyNDQ4LDIwIEBAIHZvaWQgVHJ5Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKIAogICAgIGlmIChtX2NhdGNoQmxvY2spIHsK
ICAgICAgICAgUmVmUHRyPExhYmVsPiBjYXRjaEVuZExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIE5vcm1hbCBwYXRoOiBqdW1wIG92ZXIgdGhlIGNh
dGNoIGJsb2NrLgogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoY2F0Y2hFbmRMYWJlbC5nZXQo
KSk7CiAKICAgICAgICAgLy8gVW5jYXVnaHQgZXhjZXB0aW9uIHBhdGg6IHRoZSBjYXRjaCBibG9j
ay4KICAgICAgICAgUmVmUHRyPExhYmVsPiBoZXJlID0gZ2VuZXJhdG9yLmVtaXRMYWJlbChnZW5l
cmF0b3IubmV3TGFiZWwoKS5nZXQoKSk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNl
cHRpb25SZWdpc3RlciA9IGdlbmVyYXRvci5wb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBoZXJlLmdldCgpKTsKLSAgICAgICAgCisKICAgICAgICAg
aWYgKG1fZmluYWxseUJsb2NrKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgY2F0Y2ggYmxvY2sg
dGhyb3dzIGFuIGV4Y2VwdGlvbiBhbmQgd2UgaGF2ZSBhIGZpbmFsbHkgYmxvY2ssIHRoZW4gdGhl
IGZpbmFsbHkKICAgICAgICAgICAgIC8vIGJsb2NrIHNob3VsZCAiY2F0Y2giIHRoYXQgZXhjZXB0
aW9uLgogICAgICAgICAgICAgdHJ5RGF0YSA9IGdlbmVyYXRvci5wdXNoVHJ5KGhlcmUuZ2V0KCkp
OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHVzaENhdGNo
U2NvcGUobV9leGNlcHRpb25JZGVudCwgZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCksIERvbnREZWxl
dGUpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2NhdGNoQmxvY2spOwogICAg
ICAgICBnZW5lcmF0b3IuZW1pdFBvcFNjb3BlKCk7CkBAIC0yMjc5LDcgKzI0NzAsNyBAQCB2b2lk
IFRyeU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAKICAgICBpZiAobV9maW5hbGx5
QmxvY2spIHsKICAgICAgICAgUmVmUHRyPExhYmVsPiBwcmVGaW5hbGx5TGFiZWwgPSBnZW5lcmF0
b3IuZW1pdExhYmVsKGdlbmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsKLSAgICAgICAgCisKICAg
ICAgICAgZ2VuZXJhdG9yLnBvcEZpbmFsbHlDb250ZXh0KCk7CiAKICAgICAgICAgUmVmUHRyPExh
YmVsPiBmaW5hbGx5RW5kTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKQEAgLTIzNzAsNyAr
MjU2MSw3IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKICAgICAg
ICAgICAgICAgICAmJiByaHNFeHByZXNzaW9uLT5pc1Jlc29sdmVOb2RlKCkKICAgICAgICAgICAg
ICAgICAmJiBnZW5lcmF0b3IuaXNBcmd1bWVudE51bWJlcihzdGF0aWNfY2FzdDxSZXNvbHZlTm9k
ZSo+KGxoc0V4cHJlc3Npb24pLT5pZGVudGlmaWVyKCksIDApCiAgICAgICAgICAgICAgICAgJiYg
Z2VuZXJhdG9yLmlzQXJndW1lbnROdW1iZXIoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihyaHNF
eHByZXNzaW9uKS0+aWRlbnRpZmllcigpLCAxKSkgewotICAgICAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLnNldElzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbih0cnVlKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjM4OSw3ICsyNTgwLDcgQEAgUmVnaXN0ZXJJ
RCogRnVuY0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQgogewogICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3Qp
LCB0aGlzKTsKIH0KLSAgICAKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERl
Y29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0KIFJlZ2lzdGVySUQq
IERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CkBAIC0yNDA0LDcgKzI1OTUsNyBA
QCBSZWdpc3RlcklEKiBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlCiBEZWNvbnN0cnVjdGlv
blBhdHRlcm5Ob2RlOjp+RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSgpCiB7CiB9Ci0gICAgCisK
IHZvaWQgQXJyYXlQYXR0ZXJuTm9kZTo6YmluZFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIHJocykgY29uc3QKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsKQEAgLTI0MjcsNyArMjYxOCw3IEBA
IFJlZ2lzdGVySUQqIEFycmF5UGF0dGVybk5vZGU6OmVtaXREaXJlY3QKICAgICAgICAgICAgIGF1
dG8gdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKICAgICAgICAgICAgIGlmICghdGFyZ2V0
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKHRlbXAuZ2V0KCksIGpzTnVtYmVyKGkpKTsKICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QXJndW1lbnRCeVZhbCh0ZW1wLmdldCgpLCBnZW5l
cmF0b3IudW5jaGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKSwgdGVtcC5nZXQoKSk7CkBAIC0y
NDU4LDcgKzI2NDksNyBAQCBSZWdpc3RlcklEKiBBcnJheVBhdHRlcm5Ob2RlOjplbWl0RGlyZWN0
CiAgICAgICAgIGlmIChyZXN1bHRSZWdpc3RlcikKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlJbmRleChyZXN1bHRSZWdpc3Rlci5nZXQoKSwgaSwgcmVnaXN0ZXJzLmxhc3QoKS5nZXQo
KSk7CiAgICAgfQotICAgIAorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBh
dHRlcm5zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGlmIChtX3RhcmdldFBhdHRlcm5zW2ldKQog
ICAgICAgICAgICAgbV90YXJnZXRQYXR0ZXJuc1tpXS0+YmluZFZhbHVlKGdlbmVyYXRvciwgcmVn
aXN0ZXJzW2ldLmdldCgpKTsKQEAgLTI1MDgsNyArMjY5OSw3IEBAIHZvaWQgT2JqZWN0UGF0dGVy
bk5vZGU6OnRvU3RyaW5nKFN0cmluZ0IKICAgICB9CiAgICAgYnVpbGRlci5hcHBlbmQoJ30nKTsK
IH0KLSAgICAKKwogdm9pZCBPYmplY3RQYXR0ZXJuTm9kZTo6YmluZFZhbHVlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHJocykgY29uc3QKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsKQEAgLTI1NTIs
NyArMjc0Myw3IEBAIHZvaWQgQmluZGluZ05vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXIKIHsK
ICAgICBpZGVudGlmaWVycy5hcHBlbmQobV9ib3VuZFByb3BlcnR5KTsKIH0KLSAgICAKKwogUmVn
aXN0ZXJJRCogU3ByZWFkRXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAko
cmV2aXNpb24gMTcwMjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsK
ICAgICBjbGFzcyBKU1Njb3BlOworICAgIHN0cnVjdCBFbnVtZXJhdG9yRW50cnk7CiAKICAgICB0
eXBlZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKQEAgLTUzLDcgKzU0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oY29uc3QgSlNWYWx1ZSYpOwogICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUoKSBjb25zdDsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEpTVmFsdWUoKSBjb25zdDsKLSAgICAgICAgCisKICAgICAgICAgUmVnaXN0ZXImIG9wZXJh
dG9yPShDYWxsRnJhbWUqKTsKICAgICAgICAgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sq
KTsKICAgICAgICAgUmVnaXN0ZXImIG9wZXJhdG9yPShKU1Njb3BlKik7CkBAIC03MSw2ICs3Miw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIHVuYm94ZWRCb29sZWFuKCkgY29uc3Q7
CiAgICAgICAgIGRvdWJsZSB1bmJveGVkRG91YmxlKCkgY29uc3Q7CiAgICAgICAgIEpTQ2VsbCog
dW5ib3hlZENlbGwoKSBjb25zdDsKKyAgICAgICAgRW51bWVyYXRvckVudHJ5KiBlbnVtZXJhdG9y
RW50cnkoKSBjb25zdDsKKwogICAgICAgICBpbnQzMl90IHBheWxvYWQoKSBjb25zdDsKICAgICAg
ICAgaW50MzJfdCB0YWcoKSBjb25zdDsKICAgICAgICAgaW50MzJfdCYgcGF5bG9hZCgpOwpAQCAt
ODksNiArOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVl
IHZhbHVlOwogICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWU7CiAgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgICAgIEVudW1lcmF0b3JFbnRyeSogZW51bWVy
YXRvckVudHJ5OwogICAgICAgICAgICAgRW5jb2RlZFZhbHVlRGVzY3JpcHRvciBlbmNvZGVkVmFs
dWU7CiAgICAgICAgICAgICBkb3VibGUgbnVtYmVyOwogICAgICAgICAgICAgaW50NjRfdCBpbnRl
Z2VyOwpAQCAtMTQ2LDEyICsxNTAsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgICAg
ICByZXR1cm4gdS5jYWxsRnJhbWU7CiAgICAgfQotICAgIAorCiAgICAgQUxXQVlTX0lOTElORSBD
b2RlQmxvY2sqIFJlZ2lzdGVyOjpjb2RlQmxvY2soKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIHUuY29kZUJsb2NrOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgRW51bWVyYXRvckVu
dHJ5KiBSZWdpc3Rlcjo6ZW51bWVyYXRvckVudHJ5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB1LmVudW1lcmF0b3JFbnRyeTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIGludDMy
X3QgUmVnaXN0ZXI6OnVuYm94ZWRJbnQzMigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
cGF5bG9hZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTE2Nyw3ICsx
NjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICAgICAgICAgRXhlY1N0
YXRlKiBfX3JjZl9leGVjID0gKGV4ZWNDYWxsZWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTyhwYywgX19yY2ZfZXhlYyk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSkKLSAgICAKKwogCiBleHRl
cm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90cmFjZV9vcGVyYW5kKEV4ZWNTdGF0ZSog
ZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBpbnQgZnJvbVdoZXJlLCBpbnQgb3BlcmFuZCkKIHsKQEAg
LTI5NCwxNSArMjk0LDE1IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNz
KEMKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVm
ZXJHQyh2bS5oZWFwKTsgLy8gTXkgY2FsbGVycyBkb24ndCBzZXQgdG9wIGNhbGxmcmFtZSwgc28g
d2UgZG9uJ3Qgd2FudCB0byBHQyBoZXJlIGF0IGFsbC4KLSAgICAKKwogICAgIGNvZGVCbG9jay0+
dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKLSAgICAKKwogICAgIGlmICghY29k
ZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCB0aHJlc2hv
bGQgc2hvdWxkIGJlIGxpZnRlZC5cbiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIAorCiAgICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkgewogICAgIGNhc2UgSklU
Q29kZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkK
QEAgLTM0MiwxNCArMzQyLDE0IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgZW50cnlPU1Io
RXhlY1MKICAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQgIiwgbmFtZSwgIiB3aXRo
IGV4ZWN1dGVDb3VudGVyID0gIiwKICAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRl
Q291bnRlcigpLCAiXG4iKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIXNob3VsZEpJVChleGVj
KSkgewogICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwogICAgICAgICBM
TElOVF9SRVRVUk5fVFdPKDAsIDApOwogICAgIH0KICAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRI
ZXVyaXN0aWNzKGNvZGVCbG9jaywgZXhlYykpCiAgICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwg
MCk7Ci0gICAgCisKICAgICBpZiAoa2luZCA9PSBQcm9sb2d1ZSkKICAgICAgICAgTExJTlRfUkVU
VVJOX1RXTyhjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSwgMCk7CiAg
ICAgQVNTRVJUKGtpbmQgPT0gQXJpdHlDaGVjayk7CkBAIC00MDAsMjYgKzQwMCwyNiBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVu
dGVyZWQgbG9vcF9vc3Igd2l0aCBleGVjdXRlQ291bnRlciA9ICIsCiAgICAgICAgICAgICBjb2Rl
QmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSwgIlxuIik7CiAgICAgfQotICAgIAorCiAgICAg
aWYgKCFzaG91bGRKSVQoZXhlYykpIHsKICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGlt
ZVNvb24oKTsKICAgICAgICAgTExJTlRfUkVUVVJOX1RXTygwLCAwKTsKICAgICB9Ci0gICAgCisK
ICAgICBpZiAoIWppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKGNvZGVCbG9jaywgZXhlYykpCiAg
ICAgICAgIExMSU5UX1JFVFVSTl9UV08oMCwgMCk7Ci0gICAgCisKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIAorCiAgICAgVmVj
dG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gbWFwOwogICAgIGNvZGVCbG9jay0+aml0Q29k
ZU1hcCgpLT5kZWNvZGUobWFwKTsKICAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBp
bmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZD4obWFw
LCBtYXAuc2l6ZSgpLCBwYyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4KTsKICAgICBBU1NFUlQobWFw
cGluZyk7CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocGMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkpKTsKLSAg
ICAKKwogICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZXhlY3V0
YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKICAgICBB
U1NFUlQoanVtcFRhcmdldCk7Ci0gICAgCisKICAgICBMTElOVF9SRVRVUk5fVFdPKGp1bXBUYXJn
ZXQsIGV4ZWMtPnRvcE9mRnJhbWUoKSk7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQogICAgIGNvZGVC
bG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CkBAIC00MzcsNyArNDM3LDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0wocmVwbGFjZSkKICAgICAgICAgICAgICpjb2RlQmxvY2ssICI6IEVudGVyZWQg
cmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVyID0gIiwKICAgICAgICAgICAgIGNvZGVCbG9jay0+
bGxpbnRFeGVjdXRlQ291bnRlcigpLCAiXG4iKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoc2hv
dWxkSklUKGV4ZWMpKQogICAgICAgICBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhjb2RlQmxv
Y2ssIGV4ZWMpOwogICAgIGVsc2UKQEAgLTUzNiw3ICs1MzYsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfbmV3X3JlZ2V4CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Y2hlY2tfaGFzX2luc3RhbmNlKQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgCisKICAgICBK
U1ZhbHVlIHZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBiYXNl
VmFsID0gTExJTlRfT1BfQygzKS5qc1ZhbHVlKCk7CiAgICAgaWYgKGJhc2VWYWwuaXNPYmplY3Qo
KSkgewpAQCAtNTcwLDE2ICs1NzAsMTYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2dldF9ieV9pZAogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVu
dCwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgTExJTlRfT1AoMSkg
PSByZXN1bHQ7Ci0gICAgCisKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVwogICAg
ICAgICAmJiBiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZSgp
CiAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKICAgICAgICAgJiYgc2xv
dC5pc0NhY2hlYWJsZVZhbHVlKCkpIHsKLSAgICAgICAgCisKICAgICAgICAgSlNDZWxsKiBiYXNl
Q2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJl
LT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCiAgICAgICAgICAgICAmJiAh
c3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cygp
KSB7CkBAIC02MjUsNyArNjI1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1
dF9ieV9pZAogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9j
ay0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBMTElOVF9PUF9DKDEpLmpzVmFsdWUoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGNvZGVCbG9jay0+cHV0QnlJ
ZENvbnRleHQoKSk7CiAgICAgaWYgKHBjWzhdLnUub3BlcmFuZCkKQEAgLTYzMywyNCArNjMzLDI0
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICBlbHNlCiAg
ICAgICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIExMSU5UX09QX0MoMykuanNWYWx1ZSgp
LCBzbG90KTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsKLSAgICAKKwogICAgIGlmICgh
TExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGJhc2VWYWx1ZS5pc0NlbGwoKQog
ICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKLSAgICAgICAgCisKICAgICAgICAg
SlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKCk7Ci0gICAgICAgIAorCiAgICAgICAg
IGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpCiAgICAgICAgICAgICAm
JiAhc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCiAgICAg
ICAgICAgICAmJiBiYXNlQ2VsbCA9PSBzbG90LmJhc2UoKSkgewotICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5
KSB7CiAgICAgICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2ssIHZtLmhlYXApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgc3RydWN0dXJlLT5wcmV2aW91c0lE
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1
c2Ugc29tZSBvZiB0aGUgbWV0aG9kcyB3ZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgIC8vIGJl
bG93IG1heSBHQy4KICAgICAgICAgICAgICAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCk7CkBAIC02NjksNyArNjY5LDcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzddLnUuc3RydWN0dXJlQ2hh
aW4uc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBjaGFpbik7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGNbOF0udS5vcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNv
ZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0KTsKQEAgLTY5Niw3ICs2OTYsNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtNzIyLDE4
ICs3MjIsMTggQEAgaW5saW5lIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAg
ICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNj
cmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIGFz
U3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQogICAgICAgICAgICAgcmV0dXJuIGFz
U3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICAKKwogICAgICAg
ICByZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBpKTsKICAgICB9CiAKICAgICBpZiAoaXNOYW1l
KHN1YnNjcmlwdCkpCiAgICAgICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGV4ZWMsIGpzQ2FzdDxO
YW1lSW5zdGFuY2UqPihzdWJzY3JpcHQuYXNDZWxsKCkpLT5wcml2YXRlTmFtZSgpKTsKLSAgICAK
KwogICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBzdWJzY3JpcHQudG9TdHJpbmcoZXhlYyktPnRv
SWRlbnRpZmllcihleGVjKTsKICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0
eSk7CiB9CkBAIC03NTQsNyArNzU0LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2dldF9hcmd1bQogICAgICAgICBMTElOVF9PUCgyKSA9IGFyZ3VtZW50czsKICAgICAgICAgZXhl
Yy0+dW5jaGVja2VkUih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
KHBjWzJdLnUub3BlcmFuZCkpLm9mZnNldCgpKSA9IGFyZ3VtZW50czsKICAgICB9Ci0gICAgCisK
ICAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCwgZ2V0QnlW
YWwoZXhlYywgYXJndW1lbnRzLCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSkpOwogfQogCkBAIC03
NjcsMTEgKzc2NywxMSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X3Bu
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbCkKIHsKICAgICBMTElO
VF9CRUdJTigpOwotICAgIAorCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKDEp
LmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IExMSU5UX09QX0MoMikuanNWYWx1
ZSgpOwogICAgIEpTVmFsdWUgdmFsdWUgPSBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKTsKLSAgICAK
KwogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQz
Ml90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09i
amVjdCgpKSB7CkBAIC04MDIsNyArODAyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3B1dF9ieV92YQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YWxf
ZGlyZWN0KQogewogICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgCisKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0g
TExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0Mo
MykuanNWYWx1ZSgpOwpAQCAtODI5LDExICs4MjksMTEgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2RlbF9ieV92YQogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKTsKICAgICBKU09iamVjdCogYmFzZU9iamVj
dCA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICAKKwogICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gTExJTlRfT1BfQygzKS5qc1ZhbHVlKCk7Ci0gICAgCisKICAgICBib29sIGNvdWxkRGVs
ZXRlOwotICAgIAorCiAgICAgdWludDMyX3QgaTsKICAgICBpZiAoc3Vic2NyaXB0LmdldFVJbnQz
MihpKSkKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoYmFzZU9iamVjdCwgZXhlYywgaSk7CkBAIC04NDUsMTAgKzg0
NSwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhCiAgICAgICAg
IExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5KTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIWNvdWxkRGVsZXRlICYmIGV4ZWMtPmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsICJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKLSAgICAKKwogICAgIExM
SU5UX1JFVFVSTihqc0Jvb2xlYW4oY291bGREZWxldGUpKTsKIH0KIApAQCAtODY2LDE2ICs4NjYs
MTYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9nZXR0ZQogICAgIExMSU5U
X0JFR0lOKCk7CiAgICAgQVNTRVJUKExMSU5UX09QKDEpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsK
ICAgICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KExMSU5UX09QKDEpLmpzVmFsdWUoKSk7
Ci0gICAgCisKICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVh
dGUodm0pOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwotICAgIAorCiAgICAgSlNWYWx1
ZSBnZXR0ZXIgPSBMTElOVF9PUCgzKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzZXR0ZXIgPSBM
TElOVF9PUCg0KS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGdldHRlci5pc09iamVjdCgpIHx8IGdl
dHRlci5pc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoc2V0dGVyLmlzT2JqZWN0KCkgfHwgc2V0
dGVyLmlzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBzZXR0
ZXIuaXNPYmplY3QoKSk7Ci0gICAgCisKICAgICBpZiAoIWdldHRlci5pc1VuZGVmaW5lZCgpKQog
ICAgICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKHZtLCBhc09iamVjdChnZXR0ZXIpKTsKICAgICBp
ZiAoIXNldHRlci5pc1VuZGVmaW5lZCgpKQpAQCAtMTAwOCw3ICsxMDA4LDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19mdW5jXwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9
IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKHBjWzJdLnUub3BlcmFuZCk7CiAgICAgSlNGdW5jdGlv
biogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rpb24sIGV4ZWMtPnNjb3BlKCkp
OwotICAgIAorCiAgICAgTExJTlRfUkVUVVJOKGZ1bmMpOwogfQogCkBAIC0xMDE5LDcgKzEwMTks
NyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAjaWYgTExJTlRf
U0xPV19QQVRIX1RSQUNJTkcKICAgICBkYXRhTG9nKCJQZXJmb3JtaW5nIGhvc3QgY2FsbC5cbiIp
OwogI2VuZGlmCi0gICAgCisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxs
ZXJGcmFtZSgpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKQEAgLTEwMzAsMTcgKzEwMzAs
MTcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKSB7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNhbGxlZSwgY2FsbERhdGEpOwotICAg
IAorCiAgICAgICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKTsKLSAgICAKKwogICAg
ICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVIb3N0KSB7CiAgICAgICAgICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVj
Q2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS5ob3N0
Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
bihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgTExJTlRfQ0FMTF9S
RVRVUk4oZXhlY0NhbGxlZSwgTExJbnQ6OmdldENvZGVQdHIoZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAjaWYgTExJTlRfU0xPV19QQVRIX1RSQUNJTkcK
ICAgICAgICAgZGF0YUxvZygiQ2FsbCBjYWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxl
ZSwgIlxuIik7CiAjZW5kaWYKQEAgLTEwNTAsMTIgKzEwNTAsMTIgQEAgc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOwotICAgIAorCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRh
OwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVjdERhdGEoY2Fs
bGVlLCBjb25zdHJ1Y3REYXRhKTsKLSAgICAKKwogICAgIEFTU0VSVChjb25zdHJ1Y3RUeXBlICE9
IENvbnN0cnVjdFR5cGVKUyk7Ci0gICAgCisKICAgICBpZiAoY29uc3RydWN0VHlwZSA9PSBDb25z
dHJ1Y3RUeXBlSG9zdCkgewogICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChj
YWxsZWUpKTsKQEAgLTEwNjMsNyArMTA2Myw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUg
aGFuZGxlSG9zdENhbGwKIAogICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBM
TEludDo6Z2V0Q29kZVB0cihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSk7CiAgICAgfQotICAgIAor
CiAjaWYgTExJTlRfU0xPV19QQVRIX1RSQUNJTkcKICAgICBkYXRhTG9nKCJDb25zdHJ1Y3RvciBj
YWxsZWUgaXMgbm90IGEgZnVuY3Rpb246ICIsIGNhbGxlZSwgIlxuIik7CiAjZW5kaWYKQEAgLTEw
ODEsMTMgKzEwODEsMTMgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhl
YwogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwgPSBnZXRKU0Z1bmN0aW9uKGNhbGxl
ZUFzVmFsdWUpOwogICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCiAgICAgICAgIHJldHVy
biBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBwYywgY2FsbGVlQXNWYWx1ZSwga2luZCk7Ci0g
ICAgCisKICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNo
ZWNrZWQoKTsKICAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CiAgICAgZXhlY0NhbGxlZS0+c2V0
U2NvcGUoc2NvcGUpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY2FsbGVlLT5l
eGVjdXRhYmxlKCk7Ci0gICAgCisKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9z
dEZ1bmN0aW9uKCkpCkBAIC0xMTA3LDE2ICsxMTA3LDE2IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJl
cXVpcmVkOwogICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKHZtLCBraW5kLCBhcml0eSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAg
ICAgfQotICAgIAorCiAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgCisKICAgICBpZiAoIUxM
SU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8pIHsKICAgICAgICAgRXhlY1N0
YXRlKiBleGVjQ2FsbGVyID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKLSAgICAgICAgCisK
ICAgICAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjQ2FsbGVyLT5jb2RlQmxv
Y2soKTsKIAogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjYWxsZXJDb2RlQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmlzT25M
aXN0KCkpCiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwogICAgICAgICBjYWxs
TGlua0luZm8tPmNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGNhbGxlZSk7CkBAIC0xMTM2LDE1ICsxMTM2LDE1IEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgZ2VuZXJpY0NhbGwoRXgKICAgICAvLyAtIEZpZ3VyZSBvdXQgd2hhdCB0byBjYWxsIGFu
ZCBjb21waWxlIGl0IGlmIG5lY2Vzc2FyeS4KICAgICAvLyAtIElmIHBvc3NpYmxlLCBsaW5rIHRo
ZSBjYWxsJ3MgaW5saW5lIGNhY2hlLgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGlu
ZSBjb2RlIGFkZHJlc3MgdG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgotICAgIAorCiAg
ICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7Ci0gICAg
CisKICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjIC0gcGNbNF0udS5vcGVyYW5kOwot
ICAgIAorCiAgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMocGNb
M10udS5vcGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMp
OwotICAgIAorCiAgICAgQVNTRVJUKHBjWzVdLnUuY2FsbExpbmtJbmZvKTsKICAgICByZXR1cm4g
c2V0VXBDYWxsKGV4ZWNDYWxsZWUsIHBjLCBraW5kLCBjYWxsZWVBc1ZhbHVlLCBwY1s1XS51LmNh
bGxMaW5rSW5mbyk7CiB9CkBAIC0xMTY2LDExICsxMTY2LDExIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9zaXplX2ZyYW0KICAgICBMTElOVF9CRUdJTigpOwogICAgIC8vIFRoaXMg
bmVlZHMgdG86CiAgICAgLy8gLSBTZXQgdXAgYSBjYWxsIGZyYW1lIHdoaWxlIHJlc3BlY3Rpbmcg
dGhlIHZhcmlhYmxlIGFyZ3VtZW50cy4KLSAgICAKKwogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSA9IHNpemVGcmFtZUZvclZhcmFyZ3MoZXhlYywgJnZtLmludGVycHJldGVyLT5zdGFjaygpLAog
ICAgICAgICBMTElOVF9PUF9DKDQpLmpzVmFsdWUoKSwgcGNbNV0udS5vcGVyYW5kLCBwY1s2XS51
Lm9wZXJhbmQpOwogICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMpOwotICAgIAor
CiAgICAgdm0ubmV3Q2FsbEZyYW1lUmV0dXJuVmFsdWUgPSBleGVjQ2FsbGVlOwogCiAgICAgTExJ
TlRfUkVUVVJOX0NBTExFRV9GUkFNRShleGVjQ2FsbGVlKTsKQEAgLTExODIsNDkgKzExODIsNDkg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYQogICAgIC8vIFRoaXMg
bmVlZHMgdG86CiAgICAgLy8gLSBGaWd1cmUgb3V0IHdoYXQgdG8gY2FsbCBhbmQgY29tcGlsZSBp
dCBpZiBuZWNlc3NhcnkuCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5lIGNvZGUg
YWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCisKICAgICBKU1Zh
bHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKTsKLSAgICAKKwogICAg
IEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogCiAg
ICAgbG9hZFZhcmFyZ3MoZXhlYywgZXhlY0NhbGxlZSwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCks
IExMSU5UX09QX0MoNCkuanNWYWx1ZSgpLCBwY1s2XS51Lm9wZXJhbmQpOwogICAgIExMSU5UX0NB
TExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMpOwotICAgIAorCiAgICAgZXhlY0NhbGxlZS0+dW5jaGVj
a2VkUihKU1N0YWNrOjpDYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBleGVjQ2FsbGVlLT5z
ZXRDYWxsZXJGcmFtZShleGVjKTsKICAgICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsKLSAgICAK
KwogICAgIHJldHVybiBzZXRVcENhbGwoZXhlY0NhbGxlZSwgcGMsIENvZGVGb3JDYWxsLCBjYWxs
ZWVBc1ZhbHVlKTsKIH0KLSAgICAKKwogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Nv
bnN0cnVjdF92YXJhcmdzKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygpOwogICAgIC8v
IFRoaXMgbmVlZHMgdG86CiAgICAgLy8gLSBGaWd1cmUgb3V0IHdoYXQgdG8gY2FsbCBhbmQgY29t
cGlsZSBpdCBpZiBuZWNlc3NhcnkuCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5l
IGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCi0gICAgCisKICAg
ICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9DKDIpLmpzVmFsdWUoKTsKLSAgICAK
KwogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVl
OwotICAgIAorCiAgICAgbG9hZFZhcmFyZ3MoZXhlYywgZXhlY0NhbGxlZSwgTExJTlRfT1BfQygz
KS5qc1ZhbHVlKCksIExMSU5UX09QX0MoNCkuanNWYWx1ZSgpLCBwY1s2XS51Lm9wZXJhbmQpOwog
ICAgIExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMpOwotICAgIAorCiAgICAgZXhlY0Nh
bGxlZS0+dW5jaGVja2VkUihKU1N0YWNrOjpDYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBl
eGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFtZShleGVjKTsKICAgICBleGVjLT5zZXRDdXJyZW50VlBD
KHBjKTsKLSAgICAKKwogICAgIHJldHVybiBzZXRVcENhbGwoZXhlY0NhbGxlZSwgcGMsIENvZGVG
b3JDb25zdHJ1Y3QsIGNhbGxlZUFzVmFsdWUpOwogfQotICAgIAorCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQogewogICAgIExMSU5UX0JFR0lOX05PX1NFVF9QQygp
OwogICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QKDIpLmpzVmFsdWUoKTsKLSAg
ICAKKwogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSA9IGV4ZWMgLSBwY1s0XS51Lm9wZXJhbmQ7
Ci0gICAgCisKICAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhw
Y1szXS51Lm9wZXJhbmQpOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMpOwog
ICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIoSlNTdGFjazo6Q2FsbGVlKSA9IGNhbGxlZUFzVmFs
dWU7CkBAIC0xMjMyLDEwICsxMjMyLDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9jYWxsX2V2YWwKICAgICBleGVjQ2FsbGVlLT5zZXRSZXR1cm5QQyhMTEludDo6Z2V0Q29kZVB0
cihsbGludF9nZW5lcmljX3JldHVybl9wb2ludCkpOwogICAgIGV4ZWNDYWxsZWUtPnNldENvZGVC
bG9jaygwKTsKICAgICBleGVjLT5zZXRDdXJyZW50VlBDKHBjKTsKLSAgICAKKwogICAgIGlmICgh
aXNIb3N0RnVuY3Rpb24oY2FsbGVlQXNWYWx1ZSwgZ2xvYmFsRnVuY0V2YWwpKQogICAgICAgICBy
ZXR1cm4gc2V0VXBDYWxsKGV4ZWNDYWxsZWUsIHBjLCBDb2RlRm9yQ2FsbCwgY2FsbGVlQXNWYWx1
ZSk7Ci0gICAgCisKICAgICB2bS5ob3N0Q2FsbFJldHVyblZhbHVlID0gZXZhbChleGVjQ2FsbGVl
KTsKICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjQ2FsbGVlLCBMTEludDo6Z2V0Q29kZVB0cihn
ZXRIb3N0Q2FsbFJldHVyblZhbHVlKSk7CiB9CkBAIC0xMjgwLDE4ICsxMjgwLDE4IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfcG5hbWUKICAgICAgICAgcGMgKz0gcGNbNV0u
dS5vcGVyYW5kOwogICAgICAgICBMTElOVF9FTkQoKTsKICAgICB9Ci0gICAgCisKICAgICBKU09i
amVjdCogbyA9IHYudG9PYmplY3QoZXhlYyk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
LT5zdHJ1Y3R1cmUoKTsKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBqc1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yID0gc3RydWN0dXJlLT5lbnVtZXJhdGlvbkNhY2hlKCk7CiAgICAgaWYgKCFqc1By
b3BlcnR5TmFtZUl0ZXJhdG9yIHx8IGpzUHJvcGVydHlOYW1lSXRlcmF0b3ItPmNhY2hlZFByb3Rv
dHlwZUNoYWluKCkgIT0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKSkKICAgICAgICAg
anNQcm9wZXJ0eU5hbWVJdGVyYXRvciA9IEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShl
eGVjLCBvKTsKLSAgICAKKwogICAgIExMSU5UX09QKDEpID0gSlNWYWx1ZShqc1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yKTsKICAgICBMTElOVF9PUCgyKSA9IEpTVmFsdWUobyk7CiAgICAgTExJTlRfT1Ao
MykgPSBSZWdpc3Rlcjo6d2l0aEludCgwKTsKICAgICBMTElOVF9PUCg0KSA9IFJlZ2lzdGVyOjp3
aXRoSW50KGpzUHJvcGVydHlOYW1lSXRlcmF0b3ItPnNpemUoKSk7Ci0gICAgCisKICAgICBwYyAr
PSBPUENPREVfTEVOR1RIKG9wX2dldF9wbmFtZXMpOwogICAgIExMSU5UX0VORCgpOwogfQpAQCAt
MTMxNCw5ICsxMzE0LDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0
aAogICAgIEpTVmFsdWUgdiA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOwogICAgIEpTT2JqZWN0
KiBvID0gdi50b09iamVjdChleGVjKTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsKLSAg
ICAKKwogICAgIGV4ZWMtPnNldFNjb3BlKEpTV2l0aFNjb3BlOjpjcmVhdGUoZXhlYywgbykpOwot
ICAgIAorCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKQEAgLTEzNjQsNyArMTM2NCw3IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykKICAgICBMTElOVF9CRUdJTigpOwogICAg
IGludCBkZWJ1Z0hvb2tJRCA9IHBjWzFdLnUub3BlcmFuZDsKICAgICB2bS5pbnRlcnByZXRlci0+
ZGVidWcoZXhlYywgc3RhdGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSk7Ci0gICAg
CisKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtMTQ1Myw2ICsxNDUzLDEwNyBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3NjCiAgICAgTExJTlRfRU5EKCk7CiB9CiAK
KworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NoZWNrX3Byb3BlcnR5X2VudW1lcmF0
b3IpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKworICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmpl
Y3QoTExJTlRfT1AoMSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
TExJTlRfT1AoMikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBFbnVtZXJhdG9yRW50cnkqIGVu
dHJ5ID0gTExJTlRfT1AoMykuZW51bWVyYXRvckVudHJ5KCk7CisKKyAgICBBU1NFUlQoIWVudHJ5
LT5vYmplY3QoKSB8fCBlbnRyeS0+b2JqZWN0KCkgPT0gYmFzZSk7CisKKyAgICBpZiAoZW50cnkt
PnN0cnVjdHVyZSgpID09IGJhc2UtPnN0cnVjdHVyZSgpKQorICAgICAgICBwYyArPSBPUENPREVf
TEVOR1RIKG9wX2NoZWNrX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgIGVsc2UgeworICAgICAg
ICBMTElOVF9PUCgyKSA9IEpTVmFsdWUoZW51bWVyYXRvci0+Y29udmVydFRvR2VuZXJpY0VudW1l
cmF0aW9uKGV4ZWMtPnZtKCksIGJhc2UsIGVudHJ5KSk7CisgICAgICAgIHBjICs9IHBjWzRdLnUu
b3BlcmFuZDsKKyAgICB9CisKKyAgICBMTElOVF9FTkQoKTsKK30KKworTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25leHRfaW5kZXhlZF9wbmFtZSkKK3sKKyAgICBMTElOVF9CRUdJTigp
OworCisgICAgRW51bWVyYXRvckVudHJ5KiBlbnRyeSA9IExMSU5UX09QKDIpLmVudW1lcmF0b3JF
bnRyeSgpOworCisgICAgaWYgKGVudHJ5LT5oYXNOZXh0SW5kZXhlZFByb3BlcnR5TmFtZSgpKSB7
CisgICAgICAgIExMSU5UX09QKDEpID0ganNOdW1iZXIoZW50cnktPm5leHRJbmRleGVkUHJvcGVy
dHlOYW1lKCkpOworICAgICAgICBwYyArPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgfSBlbHNlCisg
ICAgICAgIHBjICs9IE9QQ09ERV9MRU5HVEgob3BfbmV4dF9pbmRleGVkX3BuYW1lKTsKKworICAg
IExMSU5UX0VORCgpOworfQorCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9z
dHJ1Y3R1cmVfcG5hbWUpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKworICAgIEVudW1lcmF0b3JF
bnRyeSogZW50cnkgPSBMTElOVF9PUCgyKS5lbnVtZXJhdG9yRW50cnkoKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBuZXh0UHJvcGVydHlOYW1lID0gZW50cnktPm5leHRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWUoKTsKKworICAgIGlmIChuZXh0UHJvcGVydHlOYW1lKSB7CisgICAgICAgIExMSU5UX09Q
KDEpID0gSlNWYWx1ZShqc093bmVkU3RyaW5nKCZleGVjLT52bSgpLCBuZXh0UHJvcGVydHlOYW1l
LT5zdHJpbmcoKSkpOworICAgICAgICBwYyArPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgfSBlbHNl
CisgICAgICAgIHBjICs9IE9QQ09ERV9MRU5HVEgob3BfbmV4dF9zdHJ1Y3R1cmVfcG5hbWUpOwor
CisgICAgTExJTlRfRU5EKCk7Cit9CisKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9u
ZXh0X2dlbmVyaWNfcG5hbWUpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKworICAgIEVudW1lcmF0
b3JFbnRyeSogZW50cnkgPSBMTElOVF9PUCgyKS5lbnVtZXJhdG9yRW50cnkoKTsKKyAgICBKU09i
amVjdCogYmFzZSA9IGVudHJ5LT5vYmplY3QoKTsKKworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50aWZpZXIgPSBlbnRyeS0+bmV4dEdlbmVyaWNQcm9wZXJ0eU5hbWUoKTsKKyAgICB3aGlsZSAo
aWRlbnRpZmllcikgeworICAgICAgICBpZiAoYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgKmlkZW50
aWZpZXIpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlkZW50aWZpZXIgPSBlbnRyeS0+
bmV4dEdlbmVyaWNQcm9wZXJ0eU5hbWUoKTsKKyAgICB9CisKKyAgICBpZiAoaWRlbnRpZmllcikg
eworICAgICAgICBMTElOVF9PUCgxKSA9IEpTVmFsdWUoanNTdHJpbmcoZXhlYywgaWRlbnRpZmll
ci0+c3RyaW5nKCkpKTsKKyAgICAgICAgcGMgKz0gcGNbM10udS5vcGVyYW5kOworICAgIH0gZWxz
ZQorICAgICAgICBwYyArPSBPUENPREVfTEVOR1RIKG9wX25leHRfZ2VuZXJpY19wbmFtZSk7CisK
KyAgICBMTElOVF9FTkQoKTsKK30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25l
eHRfZW51bWVyYXRvcl9lbnRyeSkKK3sKKyAgICBMTElOVF9CRUdJTigpOworCisgICAgSlNPYmpl
Y3QqIGJhc2UgPSBhc09iamVjdChMTElOVF9PUCgyKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqPihMTElOVF9PUCgzKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEVu
dW1lcmF0b3JFbnRyeSogZW50cnkgPSBlbnVtZXJhdG9yLT50YWtlTmV4dEVudHJ5KCk7CisKKyAg
ICBpZiAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5vYmplY3QoKSkgeworICAgICAgICAg
ICAgaWYgKGVudHJ5LT5vYmplY3QoKSAhPSBiYXNlIHx8IGVudHJ5LT5zdHJ1Y3R1cmUoKSAhPSBi
YXNlLT5zdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIExMSU5UX09QKDMpID0gSlNWYWx1
ZShlbnVtZXJhdG9yLT5jb252ZXJ0VG9HZW5lcmljRW51bWVyYXRpb24oZXhlYy0+dm0oKSwgYmFz
ZSwgZW50cnkpKTsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudW1lcmF0b3ItPnRha2VOZXh0
RW50cnkoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW50cnkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChiYXNlLT5zdHJ1Y3R1cmUoKSA9PSBl
bnRyeS0+c3RydWN0dXJlKCkpOworICAgICAgICBMTElOVF9PUCgxKSA9IEpTVmFsdWUoZW50cnkp
OworICAgICAgICBwYyArPSBwY1s0XS51Lm9wZXJhbmQ7CisgICAgfSBlbHNlCisgICAgICAgIHBj
ICs9IE9QQ09ERV9MRU5HVEgob3BfbmV4dF9lbnVtZXJhdG9yX2VudHJ5KTsKKworICAgIExMSU5U
X0VORCgpOworfQorCisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93
X3N0YWNrX292ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvRnJhbWUp
CiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdm0tPnRvcENhbGxGcmFtZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzAy
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2hhCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jl
c29sdmVfc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRf
ZnJvbV9zY29wZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90
b19zY29wZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NoZWNrX3By
b3BlcnR5X2VudW1lcmF0b3IpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9uZXh0X2luZGV4ZWRfcG5hbWUpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9uZXh0X3N0cnVjdHVyZV9wbmFtZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX25leHRfZ2VuZXJpY19wbmFtZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9lbnRyeSk7CiBleHRlcm4gIkMiIFNsb3dQYXRo
UmV0dXJuVHlwZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2Fs
bEZyYW1lKikgV1RGX0lOVEVSTkFMOwogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiBleHRlcm4g
IkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF9zdGFja19jaGVja19hdF92bV9lbnRyeShWTSos
IFJlZ2lzdGVyKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTcwMjE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsMTUgKzEwNCwxNSBAQCBpZiBKU1ZBTFVFNjQKICAgICBjb25z
dCBQQiA9IHQ2CiAgICAgY29uc3QgdGFnVHlwZU51bWJlciA9IGNzcjEKICAgICBjb25zdCB0YWdN
YXNrID0gY3NyMgotICAgIAorCiAgICAgbWFjcm8gbG9hZGlzRnJvbUluc3RydWN0aW9uKG9mZnNl
dCwgZGVzdCkKICAgICAgICAgbG9hZGlzIG9mZnNldCAqIDhbUEIsIFBDLCA4XSwgZGVzdAogICAg
IGVuZAotICAgIAorCiAgICAgbWFjcm8gbG9hZHBGcm9tSW5zdHJ1Y3Rpb24ob2Zmc2V0LCBkZXN0
KQogICAgICAgICBsb2FkcCBvZmZzZXQgKiA4W1BCLCBQQywgOF0sIGRlc3QKICAgICBlbmQKLSAg
ICAKKwogICAgIG1hY3JvIHN0b3JlcFRvSW5zdHJ1Y3Rpb24odmFsdWUsIG9mZnNldCkKICAgICAg
ICAgc3RvcmVwIHZhbHVlLCBvZmZzZXQgKiA4W1BCLCBQQywgOF0KICAgICBlbmQKQEAgLTEyMiw3
ICsxMjIsNyBAQCBlbHNlCiAgICAgbWFjcm8gbG9hZGlzRnJvbUluc3RydWN0aW9uKG9mZnNldCwg
ZGVzdCkKICAgICAgICAgbG9hZGlzIG9mZnNldCAqIDRbUENdLCBkZXN0CiAgICAgZW5kCi0gICAg
CisKICAgICBtYWNybyBsb2FkcEZyb21JbnN0cnVjdGlvbihvZmZzZXQsIGRlc3QpCiAgICAgICAg
IGxvYWRwIG9mZnNldCAqIDRbUENdLCBkZXN0CiAgICAgZW5kCkBAIC00NDIsNyArNDQyLDcgQEAg
ZW5kCiAKIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCBwcm9maWxlLCBz
Y3JhdGNoKQogICAgIGNvbnN0IGNlbGwgPSBjZWxsQW5kSW5kZXhpbmdUeXBlCi0gICAgY29uc3Qg
aW5kZXhpbmdUeXBlID0gY2VsbEFuZEluZGV4aW5nVHlwZSAKKyAgICBjb25zdCBpbmRleGluZ1R5
cGUgPSBjZWxsQW5kSW5kZXhpbmdUeXBlCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlE
W2NlbGxdLCBzY3JhdGNoCiAgICAgc3RvcmVpIHNjcmF0Y2gsIEFycmF5UHJvZmlsZTo6bV9sYXN0
U2VlblN0cnVjdHVyZUlEW3Byb2ZpbGVdCiAgICAgbG9hZGIgSlNDZWxsOjptX2luZGV4aW5nVHlw
ZVtjZWxsXSwgaW5kZXhpbmdUeXBlCkBAIC01MzgsNyArNTM4LDcgQEAgZWxzZQogZW5kCiAKICAg
ICBjb2RlQmxvY2tTZXR0ZXIodDEpCi0gICAgCisKICAgICBtb3ZlU3RhY2tQb2ludGVyRm9yQ29k
ZUJsb2NrKHQxLCB0MikKIAogICAgICMgU2V0IHVwIHRoZSBQQy4KQEAgLTU4Miw3ICs1ODIsNyBA
QCBtYWNybyBmdW5jdGlvbkluaXRpYWxpemF0aW9uKHByb2ZpbGVBcmdTCiAgICAgZW5kCiAgICAg
YmFkZHBueiAtOCwgdDAsIC5hcmd1bWVudFByb2ZpbGVMb29wCiAuYXJndW1lbnRQcm9maWxlRG9u
ZToKLSAgICAgICAgCisKICAgICAjIENoZWNrIHN0YWNrIGhlaWdodC4KICAgICBsb2FkaSBDb2Rl
QmxvY2s6Om1fbnVtQ2FsbGVlUmVnaXN0ZXJzW3QxXSwgdDAKICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fdm1bdDFdLCB0MgpAQCAtNjAyLDE4ICs2MDIsMTggQEAgbWFjcm8gYWxsb2NhdGVKU09iamVj
dChhbGxvY2F0b3IsIHN0cnVjdAogICAgIGlmIEFMV0FZU19BTExPQ0FURV9TTE9XCiAgICAgICAg
IGptcCBzbG93Q2FzZQogICAgIGVsc2UKLSAgICAgICAgY29uc3Qgb2Zmc2V0T2ZGaXJzdEZyZWVD
ZWxsID0gCi0gICAgICAgICAgICBNYXJrZWRBbGxvY2F0b3I6Om1fZnJlZUxpc3QgKyAKKyAgICAg
ICAgY29uc3Qgb2Zmc2V0T2ZGaXJzdEZyZWVDZWxsID0KKyAgICAgICAgICAgIE1hcmtlZEFsbG9j
YXRvcjo6bV9mcmVlTGlzdCArCiAgICAgICAgICAgICBNYXJrZWRCbG9jazo6RnJlZUxpc3Q6Omhl
YWQKIAotICAgICAgICAjIEdldCB0aGUgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4gICAKKyAg
ICAgICAgIyBHZXQgdGhlIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3QuCiAgICAgICAgIGxvYWRw
IG9mZnNldE9mRmlyc3RGcmVlQ2VsbFthbGxvY2F0b3JdLCByZXN1bHQKICAgICAgICAgYnRweiBy
ZXN1bHQsIHNsb3dDYXNlCi0gICAgICAgIAorCiAgICAgICAgICMgUmVtb3ZlIHRoZSBvYmplY3Qg
ZnJvbSB0aGUgZnJlZSBsaXN0LgogICAgICAgICBsb2FkcCBbcmVzdWx0XSwgc2NyYXRjaDEKICAg
ICAgICAgc3RvcmVwIHNjcmF0Y2gxLCBvZmZzZXRPZkZpcnN0RnJlZUNlbGxbYWxsb2NhdG9yXQot
ICAgIAorCiAgICAgICAgICMgSW5pdGlhbGl6ZSB0aGUgb2JqZWN0LgogICAgICAgICBzdG9yZXAg
MCwgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Jlc3VsdF0KICAgICAgICAgc3RvcmVTdHJ1Y3R1cmVX
aXRoVHlwZUluZm8ocmVzdWx0LCBzdHJ1Y3R1cmUsIHNjcmF0Y2gxKQpAQCAtNzc4LDEzICs3Nzgs
MTMgQEAgX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgogICAgIHByb2xvZ3VlKGZ1
bmN0aW9uRm9yQ2FsbENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9s
bGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwsIF9sbGludF90cmFjZV9wcm9sb2d1ZV9m
dW5jdGlvbl9mb3JfY2FsbCkKICAgICBmdW5jdGlvbkluaXRpYWxpemF0aW9uKDApCiAgICAgZGlz
cGF0Y2goMCkKLSAgICAKKwogCiBfbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1
ZToKICAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVjdENvZGVCbG9ja0dldHRlciwgZnVu
Y3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdCwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCiAgICAg
ZnVuY3Rpb25Jbml0aWFsaXphdGlvbigxKQogICAgIGRpc3BhdGNoKDApCi0gICAgCisKIAogX2xs
aW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgogICAgIHByb2xvZ3VlKGZ1bmN0aW9u
Rm9yQ2FsbENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9l
bnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlDaGVjaywgX2xsaW50X3RyYWNlX2FyaXR5
Q2hlY2tfZm9yX2NhbGwpCkBAIC0xMDg4LDcgKzEwODgsNyBAQCBfbGxpbnRfb3BfY29uc3RydWN0
X3ZhcmFyZ3M6CiAKIF9sbGludF9vcF9jYWxsX2V2YWw6CiAgICAgdHJhY2VFeGVjdXRpb24oKQot
ICAgIAorCiAgICAgIyBFdmFsIGlzIGV4ZWN1dGVkIGluIG9uZSBvZiB0d28gbW9kZXM6CiAgICAg
IwogICAgICMgMSkgV2UgZmluZCB0aGF0IHdlJ3JlIHJlYWxseSBpbnZva2luZyBldmFsKCkgaW4g
d2hpY2ggY2FzZSB0aGUKQEAgLTExMjEsNyArMTEyMSw3IEBAIF9sbGludF9vcF9jYWxsX2V2YWw6
CiAgICAgIyBJdCB0dXJucyBvdXQgdG8gYmUgZWFzaWVyIHRvIGp1c3QgYWx3YXlzIGhhdmUgdGhp
cyByZXR1cm4gdGhlIGNmcgogICAgICMgYW5kIGEgUEMgdG8gY2FsbCwgYW5kIHRoYXQgUEMgbWF5
IGJlIGEgZHVtbXkgdGh1bmsgdGhhdCBqdXN0CiAgICAgIyByZXR1cm5zIHRoZSBKUyB2YWx1ZSB0
aGF0IHRoZSBldmFsIHJldHVybmVkLgotICAgIAorCiAgICAgc2xvd1BhdGhGb3JDYWxsKF9sbGlu
dF9zbG93X3BhdGhfY2FsbF9ldmFsKQogCiAKQEAgLTExOTksNyArMTE5OSw3IEBAIF9sbGludF9v
cF9kZWJ1ZzoKICAgICBsb2FkaSBDb2RlQmxvY2s6Om1fZGVidWdnZXJSZXF1ZXN0c1t0MF0sIHQw
CiAgICAgYnRpeiB0MCwgLm9wRGVidWdEb25lCiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfZGVidWcpCi0ub3BEZWJ1Z0RvbmU6ICAgICAgICAgICAgICAgICAgICAKKy5vcERlYnVn
RG9uZToKICAgICBkaXNwYXRjaCgzKQogCiAKQEAgLTEyMTAsNiArMTIxMCw1MSBAQCBfbGxpbnRf
bmF0aXZlX2NhbGxfdHJhbXBvbGluZToKIF9sbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xp
bmU6CiAgICAgbmF0aXZlQ2FsbFRyYW1wb2xpbmUoTmF0aXZlRXhlY3V0YWJsZTo6bV9jb25zdHJ1
Y3RvcikKIAorX2xsaW50X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIHRyYWNlRXhl
Y3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVy
YXRvcikKKyAgICBkaXNwYXRjaCgzKQorCitfbGxpbnRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGgpCisgICAgZGlzcGF0Y2goMykKKworX2xsaW50X29wX3RvX2luZGV4
X3N0cmluZzoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3Bh
dGhfdG9faW5kZXhfc3RyaW5nKQorICAgIGRpc3BhdGNoKDMpCisKK19sbGludF9vcF9jaGVja19w
cm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1Bh
dGgoX2xsaW50X3Nsb3dfcGF0aF9jaGVja19wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgIGRpc3Bh
dGNoKDApCisKK19sbGludF9vcF9uZXh0X2luZGV4ZWRfcG5hbWU6CisgICAgdHJhY2VFeGVjdXRp
b24oKQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX25leHRfaW5kZXhlZF9wbmFt
ZSkKKyAgICBkaXNwYXRjaCgwKQorCitfbGxpbnRfb3BfbmV4dF9zdHJ1Y3R1cmVfcG5hbWU6Cisg
ICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX25l
eHRfc3RydWN0dXJlX3BuYW1lKQorICAgIGRpc3BhdGNoKDApCisKK19sbGludF9vcF9uZXh0X2dl
bmVyaWNfcG5hbWU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfbGxp
bnRfc2xvd19wYXRoX25leHRfZ2VuZXJpY19wbmFtZSkKKyAgICBkaXNwYXRjaCgwKQorCitfbGxp
bnRfb3BfbmV4dF9lbnVtZXJhdG9yX2VudHJ5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfZW50cnkpCisgICAg
ZGlzcGF0Y2goMCkKKworX2xsaW50X29wX2dldF9wcm90b3R5cGU6CisgICAgdHJhY2VFeGVjdXRp
b24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dldF9wcm90b3R5cGUpCisgICAgZGlz
cGF0Y2goMykKKwogCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0
aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91
bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE3MDIxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3BSU2hpZnQsCiAgICAg
ICAgIE9wVVJTaGlmdAogICAgIH07Ci0gICAgCisKICAgICBlbnVtIExvZ2ljYWxPcGVyYXRvciB7
CiAgICAgICAgIE9wTG9naWNhbEFuZCwKICAgICAgICAgT3BMb2dpY2FsT3IKQEAgLTE0OSw3ICsx
NDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1B1cmUoQnl0ZWNv
ZGVHZW5lcmF0b3ImKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAgICAgICAgCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1B1cmUoQnl0ZWNvZGVHZW5lcmF0b3ImKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQXNzaWdubWVudExvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gaXNMb2NhdGlvbigpOyB9CkBAIC0yNTMsNyArMjUzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbV92YWx1ZTsKICAgICB9OwotICAg
IAorCiAgICAgY2xhc3MgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAg
ICAgICAgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEoKQpAQCAtMjYyLDcgKzI2Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgLCBtX2Rpdm90RW5kKC0xLCAtMSwgLTEpCiAgICAgICAg
IHsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBUaHJvd2FibGVFeHByZXNzaW9uRGF0
YShjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKICAgICAgICAgICAgIDogbV9kaXZvdChkaXZv
dCkKICAgICAgICAgICAgICwgbV9kaXZvdFN0YXJ0KHN0YXJ0KQpAQCAtMzUwLDcgKzM1MCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1aW50MTZfdCBtX3N1YmV4cHJlc3Npb25MaW5lT2Zm
c2V0OwogICAgICAgICB1aW50MTZfdCBtX3N1YmV4cHJlc3Npb25MaW5lU3RhcnRPZmZzZXQ7CiAg
ICAgfTsKLSAgICAKKwogICAgIGNsYXNzIFRocm93YWJsZVByZWZpeGVkU3ViRXhwcmVzc2lvbkRh
dGEgOiBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKICAgICAg
ICAgVGhyb3dhYmxlUHJlZml4ZWRTdWJFeHByZXNzaW9uRGF0YSgpCkBAIC0zNzUsMTMgKzM3NSwx
MyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNzaW9uRGl2
b3Qub2Zmc2V0ID49IGRpdm90KCkub2Zmc2V0KTsKICAgICAgICAgICAgIC8vIE92ZXJmbG93IG1l
YW5zIHdlIGNhbid0IGRvIHRoaXMgc2FmZWx5LCBzbyBqdXN0IHBvaW50IGF0IHRoZSBwcmltYXJ5
IGRpdm90LAogICAgICAgICAgICAgLy8gZGl2b3RMaW5lLCBvciBkaXZvdExpbmVTdGFydC4KLSAg
ICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90Lm9mZnNldCAtIGRpdm90KCkpICYgfjB4
RkZGRikgCisgICAgICAgICAgICBpZiAoKHN1YmV4cHJlc3Npb25EaXZvdC5vZmZzZXQgLSBkaXZv
dCgpKSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgaWYg
KChzdWJleHByZXNzaW9uRGl2b3QubGluZSAtIGRpdm90KCkubGluZSkgJiB+MHhGRkZGKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90
LmxpbmVTdGFydE9mZnNldCAtIGRpdm90KCkubGluZVN0YXJ0T2Zmc2V0KSAmIH4weEZGRkYpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKChzdWJleHByZXNzaW9uT2Zm
c2V0IC0gZGl2b3RTdGFydCgpKSAmIH4weEZGRkYpIAorICAgICAgICAgICAgaWYgKChzdWJleHBy
ZXNzaW9uT2Zmc2V0IC0gZGl2b3RTdGFydCgpKSAmIH4weEZGRkYpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQgPSBzdWJleHBy
ZXNzaW9uRGl2b3Qub2Zmc2V0IC0gZGl2b3QoKTsKICAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lv
blN0YXJ0T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbk9mZnNldCAtIGRpdm90U3RhcnQoKTsKQEAgLTQ4
Myw3ICs0ODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUHJvcGVydHlOb2RlKFZNKiwg
Y29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKiwgVHlwZSk7CiAgICAgICAgIFByb3Bl
cnR5Tm9kZShWTSosIGRvdWJsZSwgRXhwcmVzc2lvbk5vZGUqLCBUeXBlKTsKICAgICAgICAgUHJv
cGVydHlOb2RlKFZNKiwgRXhwcmVzc2lvbk5vZGUqIHByb3BlcnR5TmFtZSwgRXhwcmVzc2lvbk5v
ZGUqLCBUeXBlKTsKLSAgICAgICAgCisKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHJlc3Np
b25OYW1lKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uOyB9CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIqIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApAQCAtNTE5LDcgKzUx
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFByb3BlcnR5TGlzdE5vZGUqIG1fbGlz
dDsKICAgICB9OwotICAgIAorCiAgICAgY2xhc3MgQnJhY2tldEFjY2Vzc29yTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJlc3Npb25EYXRhIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIGJvb2wg
c3Vic2NyaXB0SGFzQXNzaWdubWVudHMpOwpAQCAtNTYwLDEyICs1NjAsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgU3ByZWFkRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgRXhwcmVzc2lv
bk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVibGljOgogICAg
ICAgICBTcHJlYWRFeHByZXNzaW9uTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNz
aW9uTm9kZSopOwotICAgICAgICAKKwogICAgICAgICBFeHByZXNzaW9uTm9kZSogZXhwcmVzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbjsgfQotICAgICAgICAKKwogICAgIHByaXZh
dGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKLSAgICAgICAgCisKICAgICAgICAg
dmlydHVhbCBib29sIGlzU3ByZWFkRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcmVzc2lvbjsKICAgICB9OwpA
QCAtNjMzLDcgKzYzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBtX2lkZW50OwogICAgICAgICBBcmd1bWVudHNOb2RlKiBtX2FyZ3M7CiAgICAgfTsKLSAg
ICAKKwogICAgIGNsYXNzIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlLCBwdWJsaWMgVGhyb3dhYmxlU3ViRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoK
ICAgICAgICAgRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqIGJhc2UsIEV4cHJlc3Npb25Ob2RlKiBzdWJzY3JpcHQsIEFyZ3VtZW50
c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOwpAQCAtNjY2LDcg
KzY2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBvdmVycmlkZTsKICAgICB9OwotICAgIAorCiAgICAgY2xhc3MgQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlIDogcHVibGljIEZ1bmN0aW9uQ2FsbERvdE5vZGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4
cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgQXJndW1lbnRzTm9kZSosIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCk7CkBAIC04MTcsNyArODE3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKICAgICB9
OwotIAorCiAgICAgY2xhc3MgTG9naWNhbE5vdE5vZGUgOiBwdWJsaWMgVW5hcnlPcE5vZGUgewog
ICAgIHB1YmxpYzoKICAgICAgICAgTG9naWNhbE5vdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqKTsKQEAgLTkyNCw3ICs5MjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKLSAg
ICAKKwogICAgIGNsYXNzIEluc3RhbmNlT2ZOb2RlIDogcHVibGljIFRocm93YWJsZUJpbmFyeU9w
Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBJbnN0YW5jZU9mTm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwg
Ym9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKQEAgLTEwOTMsNyArMTA5Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKICAg
ICB9OwotICAgIAorCiAgICAgdHlwZWRlZiBWZWN0b3I8RXhwcmVzc2lvbk5vZGUqLCA4PiBFeHBy
ZXNzaW9uVmVjdG9yOwogCiAgICAgY2xhc3MgQ29tbWFOb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlLCBwdWJsaWMgUGFyc2VyQXJlbmFEZWxldGFibGUgewpAQCAtMTExMCw3ICsxMTEwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgRXhwcmVzc2lvblZlY3RvciBtX2V4cHJlc3Npb25z
OwogICAgIH07Ci0gICAgCisKICAgICBjbGFzcyBDb25zdERlY2xOb2RlIDogcHVibGljIEV4cHJl
c3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnN0RGVjbE5vZGUoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25Ob2RlKik7CkBAIC0x
MTgwLDExICsxMTgwLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0VtcHR5U3RhdGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IH07Ci0gICAgCisKICAgICBjbGFzcyBEZWJ1Z2dlclN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3Rh
dGVtZW50Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJik7Ci0gICAgICAgIAorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKQEAgLTEyNjAsMzQgKzEyNjAsMzcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIzOwogICAgICAgICBTdGF0
ZW1lbnROb2RlKiBtX3N0YXRlbWVudDsKICAgICB9OwotICAgIAorCiAgICAgY2xhc3MgRGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuTm9kZTsKLSAgICAKKwogICAgIGNsYXNzIEVudW1lcmF0aW9uTm9kZSA6
IHB1YmxpYyBTdGF0ZW1lbnROb2RlLCBwdWJsaWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewog
ICAgIHB1YmxpYzoKICAgICAgICAgRW51bWVyYXRpb25Ob2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7CiAg
ICAgICAgIEVudW1lcmF0aW9uTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlY29u
c3RydWN0aW9uUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKTsK
LSAgICAgICAgCisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2xl
eHByOwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByOwogICAgICAgICBTdGF0ZW1lbnRO
b2RlKiBtX3N0YXRlbWVudDsKICAgICB9OwotICAgIAorCiAgICAgY2xhc3MgRm9ySW5Ob2RlIDog
cHVibGljIEVudW1lcmF0aW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBGb3JJbk5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqLCBFeHByZXNzaW9uTm9kZSos
IFN0YXRlbWVudE5vZGUqKTsKICAgICAgICAgRm9ySW5Ob2RlKFZNKiwgY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3Rh
dGVtZW50Tm9kZSopOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnRpZmllckZvckJvdW5kTG9jYWwoQnl0ZWNvZGVHZW5lcmF0b3ImKTsKKyAgICAgICAgdm9p
ZCBlbWl0TG9vcEhlYWRlcihCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIHByb3BlcnR5
TmFtZSk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKLSAgICAKKwogICAgIGNs
YXNzIEZvck9mTm9kZSA6IHB1YmxpYyBFbnVtZXJhdGlvbk5vZGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgRm9yT2ZOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiwg
RXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7CiAgICAgICAgIEZvck9mTm9kZShWTSos
IGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqLCBFeHBy
ZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKTsKLSAgICAgICAgCisKICAgICBwcml2YXRlOgog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKICAgICB9OwpAQCAtMTI5Nyw3ICsxMzAwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIENvbnRpbnVlTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYpOwogICAgICAgICBDb250aW51ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgY29u
c3QgSWRlbnRpZmllciYpOwogICAgICAgICBMYWJlbCogdHJpdmlhbFRhcmdldChCeXRlY29kZUdl
bmVyYXRvciYpOwotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnRpbnVlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBvdmVycmlkZTsKQEAgLTEzMTAsNyArMTMxMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBCcmVha05vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKICAgICAgICAgQnJl
YWtOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNvbnN0IElkZW50aWZpZXImKTsKICAgICAg
ICAgTGFiZWwqIHRyaXZpYWxUYXJnZXQoQnl0ZWNvZGVHZW5lcmF0b3ImKTsKLSAgICAgICAgCisK
ICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCcmVhaygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CkBAIC0xNDQ4LDcg
KzE0NTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RhdGVtZW50Tm9kZSogc2luZ2xl
U3RhdGVtZW50KCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBlbWl0U3RhdGVtZW50c0J5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogZGVzdGluYXRpb24pOwotICAgICAgICAK
KwogICAgICAgICB2b2lkIHNldENsb3NlZFZhcmlhYmxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0
cmluZ0ltcGw+PiYmKSB7IH0KIAogICAgIHByb3RlY3RlZDoKQEAgLTE1NDAsNyArMTU0Myw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZmluaXNoUGFyc2luZyhjb25zdCBTb3Vy
Y2VDb2RlJiwgUGFyYW1ldGVyTm9kZSosIGNvbnN0IElkZW50aWZpZXImLCBGdW5jdGlvbk1vZGUp
OwogICAgICAgICB2b2lkIGZpbmlzaFBhcnNpbmcoUGFzc1JlZlB0cjxGdW5jdGlvblBhcmFtZXRl
cnM+LCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Nb2RlKTsKLSAgICAgICAgCisKICAgICAg
ICAgdm9pZCBvdmVycmlkZU5hbWUoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgbV9pZGVudCA9
IGlkZW50OyB9CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50KCkgeyByZXR1cm4gbV9p
ZGVudDsgfQogICAgICAgICB2b2lkIHNldEluZmVycmVkTmFtZShjb25zdCBJZGVudGlmaWVyJiBp
bmZlcnJlZE5hbWUpIHsgQVNTRVJUKCFpbmZlcnJlZE5hbWUuaXNOdWxsKCkpOyBtX2luZmVycmVk
TmFtZSA9IGluZmVycmVkTmFtZTsgfQpAQCAtMTU5NSw5ICsxNTk4LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzQmluZGluZ05vZGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXREaXJlY3RCaW5kaW5n
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIEV4cHJlc3Npb25Ob2RlKikgeyByZXR1
cm4gMDsgfQotICAgICAgICAKKwogICAgICAgICB2aXJ0dWFsIH5EZWNvbnN0cnVjdGlvblBhdHRl
cm5Ob2RlKCkgPSAwOwotICAgICAgICAKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgRGVjb25z
dHJ1Y3Rpb25QYXR0ZXJuTm9kZShWTSopOwogICAgIH07CkBAIC0xNjE5LDcgKzE2MjIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8UmVmUHRyPERlY29uc3RydWN0aW9uUGF0
dGVybk5vZGU+PiBtX3RhcmdldFBhdHRlcm5zOwogICAgIH07Ci0gICAgCisKICAgICBjbGFzcyBP
YmplY3RQYXR0ZXJuTm9kZSA6IHB1YmxpYyBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9iamVjdFBhdHRlcm5Ob2RlPiBj
cmVhdGUoVk0qKTsKQEAgLTE2MjcsNyArMTYzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICBtX3RhcmdldFBhdHRlcm5zLmFwcGVuZChFbnRyeShpZGVudGlmaWVy
LCB3YXNTdHJpbmcsIHBhdHRlcm4pKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIHByaXZh
dGU6CiAgICAgICAgIE9iamVjdFBhdHRlcm5Ob2RlKFZNKik7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBjb2xsZWN0Qm91bmRJZGVudGlmaWVycyhWZWN0b3I8SWRlbnRpZmllcj4mKSBjb25zdCBvdmVy
cmlkZTsKQEAgLTE2NTQsMTQgKzE2NTcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
Y29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2Rpdm90
U3RhcnQ7IH0KICAgICAgICAgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXZvdEVuZDsgfQotICAgICAgICAKKwogICAgIHByaXZhdGU6CiAgICAgICAg
IEJpbmRpbmdOb2RlKFZNKiwgY29uc3QgSWRlbnRpZmllciYgYm91bmRQcm9wZXJ0eSwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKTsKIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZp
ZXI+JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBiaW5kVmFsdWUoQnl0
ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCB0b1N0cmluZyhTdHJpbmdCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
ICAgIAorCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JpbmRpbmdOb2RlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIEpTVGV4dFBvc2l0aW9uIG1fZGl2b3RTdGFy
dDsKQEAgLTE2NzMsNyArMTY3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAg
ICAgICAgRGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBQYXNzUmVmUHRyPERlY29uc3RydWN0aW9uUGF0dGVybk5vZGU+LCBFeHByZXNzaW9uTm9kZSop
OwogICAgICAgICBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiBiaW5kaW5ncygpIHsgcmV0dXJu
IG1fYmluZGluZ3MuZ2V0KCk7IH0KLSAgICAgICAgCisKICAgICAgICAgdXNpbmcgUGFyc2VyQXJl
bmFEZWxldGFibGU6Om9wZXJhdG9yIG5ldzsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTcwMjE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDYgKzgyLDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB0eXBlZGVmIHZvaWQg
KCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEdldFByb3BlcnR5TmFtZXNG
dW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVzOwogCisgICAgdHlwZWRlZiB2b2lkICgqR2V0UHJv
cGVydHlOYW1lc0ZvckVudW1lcmF0aW9uRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKik7CisgICAgR2V0UHJvcGVydHlOYW1lc0ZvckVudW1lcmF0aW9uRnVu
Y3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lc0ZvckVudW1lcmF0aW9uOworCiAgICAgdHlwZWRlZiBT
dHJpbmcgKCpDbGFzc05hbWVGdW5jdGlvblB0cikoY29uc3QgSlNPYmplY3QqKTsKICAgICBDbGFz
c05hbWVGdW5jdGlvblB0ciBjbGFzc05hbWU7CiAKQEAgLTkzLDcgKzk2LDcgQEAgc3RydWN0IE1l
dGhvZFRhYmxlIHsKIAogICAgIHR5cGVkZWYgQXJyYXlCdWZmZXIqICgqU2xvd0Rvd25BbmRXYXN0
ZU1lbW9yeSkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKICAgICBTbG93RG93bkFuZFdhc3RlTWVtb3J5
IHNsb3dEb3duQW5kV2FzdGVNZW1vcnk7Ci0gICAgCisKICAgICB0eXBlZGVmIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PiAoKkdldFR5cGVkQXJyYXlJbXBsKShKU0FycmF5QnVmZmVyVmlldyop
OwogICAgIEdldFR5cGVkQXJyYXlJbXBsIGdldFR5cGVkQXJyYXlJbXBsOwogCkBAIC0xMzcsNiAr
MTQwLDcgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3du
UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAorICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVzRm9yRW51bWVyYXRpb24sIFwKICAgICAg
ICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmN1c3RvbUhh
c0luc3RhbmNlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjM2LDcgKzIzNiw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcykKIHsKICAgICBCRUdJTigp
OwogICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yID0ganNDYXN0PEpTRnVuY3Rpb24qPihPUCgy
KS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIAorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBBU1NFUlQoY29uc3RydWN0b3ItPm1l
dGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEp
ID09IENvbnN0cnVjdFR5cGVKUyk7CkBAIC0zNjEsMTMgKzM2MSwxMyBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfYWRkKQogICAgIEJFR0lOKCk7CiAgICAgSlNWYWx1ZSB2MSA9IE9QX0MoMiku
anNWYWx1ZSgpOwogICAgIEpTVmFsdWUgdjIgPSBPUF9DKDMpLmpzVmFsdWUoKTsKLSAgICAKKwog
ICAgIGlmICh2MS5pc1N0cmluZygpICYmICF2Mi5pc09iamVjdCgpKQogICAgICAgICBSRVRVUk4o
anNTdHJpbmcoZXhlYywgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmluZyhleGVjKSkpOwotICAgIAor
CiAgICAgaWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKICAgICAgICAgUkVUVVJO
KGpzTnVtYmVyKHYxLmFzTnVtYmVyKCkgKyB2Mi5hc051bWJlcigpKSk7Ci0gICAgCisKICAgICBS
RVRVUk4oanNBZGRTbG93Q2FzZShleGVjLCB2MSwgdjIpKTsKIH0KIApAQCAtNDkxLDExICs0OTEs
MTEgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpCiAgICAgQkVHSU4oKTsK
ICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QX0MoMikuanNWYWx1ZSgpOwogICAgIEpTT2JqZWN0
KiBiYXNlT2JqZWN0ID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIAorCiAgICAgSlNW
YWx1ZSBzdWJzY3JpcHQgPSBPUF9DKDMpLmpzVmFsdWUoKTsKLSAgICAKKwogICAgIGJvb2wgY291
bGREZWxldGU7Ci0gICAgCisKICAgICB1aW50MzJfdCBpOwogICAgIGlmIChzdWJzY3JpcHQuZ2V0
VUludDMyKGkpKQogICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmplY3QtPm1ldGhvZFRhYmxl
KCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqZWN0LCBleGVjLCBpKTsKQEAgLTUwNywx
MCArNTA3LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWxfYnlfdmFsKQogICAgICAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBwcm9wZXJ0eSk7
CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBleGVjLT5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIFRIUk9XKGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
VW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7Ci0gICAgCisKICAgICBSRVRVUk4oanNCb29s
ZWFuKGNvdWxkRGVsZXRlKSk7CiB9CiAKQEAgLTUzNCw2ICs1MzQsMzcgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2VudGVyKQogICAgIEVORCgpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAgICBSRVRV
Uk4oanNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGV4ZWMsIE9QKDIpLmpzVmFsdWUoKS50b09iamVj
dChleGVjKSkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoKQoreworICAgIEJFR0lOKCk7CisgICAgUkVUVVJOKGpzTnVtYmVyKE9QKDIpLmVudW1l
cmF0b3JFbnRyeSgpLT5pbmRleGluZ0xpbWl0KCkpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3RvX2luZGV4X3N0cmluZykKK3sKKyAgICBCRUdJTigpOworICAgIHVpbnQzMl90IGlu
ZGV4ID0gT1AoMikuanNWYWx1ZSgpLmFzVUludDMyKCk7CisgICAgUkVUVVJOKGpzSW5kZXhTdHJp
bmcoZXhlYywgaW5kZXgpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9wcm90
b3R5cGUpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gT1BfQygyKS5qc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSBwcm90b3R5cGU7CisgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkp
CisgICAgICAgIHByb3RvdHlwZSA9IGFzT2JqZWN0KHZhbHVlKS0+cHJvdG90eXBlKCk7CisgICAg
ZWxzZQorICAgICAgICBwcm90b3R5cGUgPSB2YWx1ZS5zeW50aGVzaXplUHJvdG90eXBlKGV4ZWMp
OworICAgIFJFVFVSTihwcm90b3R5cGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzAyMTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZu
ZGVmIENvbW1vblNsb3dQYXRoc19oCkBAIC02MCw3ICs2MCw3IEBAIEFMV0FZU19JTkxJTkUgaW50
IGFyaXR5Q2hlY2tGb3IoRXhlY1N0YXQKICAgICBBU1NFUlQoIWNhbGxlZS0+aXNIb3N0RnVuY3Rp
b24oKSk7CiAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSBjYWxsZWUtPmpzRXhlY3V0YWJs
ZSgpLT5jb2RlQmxvY2tGb3Ioa2luZCk7CiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKTsKLSAgICAKKwogICAgIEFT
U0VSVChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IG5ld0NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpKTsKICAgICBpbnQgbWlzc2luZ0FyZ3VtZW50Q291bnQgPSBuZXdDb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSAtIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgIGludCBuZWVk
ZWRTdGFja1NwYWNlID0gbWlzc2luZ0FyZ3VtZW50Q291bnQgKyAxOyAvLyBBbGxvdyBzcGFjZSB0
byBzYXZlIHRoZSBvcmlnaW5hbCByZXR1cm4gUEMuCkBAIC0xNDgsMTUgKzE0OCwxNSBAQCBpbmxp
bmUgdm9pZCBkZWNvZGVSZXN1bHQoU2xvd1BhdGhSZXR1cm5UCiAgICAgYiA9IHUucGFpci5iOwog
fQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgCisKICNkZWZpbmUgU0xPV19QQVRI
Ci0gICAgCisKICNkZWZpbmUgU0xPV19QQVRIX0RFQ0wobmFtZSkgXAogZXh0ZXJuICJDIiBTbG93
UGF0aFJldHVyblR5cGUgU0xPV19QQVRIIG5hbWUoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlv
biogcGMpCi0gICAgCisKICNkZWZpbmUgU0xPV19QQVRIX0hJRERFTl9ERUNMKG5hbWUpIFwKIFNM
T1dfUEFUSF9ERUNMKG5hbWUpIFdURl9JTlRFUk5BTAotICAgIAorCiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjayk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eUNoZWNrKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfdG91Y2hfZW50cnkpOwpAQCAtMTk5LDYgKzE5OSwxNCBAQCBTTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2luKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
ZGVsX2J5X3ZhbCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CitTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKK1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKK1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfY2hlY2tfcHJvcGVydHlfZW51bWVyYXRvcik7CitTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX25leHRfc3RydWN0dXJlX3BuYW1lKTsKK1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfbmV4dF9nZW5lcmljX3BuYW1lKTsKK1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX2VudHJ5KTsKK1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfZ2V0X3Byb3RvdHlwZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9u
IDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsMTEgQEAgdm9pZCBKU0NlbGw6OmdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
K3ZvaWQgSlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzRm9yRW51bWVyYXRpb24oSlNPYmplY3QqLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKIGJvb2wgSlNDZWxsOjpjdXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIEpTVmFsdWUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNzAy
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU0FycmF5QnVm
ZmVyVmlldzsKIGNsYXNzIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OwogY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CitjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CiBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVB
cnJheTsKQEAgLTExMSw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
U3RyaW5nIGdldFN0cmluZyhFeGVjU3RhdGUqKSBjb25zdDsgLy8gbnVsbCBzdHJpbmcgaWYgbm90
IGEgc3RyaW5nCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGdldE9iamVjdCgpOyAv
LyBOVUxMIGlmIG5vdCBhbiBvYmplY3QKICAgICBjb25zdCBKU09iamVjdCogZ2V0T2JqZWN0KCkg
Y29uc3Q7IC8vIE5VTEwgaWYgbm90IGFuIG9iamVjdAotICAgICAgICAKKwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYpOwogCkBAIC0xMzUsNyArMTM2LDcgQEAgcHVi
bGljOgogICAgIGNvbnN0IE1ldGhvZFRhYmxlKiBtZXRob2RUYWJsZUZvckRlc3RydWN0aW9uKCkg
Y29uc3Q7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAKKwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVBy
b3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSk7CiAKQEAgLTE1Nyw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRS
ZW1lbWJlcmVkKGJvb2wgcmVtZW1iZXJlZCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2djRGF0
YSA9PSAocmVtZW1iZXJlZCA/IE1hcmtlZCA6IE1hcmtlZEFuZFJlbWVtYmVyZWQpKTsKLSAgICAg
ICAgbV9nY0RhdGEgPSByZW1lbWJlcmVkID8gTWFya2VkQW5kUmVtZW1iZXJlZCA6IE1hcmtlZDsg
CisgICAgICAgIG1fZ2NEYXRhID0gcmVtZW1iZXJlZCA/IE1hcmtlZEFuZFJlbWVtYmVyZWQgOiBN
YXJrZWQ7CiAgICAgfQogICAgIGJvb2wgaXNNYXJrZWQoKSBjb25zdAogICAgIHsKQEAgLTIwOSw2
ICsyMTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0
aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFByb3BlcnR5TmFtZXNGb3JFbnVtZXJh
dGlvbihKU09iamVjdCosIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOwogICAgIHN0YXRpYyBT
dHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgY3VzdG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91
bGRUaHJvdyk7CkBAIC0yMzMsNyArMjM1LDcgQEAgaW5saW5lIFRvIGpzQ2FzdChGcm9tKiBmcm9t
KQogICAgIEFTU0VSVCghZnJvbSB8fCBmcm9tLT5KU0NlbGw6OmluaGVyaXRzKHN0ZDo6cmVtb3Zl
X3BvaW50ZXI8VG8+Ojp0eXBlOjppbmZvKCkpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+
KGZyb20pOwogfQotICAgIAorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUbz4KIGlubGluZSBUbyBqc0Nh
c3QoSlNWYWx1ZSBmcm9tKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNJbmRleFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTSW5kZXhTdHJpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSW5kZXhTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0luZGV4U3RyaW5nX2gKKyNkZWZpbmUgSlNJbmRleFN0
cmluZ19oCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0luZGV4U3RyaW5nIDogcHVibGlj
IEpTU3RyaW5nIHsKKyAgICAKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTSW5kZXhTdHJpbmdfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwMjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgzLDYgKzE0ODMsMTAg
QEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogICAgIH0KIH0KIAor
dm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lc0ZvckVudW1lcmF0aW9uKEpTT2JqZWN0Kiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikKK3sKK30KKwogdm9pZCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICAv
LyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8gYmUgdGhlIGFj
Y2VwdGVkIGNvbnZlbnRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgaW5saW5lIEpT
Q2VsbCogZ2V0Q2FsbGFibGVPYmplY3QoSlNWYWx1ZQogY2xhc3MgR2V0dGVyU2V0dGVyOwogY2xh
c3MgSW50ZXJuYWxGdW5jdGlvbjsKIGNsYXNzIEpTRnVuY3Rpb247CitjbGFzcyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBNYXJr
ZWRCbG9jazsKIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvcjsKQEAgLTEwMyw3ICsxMDQsNyBAQCBj
bGFzcyBKU09iamVjdCA6IHB1YmxpYyBKU0NlbGwgewogCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKLSAgICAgICAgCisKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYs
IENvcHlUb2tlbik7CiAKQEAgLTExMiwxMiArMTEzLDEyIEBAIHB1YmxpYzoKICAgICBKU1ZhbHVl
IHByb3RvdHlwZSgpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UHJvdG90
eXBlKFZNJiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soRXhlY1N0YXRlKiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwotICAgICAgICAKKwogICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUoKS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vz
c2VzKCk7CiAgICAgfQotICAgICAgICAKKwogICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lKSBjb25zdDsKIApAQCAtMTQxLDE3ICsxNDIsMTcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CiAgICAgfQotICAgICAgICAKKwogICAgIHVuc2lnbmVkIGdldFZlY3Rvckxlbmd0aCgp
CiAgICAgewogICAgICAgICBpZiAoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgp
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnZl
Y3Rvckxlbmd0aCgpOwogICAgIH0KLSAgICAgICAgCisKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBw
dXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIAorCiAgICAgdm9pZCBwdXRCeUluZGV4
SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQogICAgIHsKICAgICAgICAgaWYgKGNhblNldEluZGV4UXVp
Y2tseShwcm9wZXJ0eU5hbWUpKSB7CkBAIC0xNjAsNyArMTYxLDcgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgICAgIG1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXRCeUluZGV4KHRoaXMsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICB9Ci0gICAgICAgIAor
CiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CiAgICAg
Ly8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCiAgICAgLy8gIC0gYWNj
ZXNzb3JzIGFyZSBub3QgY2FsbGVkLgpAQCAtMTgxLDEyICsxODIsMTIgQEAgcHVibGljOgogCiAg
ICAgLy8gQSBub24tdGhyb3dpbmcgdmVyc2lvbiBvZiBwdXREaXJlY3QgYW5kIHB1dERpcmVjdElu
ZGV4LgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHV0RGlyZWN0TWF5QmVJbmRleChFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwotICAgICAgICAKKwogICAgIGJvb2wgaGFz
SW5kZXhpbmdIZWFkZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSgp
LT5oYXNJbmRleGluZ0hlYWRlcih0aGlzKTsKICAgICB9Ci0gICAgCisKICAgICBib29sIGNhbkdl
dEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgc3dpdGNoIChpbmRleGlu
Z1R5cGUoKSkgewpAQCAtMjExLDcgKzIxMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBKU1ZhbHVlIGdldElu
ZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5
cGUoKSkgewpAQCAtMjI4LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgSlNWYWx1ZSB0cnlH
ZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhp
bmdUeXBlKCkpIHsKQEAgLTI2NCw3ICsyNjUsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgSlNWYWx1ZSBnZXRE
aXJlY3RJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBp
ZiAoSlNWYWx1ZSByZXN1bHQgPSB0cnlHZXRJbmRleFF1aWNrbHkoaSkpCkBAIC0yNzQsMTQgKzI3
NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBp
KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgSlNW
YWx1ZSBnZXRJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiAgICAgewogICAgICAg
ICBpZiAoSlNWYWx1ZSByZXN1bHQgPSB0cnlHZXRJbmRleFF1aWNrbHkoaSkpCiAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gZ2V0KGV4ZWMsIGkpOwogICAgIH0KLSAg
ICAgICAgCisKICAgICBib29sIGNhblNldEluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtMzAzLDcgKzMwNCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAg
ICAgCisKICAgICBib29sIGNhblNldEluZGV4UXVpY2tseUZvclB1dERpcmVjdCh1bnNpZ25lZCBp
KQogICAgIHsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtMzIwLDcgKzMy
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KLSAgICAgICAgCisKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVuc2lnbmVk
IGksIEpTVmFsdWUgdikKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaW5kZXhpbmdUeXBlKCkpIHsK
QEAgLTM3MSw3ICszNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIHZvaWQgaW5p
dGlhbGl6ZUluZGV4KFZNJiB2bSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2KQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtNDIwLDcgKzQyMSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgICAgIAorCiAgICAgYm9vbCBoYXNTcGFyc2VNYXAoKQogICAgIHsKICAgICAgICAg
c3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewpAQCAtNDM3LDcgKzQzOCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAg
ICBib29sIGluU3BhcnNlSW5kZXhpbmdNb2RlKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoaW5k
ZXhpbmdUeXBlKCkpIHsKQEAgLTQ1NCw3ICs0NTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgdm9pZCBlbnRl
ckRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mKTsKIAogICAgIC8vIHB1dERpcmVjdCBpcyBlZmZl
Y3RpdmVseSBhbiB1bmNoZWNrZWQgdmVzaW9uIG9mICdkZWZpbmVPd25Qcm9wZXJ0eSc6CkBAIC00
ODQsNiArNDg1LDggQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0ZvckVudW1lcmF0aW9uKEpTT2JqZWN0KiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisKICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNT
dGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwogICAg
IGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1Zh
bHVlJikgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNT
dGF0ZSopIGNvbnN0OwpAQCAtNTQ3LDEwICs1NTAsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQoaGFzSW5saW5lU3RvcmFnZSgpKTsKICAgICAgICAgcmV0dXJuIGlubGluZVN0b3JhZ2VVbnNh
ZmUoKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHko
KSBjb25zdCB7IHJldHVybiBtX2J1dHRlcmZseS5nZXQoKTsgfQogICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5KCkgeyByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KCk7IH0KLSAgICAgICAgCisKICAgICBD
b25zdFByb3BlcnR5U3RvcmFnZSBvdXRPZkxpbmVTdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9i
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpOyB9CiAgICAgUHJvcGVydHlTdG9yYWdlIG91dE9m
TGluZVN0b3JhZ2UoKSB7IHJldHVybiBtX2J1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCk7IH0K
IApAQCAtNjE3LDcgKzYyMCw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1
dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpOwogICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJl
KFZNJiwgQnV0dGVyZmx5Kik7Ci0gICAgICAgIAorCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0m
LCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0
cnVjdHVyZSosIEJ1dHRlcmZseSopOwogICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0
ZVN0b3JhZ2VJZk5lY2Vzc2FyeShWTSYsIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUq
KTsKQEAgLTYzNCw5ICs2MzcsOSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghaXNHbG9iYWxP
YmplY3QoKSB8fCAoKEpTT2JqZWN0KilzdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpID09IHRo
aXMpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIH0K
LSAgICAgICAgCisKICAgICB2b2lkIHN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZShWTSYpOwot
ICAgICAgICAKKwogICAgIC8vIFRoZSByZWNlaXZlciBpcyB0aGUgcHJvdG90eXBlIGluIHRoaXMg
Y2FzZS4gVGhlIGZvbGxvd2luZzoKICAgICAvLwogICAgIC8vIGFzT2JqZWN0KGZvby0+c3RydWN0
dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpKS0+YXR0ZW1wdFRvSW50ZXJjZXB0UHV0QnlJbmRleE9u
SG9sZUZvclByb3RvdHlwZSguLi4pCkBAIC02NDUsNyArNjQ4LDcgQEAgcHVibGljOgogICAgIC8v
CiAgICAgLy8gZm9vLT5hdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKC4uLik7CiAg
ICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlRm9yUHJvdG90eXBlKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICAKKwogICAgIC8vIFJldHVybnMgMCBpZiBp
bnQzMiBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJlY2F1c2UKICAgICAvLyBp
bmRleGluZyBzaG91bGQgYmUgc3BhcnNlLCB3ZSdyZSBoYXZpbmcgYSBiYWQgdGltZSwgb3IgYmVj
YXVzZQogICAgIC8vIHdlIGFscmVhZHkgaGF2ZSBhIG1vcmUgZ2VuZXJhbCBmb3JtIG9mIHN0b3Jh
Z2UgKGRvdWJsZSwKQEAgLTY1NCwxMCArNjU3LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGlmIChMSUtFTFkoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICByZXR1cm4gZW5zdXJlSW50MzJTbG93KHZtKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLy8g
UmV0dXJucyAwIGlmIGRvdWJsZSBzdG9yYWdlIGNhbm5vdCBiZSBjcmVhdGVkIC0gZWl0aGVyIGJl
Y2F1c2UKICAgICAvLyBpbmRleGluZyBzaG91bGQgYmUgc3BhcnNlLCB3ZSdyZSBoYXZpbmcgYSBi
YWQgdGltZSwgb3IgYmVjYXVzZQogICAgIC8vIHdlIGFscmVhZHkgaGF2ZSBhIG1vcmUgZ2VuZXJh
bCBmb3JtIG9mIHN0b3JhZ2UgKGNvbnRpZ3VvdXMsCkBAIC02NjYsMjAgKzY2OSwyMCBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBpZiAoTElLRUxZKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkp
KQogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7Ci0g
ICAgICAgICAgICAKKwogICAgICAgICByZXR1cm4gZW5zdXJlRG91YmxlU2xvdyh2bSk7CiAgICAg
fQotICAgICAgICAKKwogICAgIC8vIFJldHVybnMgMCBpZiBjb250aWd1b3VzIHN0b3JhZ2UgY2Fu
bm90IGJlIGNyZWF0ZWQgLSBlaXRoZXIgYmVjYXVzZQogICAgIC8vIGluZGV4aW5nIHNob3VsZCBi
ZSBzcGFyc2Ugb3IgYmVjYXVzZSB3ZSdyZSBoYXZpbmcgYSBiYWQgdGltZS4KICAgICBDb250aWd1
b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91cyhWTSYgdm0pCiAgICAgewogICAgICAgICBpZiAo
TElLRUxZKGhhc0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKSkKICAgICAgICAgICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91cygpOwotICAgICAgICAgICAgCisKICAgICAgICAgcmV0
dXJuIGVuc3VyZUNvbnRpZ3VvdXNTbG93KHZtKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgLy8g
U2FtZSBhcyBlbnN1cmVDb250aWd1b3VzKCksIGV4Y2VwdCB0aGF0IGlmIHRoZSBpbmRleGVkIHN0
b3JhZ2UgaXMgaW4KICAgICAvLyBkb3VibGUgbW9kZSwgdGhlbiBpdCBkb2VzIGEgcmFnZSBjb252
ZXJzaW9uIHRvIGNvbnRpZ3VvdXM6IGl0CiAgICAgLy8gYXR0ZW1wdHMgdG8gY29udmVydCBlYWNo
IGRvdWJsZSB0byBhbiBpbnQzMi4KQEAgLTY4NywxMCArNjkwLDEwIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIGlmIChMSUtFTFkoaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkpKQogICAg
ICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Ci0gICAgICAgICAgICAK
KwogICAgICAgICByZXR1cm4gcmFnZUVuc3VyZUNvbnRpZ3VvdXNTbG93KHZtKTsKICAgICB9Ci0g
ICAgICAgIAorCiAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUgd2hl
cmUgaXQgaGFzIGFycmF5IHN0b3JhZ2UuIFVzZQogICAgIC8vIHRoaXMgaWYgeW91J3JlIGFib3V0
IHRvIHBlcmZvcm0gYWN0aW9ucyB0aGF0IHdvdWxkIGhhdmUgcmVxdWlyZWQgdGhlCiAgICAgLy8g
b2JqZWN0IHRvIGJlIGNvbnZlcnRlZCB0byBoYXZlIGFycmF5IHN0b3JhZ2UsIGlmIGl0IGRpZG4n
dCBoYXZlIGl0CkBAIC03MDIsMTQgKzcwNSwxNCBAQCBwdWJsaWM6CiAKICAgICAgICAgcmV0dXJu
IGVuc3VyZUFycmF5U3RvcmFnZVNsb3codm0pOwogICAgIH0KLSAgICAgICAgCisKICAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mSW5saW5lU3RvcmFnZSgpOwotICAgICAgICAKKwogICAgIHN0YXRp
YyBwdHJkaWZmX3QgYnV0dGVyZmx5T2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNPYmplY3QsIG1fYnV0dGVyZmx5KTsKICAgICB9Ci0gICAgICAgIAorCiAg
ICAgdm9pZCogYnV0dGVyZmx5QWRkcmVzcygpCiAgICAgewogICAgICAgICByZXR1cm4gJm1fYnV0
dGVyZmx5OwpAQCAtNzM3LDcgKzc0MCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBUbyBpbnN0YW50
aWF0ZSBvYmplY3RzIHlvdSBsaWtlbHkgd2FudCBKU0ZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICAv
LyBUbyBjcmVhdGUgZGVyaXZlZCB0eXBlcyB5b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5hbE9iamVj
dCwgYmVsb3cuCiAgICAgSlNPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7
Ci0gICAgICAgIAorCiAgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRl
cmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAgICAgdm9pZCBjb3B5QnV0dGVyZmx5KENvcHlW
aXNpdG9yJiwgQnV0dGVyZmx5Kiwgc2l6ZV90IHN0b3JhZ2VTaXplKTsKIApAQCAtNzQ4LDcgKzc1
MSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKGhhc0FueUFycmF5U3RvcmFnZShpbmRl
eGluZ1R5cGUoKSkpOwogICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgIH0KLSAgICAgICAgCisKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgdG8gcHJl
ZGljYXRlIHNvbWUgYWN0aW9ucyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKICAgICAvLyBvYmplY3Qg
aXMgaW4gYSBtb2RlIHdoZXJlIGl0IGhhcyBhcnJheSBzdG9yYWdlLgogICAgIEFycmF5U3RvcmFn
ZSogYXJyYXlTdG9yYWdlT3JOdWxsKCkKQEAgLTc1Niw1MCArNzU5LDUwIEBAIHByb3RlY3RlZDoK
ICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkgewogICAgICAgICBjYXNlIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAg
QnV0dGVyZmx5KiBjcmVhdGVJbml0aWFsVW5kZWNpZGVkKFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY3JlYXRlSW5pdGlhbEludDMyKFZNJiwgdW5zaWduZWQg
bGVuZ3RoKTsKICAgICBDb250aWd1b3VzRG91YmxlcyBjcmVhdGVJbml0aWFsRG91YmxlKFZNJiwg
dW5zaWduZWQgbGVuZ3RoKTsKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY3JlYXRlSW5pdGlhbENv
bnRpZ3VvdXMoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICAKKwogICAgIHZvaWQgY29u
dmVydFVuZGVjaWRlZEZvclZhbHVlKFZNJiwgSlNWYWx1ZSk7CiAgICAgdm9pZCBjcmVhdGVJbml0
aWFsRm9yVmFsdWVBbmRTZXQoVk0mLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7CiAgICAgdm9p
ZCBjb252ZXJ0SW50MzJGb3JWYWx1ZShWTSYsIEpTVmFsdWUpOwotICAgICAgICAKKwogICAgIEFy
cmF5U3RvcmFnZSogY3JlYXRlQXJyYXlTdG9yYWdlKFZNJiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNp
Z25lZCB2ZWN0b3JMZW5ndGgpOwogICAgIEFycmF5U3RvcmFnZSogY3JlYXRlSW5pdGlhbEFycmF5
U3RvcmFnZShWTSYpOwotICAgICAgICAKKwogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjb252ZXJ0
VW5kZWNpZGVkVG9JbnQzMihWTSYpOwogICAgIENvbnRpZ3VvdXNEb3VibGVzIGNvbnZlcnRVbmRl
Y2lkZWRUb0RvdWJsZShWTSYpOwogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjb252ZXJ0VW5kZWNp
ZGVkVG9Db250aWd1b3VzKFZNJik7CiAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVk
VG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24sIHVuc2lnbmVkIG5lZWRl
ZExlbmd0aCk7CiAgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3Jh
Z2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOwogICAgIEFycmF5U3RvcmFnZSogY29udmVy
dFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJik7Ci0gICAgICAgIAorCiAgICAgQ29udGlndW91
c0RvdWJsZXMgY29udmVydEludDMyVG9Eb3VibGUoVk0mKTsKICAgICBDb250aWd1b3VzSlNWYWx1
ZXMgY29udmVydEludDMyVG9Db250aWd1b3VzKFZNJik7CiAgICAgQXJyYXlTdG9yYWdlKiBjb252
ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbiwgdW5zaWdu
ZWQgbmVlZGVkTGVuZ3RoKTsKICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlT
dG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKICAgICBBcnJheVN0b3JhZ2UqIGNv
bnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZNJik7Ci0gICAgCisKICAgICBDb250aWd1b3VzSlNW
YWx1ZXMgY29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYpOwogICAgIENvbnRpZ3VvdXNKU1Zh
bHVlcyByYWdlQ29udmVydERvdWJsZVRvQ29udGlndW91cyhWTSYpOwogICAgIEFycmF5U3RvcmFn
ZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
LCB1bnNpZ25lZCBuZWVkZWRMZW5ndGgpOwogICAgIEFycmF5U3RvcmFnZSogY29udmVydERvdWJs
ZVRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKICAgICBBcnJheVN0
b3JhZ2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYpOwotICAgICAgICAKKwogICAg
IEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiwgdW5zaWduZWQgbmVlZGVkTGVuZ3RoKTsKICAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24pOwogICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZShWTSYpOwogCi0gICAgICAgIAorCiAgICAgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3Jh
Z2VFeGlzdHNBbmRFbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGUoVk0mKTsKLSAgICAgICAgCisK
ICAgICBib29sIGRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93RXhjZXB0aW9uKTsKIAog
ICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlPgpAQCAtODEwLDMxICs4MTMs
MzEgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGVhbGxvY2F0ZVNwYXJzZUluZGV4TWFwKCk7CiAg
ICAgYm9vbCBkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQsIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwogICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIGFsbG9jYXRlU3BhcnNlSW5kZXhNYXAoVk0mKTsKLSAgICAgICAgCisK
ICAgICB2b2lkIG5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNjZXNzb3JzKFZNJik7Ci0gICAgICAg
IAorCiAgICAgYm9vbCBhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAg
CisKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdhbnQgc2V0SW5kZXhRdWlja2x5IHRvIHN1Y2Nl
ZWQgYW5kIHlvdSdyZSBzdXJlIHRoYXQKICAgICAvLyB0aGUgYXJyYXkgaXMgY29udGlndW91cy4K
ICAgICB2b2lkIGVuc3VyZUxlbmd0aChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChsZW5ndGggPCBNQVhfQVJSQVlfSU5ERVgpOwogICAgICAgICBBU1NFUlQo
aGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUoKSkgfHwgaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkp
IHx8IGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkgfHwgaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlw
ZSgpKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAobV9idXR0ZXJmbHktPnZlY3Rvckxl
bmd0aCgpIDwgbGVuZ3RoKQogICAgICAgICAgICAgZW5zdXJlTGVuZ3RoU2xvdyh2bSwgbGVuZ3Ro
KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmIChtX2J1dHRlcmZseS0+cHVibGljTGVuZ3Ro
KCkgPCBsZW5ndGgpCiAgICAgICAgICAgICBtX2J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxl
bmd0aCk7CiAgICAgfQotICAgICAgICAKKwogICAgIHRlbXBsYXRlPEluZGV4aW5nVHlwZSBpbmRl
eGluZ1NoYXBlPgogICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHMoQnV0dGVyZmx5Kik7Ci0gICAg
ICAgIAorCiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byB1bmRlY2lkZWQsIGludDMyLCBkb3Vi
bGUsIGFuZCBjb250aWd1b3VzLgogICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHMoKTsKLSAgICAg
ICAgCisKICAgICAvLyBUaGlzIHN0cmFuZ2UgbWV0aG9kIHJldHVybnMgYSBwb2ludGVyIHRvIHRo
ZSBzdGFydCBvZiB0aGUgaW5kZXhlZCBkYXRhCiAgICAgLy8gYXMgaWYgaXQgY29udGFpbmVkIEpT
VmFsdWVzLiBCdXQgaXQgd29uJ3QgYWx3YXlzIGNvbnRhaW4gSlNWYWx1ZXMuCiAgICAgLy8gTWFr
ZSBzdXJlIHlvdSBjYXN0IHRoaXMgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUgYmVmb3JlIHVzaW5n
LgpAQCAtODQ2LDcgKzg0OSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgY2FzZSBBTExfRE9VQkxF
X0lOREVYSU5HX1RZUEVTOgogICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZ
UEVTOgogICAgICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7Ci0gICAg
ICAgICAgICAgICAgCisKICAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZl
Y3RvcigpOwogCkBAIC04NzEsNyArODc0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0
dXJuIENvbnRpZ3VvdXNKU1ZhbHVlcygpOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwog
ICAgIEpTVmFsdWUgZ2V0SG9seUluZGV4UXVpY2tseSh1bnNpZ25lZCBpKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGkgPCBtX2J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCkpOwpAQCAtODkyLDcgKzg5
NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgdGVtcGxhdGU8SW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZT4KICAgICB1bnNpZ25lZCByZWxldmFudExlbmd0aCgpCiAgICAgewpAQCAtOTAxLDEyICs5
MDQsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQ
RVM6CiAgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAg
ICAgICByZXR1cm4gbV9idXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOwotICAgICAgICAgICAgICAg
IAorCiAgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptaW4oCiAgICAgICAgICAgICAgICAgbV9idXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICBtX2J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgIHJldHVybiAwOwpA
QCAtOTM0LDcgKzkzNyw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgICAgICAKKwogICAgIC8vIE5vYm9keSBzaG91
bGQgZXZlciBhc2sgYW55IG9mIHRoZXNlIHF1ZXN0aW9ucyBvbiBzb21ldGhpbmcgYWxyZWFkeSBr
bm93biB0byBiZSBhIEpTT2JqZWN0LgogICAgIHVzaW5nIEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBw
ZXI7CiAgICAgdXNpbmcgSlNDZWxsOjppc0dldHRlclNldHRlcjsKQEAgLTk0MiwxMSArOTQ1LDEx
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRTdHJpbmcoRXhlY1N0YXRlKiBleGVjKTsKICAgICB2
b2lkIGlzT2JqZWN0KCk7CiAgICAgdm9pZCBpc1N0cmluZygpOwotICAgICAgICAKKwogICAgIEJ1
dHRlcmZseSogY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKFZNJiwgdW5zaWduZWQgbGVuZ3Ro
LCBzaXplX3QgZWxlbWVudFNpemUpOwotICAgICAgICAKKwogICAgIEFycmF5U3RvcmFnZSogZW50
ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoVk0m
LCBBcnJheVN0b3JhZ2UqKTsKLSAgICAgICAgCisKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAg
IGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOwogCkBAIC05NTQsMzcgKzk1Nywz
NyBAQCBwcml2YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3Bl
cnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVydHlPZmZzZXQp
OwogCiAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShWTSYs
IFByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgICAgIAorCiAgICAgdm9pZCBwdXRJbmRleGVkRGVz
Y3JpcHRvcihFeGVjU3RhdGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGQpOwotICAgICAgICAKKwogICAgIHZvaWQg
cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgcHV0RGlyZWN0SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5k
ZXhNb2RlLCBBcnJheVN0b3JhZ2UqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dERp
cmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlKTsK
LSAgICAgICAgCisKICAgICB1bnNpZ25lZCBnZXROZXdWZWN0b3JMZW5ndGgodW5zaWduZWQgY3Vy
cmVudFZlY3Rvckxlbmd0aCwgdW5zaWduZWQgY3VycmVudExlbmd0aCwgdW5zaWduZWQgZGVzaXJl
ZExlbmd0aCk7CiAgICAgdW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2ly
ZWRMZW5ndGgpOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAg
IAogICAgIEFycmF5U3RvcmFnZSogY29uc3RydWN0Q29udmVydGVkQXJyYXlTdG9yYWdlV2l0aG91
dENvcHlpbmdFbGVtZW50cyhWTSYsIHVuc2lnbmVkIG5lZWRlZExlbmd0aCk7Ci0gICAgICAgIAor
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRJbmRleFF1aWNrbHlUb1VuZGVjaWRlZChW
TSYsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGNvbnZlcnRJbnQzMlRvRG91YmxlT3JDb250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgo
Vk0mLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzV2hpbGVQZXJmb3JtaW5nU2V0SW5kZXgoVk0mLCB1
bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSk7Ci0gICAgICAgIAorCiAgICAgdm9pZCBlbnN1cmVMZW5n
dGhTbG93KFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgCisKICAgICBDb250aWd1b3Vz
SlNWYWx1ZXMgZW5zdXJlSW50MzJTbG93KFZNJik7CiAgICAgQ29udGlndW91c0RvdWJsZXMgZW5z
dXJlRG91YmxlU2xvdyhWTSYpOwogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBlbnN1cmVDb250aWd1
b3VzU2xvdyhWTSYpOwogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyByYWdlRW5zdXJlQ29udGlndW91
c1Nsb3coVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheVN0b3JhZ2UqIGVuc3VyZUFy
cmF5U3RvcmFnZVNsb3coVk0mKTsKLSAgICAKKwogICAgIGVudW0gRG91YmxlVG9Db250aWd1b3Vz
TW9kZSB7IEVuY29kZVZhbHVlQXNEb3VibGUsIFJhZ2VDb252ZXJ0RG91YmxlVG9WYWx1ZSB9Owog
ICAgIHRlbXBsYXRlPERvdWJsZVRvQ29udGlndW91c01vZGUgbW9kZT4KICAgICBDb250aWd1b3Vz
SlNWYWx1ZXMgZ2VuZXJpY0NvbnZlcnREb3VibGVUb0NvbnRpZ3VvdXMoVk0mKTsKICAgICBDb250
aWd1b3VzSlNWYWx1ZXMgZW5zdXJlQ29udGlndW91c1Nsb3coVk0mLCBEb3VibGVUb0NvbnRpZ3Vv
dXNNb2RlKTsKLSAgICAKKwogcHJvdGVjdGVkOgogICAgIENvcHlXcml0ZUJhcnJpZXI8QnV0dGVy
Zmx5PiBtX2J1dHRlcmZseTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpAQCAtMTAzNSw3ICsxMDM4
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHNpemVvZihKU09iamVjdCkgKyBp
bmxpbmVDYXBhY2l0eSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KTsKICAgICB9
Ci0gICAgICAgIAorCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRTaXplID0gNjQ7
CiAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKQogICAg
IHsKQEAgLTEwNjEsNyArMTA2NCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
dmlzaXRDaGlsZHJlbkNvbW1vbihTbG90VmlzaXRvciYpOwotICAgICAgICAKKwogICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwpAQCAtMTA4Myw3ICsxMDg2LDcgQEAgcHJpdmF0ZToKIGlubGluZSBKU0ZpbmFsT2Jq
ZWN0KiBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKICAgICBKU0ZpbmFsT2JqZWN0KiBmaW5hbE9iamVjdCA9IG5ldyAoCi0gICAg
ICAgIE5vdE51bGwsIAorICAgICAgICBOb3ROdWxsLAogICAgICAgICBhbGxvY2F0ZUNlbGw8SlNG
aW5hbE9iamVjdD4oCiAgICAgICAgICAgICAqZXhlYy0+aGVhcCgpLAogICAgICAgICAgICAgYWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKQpAQCAtMTI3NSw3ICsxMjc4
LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIAogICAgIFByb3Bl
cnR5U2xvdCBzbG90KHRoaXMpOwogICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcykt
PmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1
cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIAorCiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEzOTksNyArMTQwMiw3IEBAIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQsIHNs
b3QuY29udGV4dCgpKTsKLSAgICAKKwogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICBzZXRTdHJ1Y3R1
cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwpAQCAtMTQx
NywxMyArMTQyMCwxMyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
CiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3JhZ2VJ
Zk5lY2Vzc2FyeShWTSYgdm0sIHVuc2lnbmVkIG9sZENhcGFjaXR5LCBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSkKIHsKICAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3U3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAKKwogICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBu
ZXdTdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOyAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSgKICAgICAgICAgdm0sIG9s
ZENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBFbnVtZXJhdG9yRW50cnk6
OnNfaW5mbyA9IHsgIkVudW1lcmF0b3JFbnRyeSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoRW51bWVyYXRvckVudHJ5KSB9OworCitFbnVtZXJhdG9yRW50cnkqIEVudW1lcmF0b3JFbnRy
eTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBFbnVtZXJhdG9yRW50cnkqIG5ld0VudHJ5ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RW51bWVyYXRvckVudHJ5Pih2bS5oZWFwKSkgRW51bWVy
YXRvckVudHJ5KHZtKTsKKyAgICBuZXdFbnRyeS0+SlNDZWxsOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgcmV0dXJuIG5ld0VudHJ5OworfQorCitFbnVtZXJhdG9yRW50cnkqIEVudW1lcmF0b3JF
bnRyeTo6Y2xvbmUoVk0mIHZtLCBjb25zdCBFbnVtZXJhdG9yRW50cnkmIGVudHJ5KQoreworICAg
IEVudW1lcmF0b3JFbnRyeSogbmV3RW50cnkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxF
bnVtZXJhdG9yRW50cnk+KHZtLmhlYXApKSBFbnVtZXJhdG9yRW50cnkodm0sIGVudHJ5KTsKKyAg
ICBuZXdFbnRyeS0+ZmluaXNoQ3JlYXRpb24odm0sIGVudHJ5KTsKKyAgICByZXR1cm4gbmV3RW50
cnk7Cit9CisKK0VudW1lcmF0b3JFbnRyeTo6RW51bWVyYXRvckVudHJ5KFZNJiB2bSkKKyAgICA6
IEpTQ2VsbCh2bSwgdm0uZW51bWVyYXRvckVudHJ5U3RydWN0dXJlLmdldCgpKQorICAgICwgbV9j
dXJyZW50SW5kZXhlZEluZGV4KDApCisgICAgLCBtX2N1cnJlbnRTdHJ1Y3R1cmVQcm9wZXJ0eUlu
ZGV4KDApCisgICAgLCBtX2N1cnJlbnRHZW5lcmljUHJvcGVydHlJbmRleCgwKQorICAgICwgbV9p
bmRleGluZ0xpbWl0KDApCit7Cit9CisKK0VudW1lcmF0b3JFbnRyeTo6RW51bWVyYXRvckVudHJ5
KFZNJiB2bSwgY29uc3QgRW51bWVyYXRvckVudHJ5JiBvdGhlcikKKyAgICA6IEpTQ2VsbCh2bSwg
dm0uZW51bWVyYXRvckVudHJ5U3RydWN0dXJlLmdldCgpKQorICAgICwgbV9jdXJyZW50SW5kZXhl
ZEluZGV4KDApCisgICAgLCBtX2N1cnJlbnRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KDApCisgICAg
LCBtX2N1cnJlbnRHZW5lcmljUHJvcGVydHlJbmRleCgwKQorICAgICwgbV9pbmRleGluZ0xpbWl0
KG90aGVyLm1faW5kZXhpbmdMaW1pdCkKKyAgICAsIG1fc3RydWN0dXJlUHJvcGVydHlOYW1lcyhv
dGhlci5tX3N0cnVjdHVyZVByb3BlcnR5TmFtZXMpCisgICAgLCBtX2dlbmVyaWNQcm9wZXJ0eU5h
bWVzKG90aGVyLm1fZ2VuZXJpY1Byb3BlcnR5TmFtZXMpCit7Cit9CisKK3ZvaWQgRW51bWVyYXRv
ckVudHJ5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNvbnN0IEVudW1lcmF0b3JFbnRyeSYgZW50
cnkpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fc3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgZW50cnkubV9zdHJ1Y3R1cmUuZ2V0KCkpOworICAgIG1fb2JqZWN0LnNldCh2
bSwgdGhpcywgZW50cnkubV9vYmplY3QuZ2V0KCkpOworfQorCit2b2lkIEVudW1lcmF0b3JFbnRy
eTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8RW51bWVyYXRvckVu
dHJ5Kj4oY2VsbCktPkVudW1lcmF0b3JFbnRyeTo6fkVudW1lcmF0b3JFbnRyeSgpOworfQorCit2
b2lkIEVudW1lcmF0b3JFbnRyeTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7
CisgICAgRW51bWVyYXRvckVudHJ5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEVudW1lcmF0b3JFbnRy
eSo+KGNlbGwpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX29iamVjdCkKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqZWN0KTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9z
dHJ1Y3R1cmUpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3N0cnVjdHVy
ZSk7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fbmV4dEVudHJ5KQorICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9uZXh0RW50cnkpOworfQorCit2b2lkIEVudW1lcmF0b3JFbnRy
eTo6YWRkU3RydWN0dXJlUHJvcGVydHlOYW1lcyhjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIHBy
b3BlcnR5TmFtZXMpCit7CisgICAgbV9zdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzID0gUmVmQ291bnRl
ZEFycmF5PElkZW50aWZpZXI+KHByb3BlcnR5TmFtZXMpOworfQorCit2b2lkIEVudW1lcmF0b3JF
bnRyeTo6YWRkR2VuZXJpY1Byb3BlcnR5TmFtZXMoY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBw
cm9wZXJ0eU5hbWVzKQoreworICAgIG1fZ2VuZXJpY1Byb3BlcnR5TmFtZXMgPSBSZWZDb3VudGVk
QXJyYXk8SWRlbnRpZmllcj4ocHJvcGVydHlOYW1lcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnNfaW5mbyA9IHsgIkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKSB9OworCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGpz
UHJvcGVydHlOYW1lRW51bWVyYXRvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcj4odm0uaGVhcCkpIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcih2
bSk7CisgICAganNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIGpzUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKK30KKworSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbnZlcnRUb0dlbmVyaWNFbnVt
ZXJhdGlvbihWTSYsIEpTT2JqZWN0KiwgRW51bWVyYXRvckVudHJ5KikKK3sKKyAgICAvLyBUT0RP
OiBUaGlzLgorICAgIHJldHVybiBudWxscHRyOworfQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0pCisgICAgOiBKU0NlbGwodm0sIHZt
LnByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX3RhaWxFbnRy
eShudWxscHRyKQoreworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKj4oY2VsbCktPkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6fkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcigpOworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2hlYWRFbnRyeSk7Cit9CisKK3ZvaWQg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp3aWxsU3RhcnRBcHBlbmRpbmdGb3JPYmplY3QoVk0m
IHZtLCBKU09iamVjdCogb2JqZWN0LCBib29sIGlzQmFzZU9iamVjdCkKK3sKKyAgICBFbnVtZXJh
dG9yRW50cnkqIG5ld0VudHJ5ID0gRW51bWVyYXRvckVudHJ5OjpjcmVhdGUodm0pOworCisgICAg
Ly8gVGhlIGVudHJ5IGZvciB0aGUgYmFzZSBvYmplY3Qgc2hvdWxkIG5vdCBoYXZlIGEgc3BlY2lm
aWMgb2JqZWN0IHRvIGNoZWNrIGZvciBzbworICAgIC8vIHRoYXQgaXQgY2FuIGJlIGdlbmVyaWMg
YWNyb3NzIG11bHRpcGxlIGJhc2Ugb2JqZWN0cyB3aXRoIHRoZSBzYW1lIHByb3RvdHlwZSBjaGFp
bi4KKyAgICBpZiAoIWlzQmFzZU9iamVjdCkKKyAgICAgICAgbmV3RW50cnktPnNldE9iamVjdCh2
bSwgb2JqZWN0KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKKyAgICBuZXdFbnRyeS0+c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOworCisgICAg
Ly8gVE9ETzogRG8gY2hlY2tzIHRvIHNlZSBpZiB3ZSBjYW4gZ28gZmFzdC4KKworICAgIGlmICgh
bV9oZWFkRW50cnkpIHsKKyAgICAgICAgQVNTRVJUKCFtX3RhaWxFbnRyeSk7CisgICAgICAgIG1f
aGVhZEVudHJ5LnNldCh2bSwgdGhpcywgbmV3RW50cnkpOworICAgICAgICBtX3RhaWxFbnRyeSA9
IG5ld0VudHJ5OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fdGFpbEVu
dHJ5KTsKKyAgICBtX3RhaWxFbnRyeS0+c2V0TmV4dCh2bSwgbmV3RW50cnkpOworICAgIG1fdGFp
bEVudHJ5ID0gbmV3RW50cnk7Cit9CisKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpz
ZXRJbmRleGluZ0xpbWl0KHVuc2lnbmVkIGxpbWl0KQoreworICAgIGN1cnJlbnRFbnRyeSgpLnNl
dEluZGV4aW5nTGltaXQobGltaXQpOworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6YXBwZW5kU3RydWN0dXJlSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQoreworICAgIGlmIChtX2N1cnJlbnRHZW5lcmljSWRlbnRpZmllcnMpIHsKKyAgICAgICAgQVNT
RVJUKCFtX2N1cnJlbnRHZW5lcmljSWRlbnRpZmllcnMtPmlzRW1wdHkoKSk7CisgICAgICAgIGFw
cGVuZEdlbmVyaWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmICghbV9jdXJyZW50U3RydWN0dXJlSWRlbnRpZmllcnMpCisgICAgICAgIG1fY3Vy
cmVudFN0cnVjdHVyZUlkZW50aWZpZXJzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxJZGVudGlmaWVy
Pik7CisgICAgbV9jdXJyZW50U3RydWN0dXJlSWRlbnRpZmllcnMtPmFwcGVuZChpZGVudGlmaWVy
KTsKK30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmFwcGVuZEdlbmVyaWNJZGVu
dGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX2N1cnJl
bnRHZW5lcmljSWRlbnRpZmllcnMpCisgICAgICAgIG1fY3VycmVudEdlbmVyaWNJZGVudGlmaWVy
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SWRlbnRpZmllcj4pOworICAgIG1fY3VycmVudEdlbmVy
aWNJZGVudGlmaWVycy0+YXBwZW5kKGlkZW50aWZpZXIpOworfQorCit2b2lkIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KEpTT2JqZWN0KikKK3sK
KyAgICBjdXJyZW50RW50cnkoKS5hZGRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKCptX2N1cnJlbnRT
dHJ1Y3R1cmVJZGVudGlmaWVycyk7CisgICAgY3VycmVudEVudHJ5KCkuYWRkR2VuZXJpY1Byb3Bl
cnR5TmFtZXMoKm1fY3VycmVudEdlbmVyaWNJZGVudGlmaWVycyk7CisgICAgbV9jdXJyZW50U3Ry
dWN0dXJlSWRlbnRpZmllcnMuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRHZW5lcmljSWRlbnRpZmll
cnMuY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaAorI2RlZmluZSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgRW51bWVyYXRvckVu
dHJ5IDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
KworICAgIHN0YXRpYyBFbnVtZXJhdG9yRW50cnkqIGNyZWF0ZShWTSYpOworICAgIHN0YXRpYyBF
bnVtZXJhdG9yRW50cnkqIGNsb25lKFZNJiwgY29uc3QgRW51bWVyYXRvckVudHJ5Jik7CisKKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgdm9pZCBhZGRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVzKGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYpOworICAgIHZvaWQgYWRk
R2VuZXJpY1Byb3BlcnR5TmFtZXMoY29uc3QgVmVjdG9yPElkZW50aWZpZXI+Jik7CisKKyAgICB2
b2lkIHNldE5leHQoVk0mIHZtLCBFbnVtZXJhdG9yRW50cnkqIG5leHQpIHsgbV9uZXh0RW50cnku
c2V0KHZtLCB0aGlzLCBuZXh0KTsgfQorICAgIEVudW1lcmF0b3JFbnRyeSogbmV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fbmV4dEVudHJ5LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFN0cnVjdHVyZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKSB7IG1fc3RydWN0dXJlLnNldCh2bSwgdGhpcywg
c3RydWN0dXJlKTsgfQorICAgIHZvaWQgc2V0T2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIG9iamVj
dCkgeyBtX29iamVjdC5zZXQodm0sIHRoaXMsIG9iamVjdCk7IH0KKworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICBKU09i
amVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3QuZ2V0KCk7IH0KKworICAgIHZv
aWQgc2V0SW5kZXhpbmdMaW1pdCh1bnNpZ25lZCBsaW1pdCkgeyBtX2luZGV4aW5nTGltaXQgPSBs
aW1pdDsgfQorICAgIHVuc2lnbmVkIGluZGV4aW5nTGltaXQoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4aW5nTGltaXQ7IH0KKworICAgIGJvb2wgaGFzTmV4dEluZGV4ZWRQcm9wZXJ0eU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRleGVkSW5kZXggPCBtX2luZGV4aW5nTGltaXQ7IH0K
KyAgICB1bnNpZ25lZCBuZXh0SW5kZXhlZFByb3BlcnR5TmFtZSgpCisgICAgeworICAgICAgICBB
U1NFUlQoaGFzTmV4dEluZGV4ZWRQcm9wZXJ0eU5hbWUoKSk7CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnRJbmRleGVkSW5kZXgrKzsKKyAgICB9CisKKyAgICBjb25zdCBJZGVudGlmaWVyKiBuZXh0
U3RydWN0dXJlUHJvcGVydHlOYW1lKCkKKyAgICB7CisgICAgICAgIGlmIChtX2N1cnJlbnRTdHJ1
Y3R1cmVQcm9wZXJ0eUluZGV4ID49IG1fc3RydWN0dXJlUHJvcGVydHlOYW1lcy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZVBy
b3BlcnR5TmFtZXNbbV9jdXJyZW50U3RydWN0dXJlUHJvcGVydHlJbmRleCsrXTsKKyAgICB9CisK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBuZXh0R2VuZXJpY1Byb3BlcnR5TmFtZSgpCisgICAgewor
ICAgICAgICBpZiAobV9jdXJyZW50R2VuZXJpY1Byb3BlcnR5SW5kZXggPj0gbV9nZW5lcmljUHJv
cGVydHlOYW1lcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuICZtX2dlbmVyaWNQcm9wZXJ0eU5hbWVzW21fY3VycmVudEdlbmVyaWNQcm9wZXJ0eUlu
ZGV4KytdOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgRW51bWVyYXRvckVudHJ5KFZNJik7Cisg
ICAgRW51bWVyYXRvckVudHJ5KFZNJiwgY29uc3QgRW51bWVyYXRvckVudHJ5Jik7CisKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgY29uc3QgRW51bWVyYXRvckVudHJ5Jik7CisKKyAgICB1
bnNpZ25lZCBtX2N1cnJlbnRJbmRleGVkSW5kZXg7CisgICAgdW5zaWduZWQgbV9jdXJyZW50U3Ry
dWN0dXJlUHJvcGVydHlJbmRleDsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRHZW5lcmljUHJvcGVy
dHlJbmRleDsKKyAgICB1bnNpZ25lZCBtX2luZGV4aW5nTGltaXQ7CisgICAgUmVmQ291bnRlZEFy
cmF5PElkZW50aWZpZXI+IG1fc3RydWN0dXJlUHJvcGVydHlOYW1lczsKKyAgICBSZWZDb3VudGVk
QXJyYXk8SWRlbnRpZmllcj4gbV9nZW5lcmljUHJvcGVydHlOYW1lczsKKyAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1f
b2JqZWN0OworICAgIFdyaXRlQmFycmllcjxFbnVtZXJhdG9yRW50cnk+IG1fbmV4dEVudHJ5Owor
fTsKKworY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIDogcHVibGljIEpTQ2VsbCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIGNyZWF0ZShWTSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxT
dHJ1Y3R1cmUgPSB0cnVlOworCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOworCisgICAgdm9pZCB3aWxsU3RhcnRBcHBlbmRpbmdGb3JPYmplY3Qo
Vk0mLCBKU09iamVjdCosIGJvb2wgaXNCYXNlT2JqZWN0KTsKKyAgICB2b2lkIHNldEluZGV4aW5n
TGltaXQodW5zaWduZWQpOworICAgIHZvaWQgYXBwZW5kU3RydWN0dXJlSWRlbnRpZmllcihjb25z
dCBJZGVudGlmaWVyJik7CisgICAgdm9pZCBhcHBlbmRHZW5lcmljSWRlbnRpZmllcihjb25zdCBJ
ZGVudGlmaWVyJik7CisgICAgdm9pZCBkaWRGaW5pc2hBcHBlbmRpbmdGb3JPYmplY3QoSlNPYmpl
Y3QqKTsKKworICAgIEVudW1lcmF0b3JFbnRyeSogdGFrZU5leHRFbnRyeSgpCisgICAgeworICAg
ICAgICBpZiAoIW1faGVhZEVudHJ5KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fdGFpbEVudHJ5
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIEVudW1l
cmF0b3JFbnRyeSogcmVzdWx0ID0gbV9oZWFkRW50cnkuZ2V0KCk7CisgICAgICAgIEVudW1lcmF0
b3JFbnRyeSogbmV3SGVhZCA9IHJlc3VsdC0+bmV4dCgpOworICAgICAgICBpZiAoIW5ld0hlYWQp
IHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gbV90YWlsRW50cnkpOworICAgICAgICAg
ICAgbV90YWlsRW50cnkgPSBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgICAgICBtX2hlYWRFbnRyeS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG5ld0hl
YWQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogY29udmVydFRvR2VuZXJpY0VudW1lcmF0aW9uKFZNJiwgSlNPYmplY3QqIGJh
c2UsIEVudW1lcmF0b3JFbnRyeSopOworCitwcml2YXRlOgorICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcihWTSYpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKKworICAgIGNvbnN0IEVudW1lcmF0b3JFbnRyeSYgY3VycmVudEVudHJ5
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RhaWxFbnRyeSk7CisgICAgICAgIHJl
dHVybiAqbV90YWlsRW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRvckVudHJ5JiBjdXJyZW50
RW50cnkoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGFpbEVudHJ5KTsKKyAgICAgICAgcmV0
dXJuICptX3RhaWxFbnRyeTsKKyAgICB9CisKKyAgICBPd25QdHI8VmVjdG9yPElkZW50aWZpZXI+
PiBtX2N1cnJlbnRTdHJ1Y3R1cmVJZGVudGlmaWVyczsKKyAgICBPd25QdHI8VmVjdG9yPElkZW50
aWZpZXI+PiBtX2N1cnJlbnRHZW5lcmljSWRlbnRpZmllcnM7CisgICAgV3JpdGVCYXJyaWVyPEVu
dW1lcmF0b3JFbnRyeT4gbV9oZWFkRW50cnk7CisgICAgRW51bWVyYXRvckVudHJ5KiBtX3RhaWxF
bnRyeTsKK307CisKK2lubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIFN0cnVjdHVyZVJh
cmVEYXRhOjpjYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IoKQoreworICAgIHJldHVybiBtX2NhY2hl
ZFByb3BlcnR5RW51bWVyYXRvci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlUmFy
ZURhdGE6OnNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcihWTSYgdm0sIGNvbnN0IFN0cnVjdHVy
ZSosIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdmFsdWUpCit7CisgICAgbV9jYWNoZWRQcm9w
ZXJ0eUVudW1lcmF0b3Iuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MDIxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsOCBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
SlNJbmRleFN0cmluZy5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTcsMTAgKzU5LDEwIEBAIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUKICAgICBpbnQzMl90IGxlbmd0aDEgPSB1MS5sZW5ndGgo
KTsKICAgICBpbnQzMl90IGxlbmd0aDIgPSB1Mi5sZW5ndGgoKTsKICAgICBpbnQzMl90IGxlbmd0
aDMgPSB1My5sZW5ndGgoKTsKLSAgICAKKwogICAgIGlmIChsZW5ndGgxIDwgMCB8fCBsZW5ndGgy
IDwgMCB8fCBsZW5ndGgzIDwgMCkKICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKLSAgICAKKwogICAgIGlmICghbGVuZ3RoMSkKICAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIGpzU3RyaW5nKHZtLCB1MiksIGpzU3RyaW5nKHZtLCB1MykpOwogICAgIGlmICgh
bGVuZ3RoMikKQEAgLTE4NCw3ICsxODYsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNBZGQo
Q2FsbEZyYW1lKiBjCiB7CiAgICAgaWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkK
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHYxLmFzTnVtYmVyKCkgKyB2Mi5hc051bWJlcigpKTsK
LSAgICAgICAgCisKICAgICBpZiAodjEuaXNTdHJpbmcoKSAmJiAhdjIuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgYXNTdHJpbmcodjEpLCB2Mi50b1N0cmlu
ZyhjYWxsRnJhbWUpKTsKIApAQCAtMTk5LDcgKzIwMSw3IEBAIGlubGluZSBzaXplX3Qgbm9ybWFs
aXplUHJvdG90eXBlQ2hhaW5Gb3IKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAg
SlNDZWxsKiBjZWxsID0gYmFzZS5hc0NlbGwoKTsKICAgICBzaXplX3QgY291bnQgPSAwOwotICAg
ICAgICAKKwogICAgIHdoaWxlICghc2xvdEJhc2UgfHwgc2xvdEJhc2UgIT0gY2VsbCkgewogICAg
ICAgICBpZiAoY2VsbC0+aXNQcm94eSgpKQogICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90
b3R5cGVDaGFpbjsKQEAgLTIwNyw3ICsyMDksNyBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVBy
b3RvdHlwZUNoYWluRm9yCiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbyA9IGNlbGwt
PnN0cnVjdHVyZSgpLT50eXBlSW5mbygpOwogICAgICAgICBpZiAodHlwZUluZm8uaGFzSW1wdXJl
R2V0T3duUHJvcGVydHlTbG90KCkgJiYgIXR5cGVJbmZvLm5ld0ltcHVyZVByb3BlcnR5RmlyZXNX
YXRjaHBvaW50cygpKQogICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFpbjsK
LSAgICAgICAgICAgIAorCiAgICAgICAgIEpTVmFsdWUgdiA9IGNlbGwtPnN0cnVjdHVyZSgpLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKTsKIAogICAgICAgICAvLyBJZiB3ZSBkaWRuJ3Qg
ZmluZCBzbG90QmFzZSBpbiBiYXNlJ3MgcHJvdG90eXBlIGNoYWluLCB0aGVuIGJhc2UKQEAgLTIy
NiwxMiArMjI4LDEyIEBAIGlubGluZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3IK
ICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSh2bSktPmlzRGljdGlvbmFyeSgpKSB7CiAgICAg
ICAgICAgICBhc09iamVjdChjZWxsKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoY2FsbEZyYW1l
LT52bSgpKTsKICAgICAgICAgICAgIGlmIChzbG90QmFzZSA9PSBjZWxsKQotICAgICAgICAgICAg
ICAgIHNsb3RPZmZzZXQgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pLT5nZXQoY2FsbEZyYW1lLT52bSgp
LCBwcm9wZXJ0eU5hbWUpOyAKKyAgICAgICAgICAgICAgICBzbG90T2Zmc2V0ID0gY2VsbC0+c3Ry
dWN0dXJlKHZtKS0+Z2V0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAg
fQotICAgICAgICAgICAgCisKICAgICAgICAgKytjb3VudDsKICAgICB9Ci0gICAgICAgIAorCiAg
ICAgcmV0dXJuIGNvdW50OwogfQogCkBAIC0yNDIsNyArMjQ0LDcgQEAgaW5saW5lIHNpemVfdCBu
b3JtYWxpemVQcm90b3R5cGVDaGFpbihDYQogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGlmIChi
YXNlLT5pc1Byb3h5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW52YWxpZFByb3RvdHlwZUNoYWlu
OwotICAgICAgICAgICAgCisKICAgICAgICAgSlNWYWx1ZSB2ID0gYmFzZS0+c3RydWN0dXJlKHZt
KS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSk7CiAgICAgICAgIGlmICh2LmlzTnVsbCgp
KQogICAgICAgICAgICAgcmV0dXJuIGNvdW50OwpAQCAtMjYzLDE4ICsyNjUsNDEgQEAgaW5saW5l
IGJvb2wgaXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQoSgogICAgIGZvciAoOzspIHsKICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgCisKICAgICAgICAgSlNWYWx1ZSB2ID0gc3RydWN0dXJlLT5wcm90b3R5cGVG
b3JMb29rdXAoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgaWYgKHYuaXNOdWxsKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIHN0cnVjdHVyZSA9IHYu
YXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
fQogCitpbmxpbmUgSlNJbmRleFN0cmluZyoganNJbmRleFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IHVpbnQzMl90IGluZGV4KQoreworICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzLgorICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oaW5kZXgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBqc1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKHZtKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9
IHN0cnVjdHVyZS0+Y2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKCk7CisgICAgaWYgKGVudW1lcmF0
b3IpCisgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOworCisgICAgZW51bWVyYXRvciA9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSh2
bSktPmdldFByb3BlcnR5TmFtZXNGb3JFbnVtZXJhdGlvbihiYXNlLCBlbnVtZXJhdG9yKTsKKyAg
ICBzdHJ1Y3R1cmUtPnNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7
CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gT3BlcmF0aW9uc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkocmV2aXNpb24gMTcwMjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBTdHJ1Y3R1cmVfaApAQCAtNTQsNiArNTQsNyBAQAog
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIERlZmVyR0M7CitjbGFzcyBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9wZXJ0eU5h
bWVBcnJheTsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YTsKQEAgLTc3LDcgKzc4LDcgQEAg
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU7CiAKICAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwotICAgIAorCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSwgY29uc3QgVHlwZUlu
Zm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUgPSBOb25BcnJheSwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHkgPSAwKTsKIAogICAgIH5TdHJ1Y3R1cmUoKTsKQEAgLTEzOCwxMSArMTM5
LDExIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVy
ZSA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIC8vIFRo
ZXNlIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAorICAgIC8vIFRoZXNlIHNob3VsZCBi
ZSB1c2VkIHdpdGggY2F1dGlvbi4KICAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNl
dCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwogICAgIFByb3BlcnR5T2Zmc2V0
IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAg
IHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3Rv
dHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KLSAgICAgICAg
CisKICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGlvbmFyeUtp
bmQgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CiAgICAgYm9vbCBpc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGljdGlvbmFyeUtpbmQgPT0gVW5jYWNoZWREaWN0aW9u
YXJ5S2luZDsgfQogCkBAIC0xNjEsMjAgKzE2MiwyMCBAQCBwdWJsaWM6CiAKICAgICBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgp
ICYgQWxsQXJyYXlUeXBlczsgfQogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpOyB9Ci0gICAg
ICAgIAorCiAgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuICEhKGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSAmIE1h
eUhhdmVJbmRleGVkQWNjZXNzb3JzKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgYm9vbCBhbnlP
YmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3Q7Ci0gICAgICAg
IAorCiAgICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGluZygpIGNvbnN0OwogICAgIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkgY29uc3Q7Ci0g
ICAgICAgIAorCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOyB9CiAgICAgdm9pZCBzZXRHbG9iYWxPYmplY3QoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSB7IG1fZ2xvYmFsT2JqZWN0LnNldCh2
bSwgdGhpcywgZ2xvYmFsT2JqZWN0KTsgfQotICAgICAgICAKKwogICAgIEpTVmFsdWUgc3RvcmVk
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGUuZ2V0KCk7IH0KICAgICBKU09i
amVjdCogc3RvcmVkUHJvdG90eXBlT2JqZWN0KCkgY29uc3Q7CiAgICAgU3RydWN0dXJlKiBzdG9y
ZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSBjb25zdDsKQEAgLTE4NCwxMiArMTg1LDEyIEBAIHB1Ymxp
YzoKICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oVk0mLCBKU0dsb2JhbE9iamVj
dCopIGNvbnN0OwogICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihFeGVjU3RhdGUq
KSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7Ci0gICAgICAgIAorCiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90b3R5cGUgY2hhaW4g
aW50ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwogICAgIGJvb2wgcHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgCisKICAgICBi
b29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEh
bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQotICAgICAgICAKKwogICAgIFN0cnVjdHVyZSog
cHJldmlvdXNJRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNs
YXNzSW5mbygpID09IGluZm8oKSk7CkBAIC0yMDIsNyArMjAzLDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIG91dE9mTGluZUNhcGFjaXR5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChj
aGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICAgICAgCisKICAgICAgICAgdW5zaWdu
ZWQgb3V0T2ZMaW5lU2l6ZSA9IHRoaXMtPm91dE9mTGluZVNpemUoKTsKIAogICAgICAgICBpZiAo
IW91dE9mTGluZVNpemUpCkBAIC0yMTksNyArMjIwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgQVNTRVJUKGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSk7CiAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAgICAgIAorCiAgICAgICAg
IHJldHVybiBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCk7CiAg
ICAgfQogICAgIGJvb2wgaGFzSW5saW5lU3RvcmFnZSgpIGNvbnN0CkBAIC0yNTAsMTUgKzI1MSwx
NSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAmJiBvZmZzZXQgPD0gbV9vZmZzZXQKICAgICAgICAg
ICAgICYmIChvZmZzZXQgPCBtX2lubGluZUNhcGFjaXR5IHx8IG9mZnNldCA+PSBmaXJzdE91dE9m
TGluZU9mZnNldCk7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBjb3VsZEhhdmVJbmRleGluZ0hl
YWRlcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gaGFzSW5kZXhlZFByb3BlcnRpZXMo
aW5kZXhpbmdUeXBlKCkpCiAgICAgICAgICAgICB8fCBpc1R5cGVkVmlldyhtX2NsYXNzSW5mby0+
dHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICB9Ci0gICAgCisKICAgICBib29sIGhhc0luZGV4
aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCopIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCBtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKIAog
ICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CkBAIC0yODIsNyArMjgz
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wgaGFzTm9uRW51bWVyYWJsZVByb3BlcnRp
ZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzOyB9Ci0gICAg
ICAgIAorCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChj
aGVja09mZnNldENvbnNpc3RlbmN5KCkpOwpAQCAtMjk2LDYgKzI5Nyw5IEBAIHB1YmxpYzoKICAg
ICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7IC8vIERlZmluZWQg
aW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zy
b21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAK
KyAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcihWTSYsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2FjaGVkUHJvcGVy
dHlFbnVtZXJhdG9yKCkgY29uc3Q7CisKICAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1
ZSgpCiAgICAgewogICAgICAgICBpZiAoIW1faGFzUmFyZURhdGEpCkBAIC0zNDEsMTkgKzM0NSwx
OSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZSwgbV9jbGFzc0luZm8pOwogICAgIH0KLSAgICAgICAgCisKICAgICBzdGF0aWMgcHRyZGlm
Zl90IGluZGV4aW5nVHlwZU9mZnNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCk7CiAgICAgfQogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJik7Ci0gICAgICAgIAorCiAgICAgYm9vbCB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0Jl
ZW5JbnZhbGlkYXRlZCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90cmFuc2l0aW9u
V2F0Y2hwb2ludFNldC5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKICAgICB9Ci0gICAgICAgIAorCiAg
ICAgYm9vbCB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5pc1N0aWxsVmFsaWQo
KTsKQEAgLTM4MCwyMyArMzg0LDIzIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpOwogICAgICAgICBtX3RyYW5zaXRpb25XYXRj
aHBvaW50U2V0LmFkZCh3YXRjaHBvaW50KTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgdm9pZCBu
b3RpZnlUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKICAgICAgICAg
bV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5maXJlQWxsKCk7CiAgICAgfQotICAgIAorCiAgICAg
SW5saW5lV2F0Y2hwb2ludFNldCYgdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAgICAgfQotICAg
IAorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXBC
cmllZihQcmludFN0cmVhbSYsIGNvbnN0IENTdHJpbmcmKSBjb25zdDsKLSAgICAKKwogICAgIHN0
YXRpYyB2b2lkIGR1bXBDb250ZXh0SGVhZGVyKFByaW50U3RyZWFtJik7Ci0gICAgCisKICAgICBE
RUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgpAQCAtNDA3LDcgKzQxMSw3IEBAIHByaXZh
dGU6CiAgICAgU3RydWN0dXJlKFZNJiwgY29uc3QgU3RydWN0dXJlKik7CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsKLSAgICAKKwogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJ
bXBsKFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOwogCiAgICAgLy8gVGhpcyB3aWxs
IHJldHVybiB0aGUgc3RydWN0dXJlIHRoYXQgaGFzIGEgdXNhYmxlIHByb3BlcnR5IHRhYmxlLCB0
aGF0IHByb3BlcnR5IHRhYmxlLApAQCAtNDE1LDggKzQxOSw4IEBAIHByaXZhdGU6CiAgICAgLy8g
bm9uLW51bGwgc3RydWN0dXJlLCBpdCB3aWxsIGFsc28gbG9jayB0aGUgc3RydWN0dXJlIHRoYXQg
aXQgcmV0dXJuczsgaXQgaXMgeW91ciBqb2IKICAgICAvLyB0byB1bmxvY2sgaXQuCiAgICAgdm9p
ZCBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJl
KiwgOD4mIHN0cnVjdHVyZXMsIFN0cnVjdHVyZSomLCBQcm9wZXJ0eVRhYmxlKiYpOwotICAgIAot
ICAgIHR5cGVkZWYgZW51bSB7IAorCisgICAgdHlwZWRlZiBlbnVtIHsKICAgICAgICAgTm9uZURp
Y3Rpb25hcnlLaW5kID0gMCwKICAgICAgICAgQ2FjaGVkRGljdGlvbmFyeUtpbmQgPSAxLAogICAg
ICAgICBVbmNhY2hlZERpY3Rpb25hcnlLaW5kID0gMgpAQCAtNDc3LDcgKzQ4MSw3IEBAIHByaXZh
dGU6CiAKICAgICBib29sIGlzVmFsaWQoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVDaGFpbiog
Y2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNvbnN0OwogICAgIGJvb2wgaXNWYWxpZChFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNvbnN0OwotICAgICAgICAK
KwogICAgIHZvaWQgcGluKCk7CiAKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzKCkgY29uc3QKQEAg
LTQ5MSw3ICs0OTUsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9oYXNSYXJlRGF0YSk7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KG1fcHJldmlv
dXNPclJhcmVEYXRhLmdldCgpKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgYm9vbCBjaGVja09m
ZnNldENvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFs
bG9jYXRlUmFyZURhdGEoVk0mKTsKQEAgLTUwMSw3ICs1MDUsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1
MTI7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50ID0gMzsKLSAgICAKKwogICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgcHJvcGVybHkgYWxp
Z25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAnU3RydWN0dXJlJwogICAgIC8vIHBhcnQgb2Yg
dGhlIG9iamVjdC4KICAgICBTdHJ1Y3R1cmVJREJsb2IgbV9ibG9iOwpAQCAtNTMxLDkgKzUzNSw5
IEBAIHByaXZhdGU6CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAKICAgICB1aW50OF90
IG1faW5saW5lQ2FwYWNpdHk7Ci0gICAgCisKICAgICBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7
Ci0gICAgCisKICAgICB1bnNpZ25lZCBtX2RpY3Rpb25hcnlLaW5kIDogMjsKICAgICBib29sIG1f
aXNQaW5uZWRQcm9wZXJ0eVRhYmxlIDogMTsKICAgICBib29sIG1faGFzR2V0dGVyU2V0dGVyUHJv
cGVydGllcyA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2
ICsxNDcsMjEgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIFN0cnVjdHVyZQogICAg
IHJldHVybiByYXJlRGF0YSgpLT5lbnVtZXJhdGlvbkNhY2hlKCk7CiB9CiAKK2lubGluZSB2b2lk
IFN0cnVjdHVyZTo6c2V0Q2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIEFTU0VSVCghaXNEaWN0aW9uYXJ5
KCkpOworICAgIGlmICghbV9oYXNSYXJlRGF0YSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2
bSk7CisgICAgcmFyZURhdGEoKS0+c2V0Q2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKHZtLCB0aGlz
LCBlbnVtZXJhdG9yKTsKK30KKworaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3Ry
dWN0dXJlOjpjYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmICghbV9o
YXNSYXJlRGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJhcmVEYXRh
KCktPmNhY2hlZFByb3BlcnR5RW51bWVyYXRvcigpOworfQorCiBpbmxpbmUgSlNWYWx1ZSBTdHJ1
Y3R1cmU6OnByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBj
b25zdAogewogICAgIGlmIChpc09iamVjdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzAyMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwog
Y2xhc3MgU3RydWN0dXJlOwogCkBAIC01OCw2ICs1OSw5IEBAIHB1YmxpYzoKICAgICBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7CiAgICAgdm9pZCBzZXRFbnVtZXJh
dGlvbkNhY2hlKFZNJiwgY29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogdmFsdWUpOwogCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9w
ZXJ0eUVudW1lcmF0b3IoKTsKKyAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcihW
TSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdmFs
dWUpOworCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTY5LDYgKzcz
LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwog
ICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdy
aXRlQmFycmllcjxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7Cisg
ICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNoZWRQcm9wZXJ0
eUVudW1lcmF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYgKzI1Niw4IEBA
IFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBzdHJpbmdTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIG5vdEFuT2JqZWN0U3RydWN0dXJlLnNldCgqdGhpcywgSlNOb3RBbk9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5TmFt
ZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5TmFtZUVudW1l
cmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBlbnVtZXJhdG9yRW50cnlTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBhcGlXcmFwcGVyU3RydWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdyYXBwZXI6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBKU1Njb3BlU3RydWN0dXJl
LnNldCgqdGhpcywgSlNTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzAyMTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
LDEzICs2LDEzIEBACiAgKiBhcmUgbWV0OgogICoKICAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgogICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCiAgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCiAg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECkBAIC0xMjcsNyArMTI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAsIGluY3JlbWVudCgwLjApCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICB2b2lkIHJlc2V0KCkKICAgICAgICAgewogICAgICAgICAgICAgb2Zmc2V0
ID0gTG9jYWxUaW1lT2Zmc2V0KCk7CkBAIC0xOTIsNyArMTkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIHRoYW4gdGhlIG9sZCBzaW5nbGV0b24gQVBJU2hhcmVkIFZNIGNyZWF0ZWQg
Zm9yIHVzZSBieQogICAgICAgICAvLyB0aGUgb3JpZ2luYWwgQVBJLgogICAgICAgICBlbnVtIFZN
VHlwZSB7IERlZmF1bHQsIEFQSUNvbnRleHRHcm91cCwgQVBJU2hhcmVkIH07Ci0gICAgICAgIAor
CiAgICAgICAgIHN0cnVjdCBDbGllbnREYXRhIHsKICAgICAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZpcnR1YWwgfkNsaWVudERhdGEoKSA9IDA7CiAgICAgICAgIH07CkBAIC0yMDgsNyArMjA4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIH5WTSgpOwog
CiAgICAgICAgIHZvaWQgbWFrZVVzYWJsZUZyb21NdWx0aXBsZVRocmVhZHMoKSB7IGhlYXAubWFj
aGluZVRocmVhZHMoKS5tYWtlVXNhYmxlRnJvbU11bHRpcGxlVGhyZWFkcygpOyB9Ci0gICAgICAg
IAorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEpTTG9jaz4gbV9hcGlMb2NrOwogCkBA
IC0yMjIsNyArMjIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFRoZSBoZWFwIHNo
b3VsZCBiZSBqdXN0IGFmdGVyIGV4ZWN1dGFibGVBbGxvY2F0b3IgYW5kIGJlZm9yZSBvdGhlciBt
ZW1iZXJzIHRvIGVuc3VyZSB0aGF0IGl0J3MKICAgICAgICAgLy8gZGVzdHJ1Y3RlZCBhZnRlciBh
bGwgdGhlIG9iamVjdHMgdGhhdCByZWZlcmVuY2UgaXQuCiAgICAgICAgIEhlYXAgaGVhcDsKLSAg
ICAgICAgCisKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgT3duUHRyPERGRzo6TG9uZ0xp
dmVkU3RhdGU+IGRmZ1N0YXRlOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpAQCAtMjYxLDYg
KzI2MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJp
bmdTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0
dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVj
dHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlOYW1lRW51bWVyYXRvclN0
cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZW51bWVyYXRvckVudHJ5U3RydWN0
dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7CiAg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IEpTU2NvcGVTdHJ1Y3R1cmU7CkBAIC0zNDUsNyArMzQ3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywg
Z2VuZXJhdG9yKTsKICAgICAgICAgfQogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBnZXRIb3N0
RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyk7Ci0gICAgICAgIAorCiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcz4gYXJpdHlDaGVja0Zh
aWxSZXR1cm5UaHVua3M7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPENvbW1vblNsb3dQYXRoczo6QXJpdHlDaGVja0RhdGE+IGFyaXR5Q2hlY2tEYXRhOwpA
QCAtMzc5LDcgKzM4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUq
LCBKU09iamVjdCopOwotICAgICAgICAKKwogICAgICAgICB2b2lkKiBzdGFja1BvaW50ZXJBdFZN
RW50cnkoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrUG9pbnRlckF0Vk1FbnRyeTsgfQogICAgICAg
ICB2b2lkIHNldFN0YWNrUG9pbnRlckF0Vk1FbnRyeSh2b2lkKik7CiAKQEAgLTQyMSwxMiArNDIz
LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkKiBvc3JFeGl0SnVtcERlc3RpbmF0
aW9uOwogICAgICAgICBWZWN0b3I8U2NyYXRjaEJ1ZmZlcio+IHNjcmF0Y2hCdWZmZXJzOwogICAg
ICAgICBzaXplX3Qgc2l6ZU9mTGFzdFNjcmF0Y2hCdWZmZXI7Ci0gICAgICAgIAorCiAgICAgICAg
IFNjcmF0Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHNpemUgPiBzaXplT2ZMYXN0U2NyYXRjaEJ1
ZmZlcikgewogICAgICAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBhIE5eMiBtZW1vcnkg
dXNhZ2UgcGF0aG9sb2d5IGJ5IGVuc3VyaW5nCiAgICAgICAgICAgICAgICAgLy8gdGhhdCBhdCB3
b3JzdCwgd2UgZ2V0IGEgZ2VvbWV0cmljIHNlcmllcywgbWVhbmluZyB0aGF0IHRoZQpAQCAtNDUx
LDcgKzQ1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4g
c3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVkT2JqZWN0czsKIAogICAgICAgICBMb2NhbFRpbWVP
ZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKLSAgICAgICAgCisKICAgICAgICAgU3Ry
aW5nIGNhY2hlZERhdGVTdHJpbmc7CiAgICAgICAgIGRvdWJsZSBjYWNoZWREYXRlU3RyaW5nVmFs
dWU7CiAKQEAgLTQ4NCw3ICs0ODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOwogCiAjaWYgRU5BQkxF
KEdDX1ZBTElEQVRJT04pCi0gICAgICAgIGJvb2wgaXNJbml0aWFsaXppbmdPYmplY3QoKSBjb25z
dDsgCisgICAgICAgIGJvb2wgaXNJbml0aWFsaXppbmdPYmplY3QoKSBjb25zdDsKICAgICAgICAg
dm9pZCBzZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhjb25zdCBDbGFzc0luZm8qKTsKICNlbmRp
ZgogCkBAIC01MDEsMjAgKzUwMywyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUNh
Y2hlKiBjb2RlQ2FjaGUoKSB7IHJldHVybiBtX2NvZGVDYWNoZS5nZXQoKTsgfQogCiAgICAgICAg
IHZvaWQgd2FpdEZvckNvbXBpbGF0aW9uc1RvQ29tcGxldGUoKTsKLSAgICAgICAgCisKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNjYXJkQWxsQ29kZSgpOwogCiAgICAgICAgIHZv
aWQgcmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYs
IFdhdGNocG9pbnQqKTsKICAgICAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBp
dCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgCisKICAgICAg
ICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJsZXMoKSB7IHJldHVybiBtX2J1
aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIENsZWFy
RXhjZXB0aW9uU2NvcGU7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVBbGxvY2F0aW9u
U2NvcGU7Ci0gICAgICAgIAorCiAgICAgICAgIFZNKFZNVHlwZSwgSGVhcFR5cGUpOwogICAgICAg
ICBzdGF0aWMgVk0qJiBzaGFyZWRJbnN0YW5jZUludGVybmFsKCk7CiAgICAgICAgIHZvaWQgY3Jl
YXRlTmF0aXZlVGh1bmsoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233490</attachid>
            <date>2014-06-20 17:33:28 -0700</date>
            <delta_ts>2014-06-24 16:46:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140620173306.patch</filename>
            <type>text/plain</type>
            <size>73842</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwMjI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxNC0wNi0yMCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhZGRzIGEgbmV3IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciB0aGF0IGhhbmRsZXMgdGhlIGNh
Y2hpbmcgb2YgYSBzZXQgb2YgcHJvcGVydHkgbmFtZXMgCisgICAgICAgIGZvciBhbiBvYmplY3Qg
d2l0aCBhIHBhcnRpY3VsYXIgU3RydWN0dXJlLiBJZiB0aGUgb2JqZWN0J3MgU3RydWN0dXJlIG9y
IGl0cyBwcm90b3R5cGUgY2hhaW4gY2hhbmdlcywgCisgICAgICAgIHRoZSBlbnVtZXJhdG9yIHdp
bGwgYmUgY29udmVydGVkIHRvIGEgZnVsbHkgZ2VuZXJpYyBtb2RlIHdoZXJlIGl0IHdpbGwgY2hl
Y2sgaGFzUHJvcGVydHkgZm9yIGVhY2ggCisgICAgICAgIG9mIGl0cyByZW1haW5pbmcgY2FjaGVk
IHByb3BlcnR5IG5hbWVzLgorIAorICAgICAgICBJdCBhbHNvIGFkZHMgYSBudW1iZXIgb2YgbmV3
IGJ5dGVjb2RlcyB0byBzdXBwb3J0IG1vcmUgZXhwbGljaXQgaXRlcmF0aW9uIG9mIHByb3BlcnR5
IG5hbWVzLgorICAgICAgICAKKyAgICAgICAgVGhlIGNoYW5nZXMgdG8gdGhlIGJ5dGVjb2RlIGdl
bmVyYXRvciBhbHNvIGluY2x1ZGUgZXhwbGljaXQgZHVwbGljYXRpb24gb2YgdGhlIGZvci1pbiBs
b29wIGJvZHkgCisgICAgICAgIHRvIHNlZ3JlZ2F0ZSBpdGVyYXRpb24gb3ZlciBpbmRleGVkIHBy
b3BlcnR5IG5hbWVzLCBTdHJ1Y3R1cmUtYmFzZWQgcHJvcGVydHkgbmFtZXMgKGkuZS4gcHJvcGVy
dHkgCisgICAgICAgIG5hbWVzIHN0b3JlZCBkaXJlY3RseSBpbiB0aGUgU3RydWN0dXJlKSwgYW5k
IGdlbmVyaWMgcHJvcGVydHkgbmFtZXMgKGkuZS4gcHJvcGVydGllcyBhYm91dCB3aGljaCAKKyAg
ICAgICAgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgd2l0aCByZWdhcmQgdG8gdGhlIG5hbWUgb2Yg
dGhlIHByb3BlcnR5LCB0aGUgbG9jYXRpb24gb2YgdGhlIHByb3BlcnR5LCAKKyAgICAgICAgb3Ig
ZXZlbiB3aGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IHN0aWxsIGNvbnRhaW5zIHRoYXQgcHJvcGVy
dHkpLiBTcGxpdHRpbmcgdGhlIGxvb3AgaW50byBpdHMgCisgICAgICAgIGxvZ2ljYWwgY29tcG9u
ZW50cyBhbmQgdGhlbiBleHBsaWNpdGx5IGl0ZXJhdGluZyB1cCB0aGUgcHJvdG90eXBlIGNoYWlu
IGFsbG93cyB0aGUgcnVudGltZSBtb3JlIAorICAgICAgICBvcHBvcnR1bml0aWVzIHRvIG9wdGlt
aXplIHRoZSBvdmVyYWxsIGl0ZXJhdGlvbi4gCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlQmFz
aWNCbG9jay5jcHA6CisgICAgICAgIChKU0M6OmlzQnJhbmNoKToKKyAgICAgICAgKiBieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5o
OgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNo
SW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9w
SW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVz
aFN0cnVjdHVyZUZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRDaGVja1Byb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV4dEluZGV4ZWRQcm9wZXJ0eU5hbWUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5leHRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5leHRHZW5lcmljUHJvcGVydHlOYW1l
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0RW51bWVyYXRvckVu
dHJ5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRQcm90b3R5cGUp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAo
SlNDOjpPcHRpbWl6ZWRGb3JJblNjb3BlOjpPcHRpbWl6ZWRGb3JJblNjb3BlKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmlkZW50aWZpZXJGb3JC
b3VuZExvY2FsKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcik6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6
OmVudW1lcmF0b3JFbnRyeSk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgor
ICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc206CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpnZXRQcm9wZXJ0eU5hbWVzRm9yRW51bWVyYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlND
ZWxsLmg6CisgICAgICAgICogcnVudGltZS9KU0luZGV4U3RyaW5nLmg6IEFkZGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0UHJv
cGVydHlOYW1lc0ZvckVudW1lcmF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6
CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpF
bnVtZXJhdG9yRW50cnk6OmNsb25lKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpF
bnVtZXJhdG9yRW50cnkpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpkZXN0cm95KToKKyAgICAg
ICAgKEpTQzo6RW51bWVyYXRvckVudHJ5Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6
RW51bWVyYXRvckVudHJ5OjphZGRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6RW51bWVyYXRvckVudHJ5OjphZGRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChK
U0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb252ZXJ0VG9HZW5lcmljRW51bWVyYXRpb24pOgorICAg
ICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGVzdHJveSk6
CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6d2lsbFN0YXJ0QXBwZW5k
aW5nRm9yT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpz
ZXRJbmRleGluZ0xpbWl0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjphcHBlbmRTdHJ1Y3R1cmVJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjphcHBlbmRHZW5lcmljSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpFbnVtZXJhdG9yRW50cnk6OnNldE5leHQpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50
cnk6Om5leHQpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OnNldFN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6c2V0T2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6RW51bWVyYXRvckVudHJ5OjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9y
RW50cnk6Om9iamVjdCk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6c2V0SW5kZXhp
bmdMaW1pdCk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6aW5kZXhpbmdMaW1pdCk6
CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6aGFzTmV4dEluZGV4ZWRQcm9wZXJ0eU5h
bWUpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6Om5leHRJbmRleGVkUHJvcGVydHlO
YW1lKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpuZXh0U3RydWN0dXJlUHJvcGVy
dHlOYW1lKToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpuZXh0R2VuZXJpY1Byb3Bl
cnR5TmFtZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp0YWtl
TmV4dEVudHJ5KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjdXJy
ZW50RW50cnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkUHJvcGVy
dHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hl
ZFByb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6Cisg
ICAgICAgIChKU0M6OmpzSW5kZXhTdHJpbmcpOgorICAgICAgICAoSlNDOjpqc1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0
Q2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYWNo
ZWRQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTQtMDYtMjAgIE1hcmsgSGFobmVuYmVyZyAg
PG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSByMTY5OTAzIHRvIHRoZSBi
cmFuY2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcwMjE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwOSw2ICs4MDksOCBAQAogCQkyQTRCQjdG
MzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEw
RkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZD
MjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcCAqLzsgfTsKIAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJB
NjNCQzQwMTk0QTM5OUUwMDg2MDNDOCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE2M0JDM0UxOTRB
Mzk5RTAwODYwM0M4IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi87IH07CisJCTJB
NjNCQzQxMTk0QTM5OUUwMDg2MDNDOCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNjNCQzNGMTk0QTM5
OUUwMDg2MDNDOCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgfTsKIAkJMkE2ODI5
NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAv
KiBDb3B5V3JpdGVCYXJyaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkE2RjQ2MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNkY0NjI1
MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE3QTU4RUYxODA4QTRDNDAwMjBCREY3IC8q
IERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovOyB9OwpAQCAtODE2
LDYgKzgxOCw3IEBACiAJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0
eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQTgzNjM4NDE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBODM2Mzg5
MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2Mzg3MThEN0QwRkUwMDAw
RUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLzsgfTsKIAkJMkE4MzYzOEExOEQ3
RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODM2Mzg4MThEN0QwRkUwMDAwRUJDQyAv
KiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkE4NTQzRDYxOTUyNTkzMDAwRDMzNDkwIC8qIEpTSW5kZXhT
dHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJB
ODU0M0Q1MTk1MjU5MzAwMEQzMzQ5MCAvKiBKU0luZGV4U3RyaW5nLmggKi87IH07CiAJCTJBODgw
Njc4MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTg4MDY3NjE5MTA3RDU1MDBD
QjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovOyB9OwogCQkyQTg4MDY3OTE5MTA3
RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODgwNjc3MTkxMDdENTUwMENCMEJCQiAvKiBE
RkdGdW5jdGlvbldoaXRlbGlzdC5oICovOyB9OwogCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQUFBQTMxMDE4QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI5NDIs
NiArMjk0NSw4IEBACiAJCTJBNEJCN0YyMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFuYWdlZFZh
bHVlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE0RUM5MDkxODYw
RDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyQTRFQzkwQTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVy
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllckJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTYzQkMzRTE5NEEzOTlFMDA4
NjAzQzggLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBNjNCQzNGMTk0QTM5OUUwMDg2MDNDOCAvKiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
NjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkE2RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcE9wZXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVm
ZXJHQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlckdDLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NDksNiArMjk1NCw3IEBACiAJCTJB
ODM2Mzg0MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE4MzYzODcxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1
bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJBODM2Mzg4MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxHQ0FjdGl2aXR5Q2FsbGJh
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkE4NTQzRDUxOTUyNTkzMDAwRDMz
NDkwIC8qIEpTSW5kZXhTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNJbmRleFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTg4MDY3NjE5
MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwOyBwYXRoID0g
ZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkE4ODA2NzcxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Z1bmN0aW9uV2hpdGVsaXN0Lmg7IHBh
dGggPSBkZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkFBQUEzMTAxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJREJsb2IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5MzYsNiArNDk0Miw5IEBACiAJCQkJMTQyMEJFN0ExMEFB
NkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQlBN0RDQjc3OTEyRTNEOTA1MDA5
MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQzJCNkQ3NTIxOEEzMzc5MzAwNEE5MzAx
IC8qIFdyaXRlQmFycmllcklubGluZXMuaCAqLywKKwkJCQkyQTYzQkMzRTE5NEEzOTlFMDA4NjAz
QzggLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCAqLywKKwkJCQkyQTYzQkMzRjE5NEEz
OTlFMDA4NjAzQzggLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggKi8sCisJCQkJMkE4NTQz
RDUxOTUyNTkzMDAwRDMzNDkwIC8qIEpTSW5kZXhTdHJpbmcuaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02MDE2LDYgKzYwMjUs
NyBAQAogCQkJCUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZH
QXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcxNENBNTE2RUE5MkYyMDBGM0VC
RUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MkE2M0JDNDExOTRBMzk5RTAwODYwM0M4IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdC
YXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwQjA4MzMxN0EwQjc5QjAw
REFGMTRCIC8qIERGR0JpbmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTIxLDYgKzY1
MzEsNyBAQAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NEIwRTE2RjVDRDAwQjM0NDYwIC8qIFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMkE4NTQzRDYxOTUyNTkzMDAwRDMzNDkwIC8qIEpTSW5kZXhTdHJp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDUyQzM1MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJz
ZXJBcmVuYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDQ0FFNDUxNkQwQ0Y3NDAwRDBDNjVCIC8q
IFBhcnNlckVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdGMTgyNTE2NDE5MkM3MDA2NDBB
NDcgLyogUGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzU5NCw2ICs3NjA1LDcgQEAK
IAkJCQkxNDdGMzlDNjEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZVByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyogRGVidWdnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0
aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyQTYzQkM0MDE5NEEzOTlFMDA4NjAzQzgg
LyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1
OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE3
MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMSBAQCBzdGF0aWMgYm9vbCBpc0Jy
YW5jaChPcGNvZGVJRCBvcGNvZGVJRCkKICAgICBjYXNlIG9wX2dldF9wbmFtZXM6CiAgICAgY2Fz
ZSBvcF9uZXh0X3BuYW1lOgogICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgorICAgIGNh
c2Ugb3BfY2hlY2tfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9wX25leHRfaW5kZXhl
ZF9wbmFtZToKKyAgICBjYXNlIG9wX25leHRfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3Bf
bmV4dF9nZW5lcmljX3BuYW1lOgorICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX2VudHJ5Ogog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5qc29uCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsMTUgQEAK
ICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX3ByaW1pdGl2ZSIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X3BuYW1lcyIsICJsZW5ndGgiIDogNiB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbmV4dF9wbmFtZSIsICJsZW5ndGgiIDogNyB9
LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IiLCAi
bGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9f
aW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9jaGVja19wcm9wZXJ0eV9lbnVtZXJhdG9yIiwgImxlbmd0aCIgOiA1IH0sCisgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9uZXh0X2luZGV4ZWRfcG5hbWUiLCAibGVuZ3RoIiA6IDQgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25leHRfc3RydWN0dXJlX3BuYW1lIiwgImxlbmd0aCIg
OiA0IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9uZXh0X2dlbmVyaWNfcG5hbWUiLCAi
bGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25leHRfZW51bWVyYXRv
cl9lbnRyeSIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0
X3Byb3RvdHlwZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cmVzb2x2ZV9zY29wZSIsICJsZW5ndGgiIDogNiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfZ2V0X2Zyb21fc2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX3B1dF90b19zY29wZSIsICJsZW5ndGgiIDogNyB9LApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE3MDIx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJ
RCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBjYXNlIG9wX2NoZWNrX3Byb3BlcnR5X2VudW1lcmF0b3I6CiAgICAgY2FzZSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDoKICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKICAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKQEAgLTExNiw2ICsxMTcsMTMgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0
KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ug
b3BfZ2V0X3Byb3RvdHlwZToKKyAgICBjYXNlIG9wX25leHRfZ2VuZXJpY19wbmFtZToKKyAgICBj
YXNlIG9wX25leHRfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfbmV4dF9pbmRleGVkX3Bu
YW1lOgorICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAg
Y2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9j
b25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKQEAgLTE0Nyw2ICsxNTUsNyBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfZW50cnk6
CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
bDoKICAgICBjYXNlIG9wX2luOgpAQCAtMjQ0LDYgKzI1Myw3IEBAIHZvaWQgY29tcHV0ZURlZnNG
b3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwogICAgIHN3aXRjaCAob3Bj
b2RlSUQpIHsKICAgICAvLyBUaGVzZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2FzZSBv
cF9jaGVja19wcm9wZXJ0eV9lbnVtZXJhdG9yOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29u
c3Q6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9wdXNo
X25hbWVfc2NvcGU6CkBAIC0zNjYsNiArMzc2LDE0IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2Fz
ZSBvcF9kZWxfYnlfaWQ6CiAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgIGNhc2Ugb3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6
CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgY2FzZSBvcF9uZXh0X2luZGV4ZWRf
cG5hbWU6CisgICAgY2FzZSBvcF9uZXh0X3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX25l
eHRfZ2VuZXJpY19wbmFtZToKKyAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9lbnRyeToKKyAg
ICBjYXNlIG9wX2dldF9wcm90b3R5cGU6CiAgICAgY2FzZSBvcF91bnNpZ25lZDogewogICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMTcwMjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTAsMTkgKzEzOTAsMjYgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcgogCiBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IG1f
Zm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpID4gMDsgaS0tKSB7Ci0gICAgICAgIEZvckluQ29u
dGV4dCYgY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaSAtIDFdOwotICAgICAgICBpZiAo
Y29udGV4dC5wcm9wZXJ0eVJlZ2lzdGVyID09IHByb3BlcnR5KSB7Ci0gICAgICAgICAgICBlbWl0
T3Bjb2RlKG9wX2dldF9ieV9wbmFtZSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNl
LT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+
aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5leHBl
Y3RlZFN1YnNjcmlwdFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChjb250ZXh0Lml0ZXJSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5pbmRleFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBkc3Q7CisgICAgZm9yIChzaXplX3QgaSA9IG1fb3B0aW1pemVkRm9y
SW5TY29wZXMuc2l6ZSgpOyBpID4gMDsgaS0tKSB7CisgICAgICAgIE9wdGltaXplZEZvckluU2Nv
cGUmIHNjb3BlID0gbV9vcHRpbWl6ZWRGb3JJblNjb3Blc1tpIC0gMV07CisgICAgICAgIGlmIChz
Y29wZS5sb2NhbC5nZXQoKSAhPSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIHN3aXRjaCAoc2NvcGUudHlwZSkgeworICAgICAgICBjYXNlIE9wdGltaXplZEZvcklu
U2NvcGU6OkluZGV4ZWRGb3JJblNjb3BlOgorICAgICAgICBjYXNlIE9wdGltaXplZEZvckluU2Nv
cGU6OlN0cnVjdHVyZUZvckluU2NvcGU6CisgICAgICAgICAgICAvLyBUT0RPOiBVc2UgSlNJbmRl
eFN0cmluZworICAgICAgICAgICAgLy8gVE9ETzogVXNlIEpTUHJvcGVydHlOYW1lU3RyaW5nCisg
ICAgICAgICAgICBwcm9wZXJ0eSA9IHNjb3BlLmluZGV4LmdldCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBicmVhazsK
ICAgICB9CisKICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJh
eVByb2ZpbGUoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2Zp
bGVkT3Bjb2RlKG9wX2dldF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxs
KGRzdCkpOwpAQCAtMjUxNSw0ICsyNTIyLDEyNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0RW51bWVyYXRpb24oCiAgICAgZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKIH0K
IAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKGNvbnN0IElk
ZW50aWZpZXIqIGJvdW5kTG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4KQoreworICAgIGlmICghYm91
bmRMb2NhbCkKKyAgICAgICAgcmV0dXJuOworICAgIExvY2FsIGxvY2FsID0gdGhpcy0+bG9jYWwo
KmJvdW5kTG9jYWwpOworICAgIEFTU0VSVChsb2NhbC5nZXQoKSk7CisgICAgT3B0aW1pemVkRm9y
SW5TY29wZSBuZXdTY29wZShPcHRpbWl6ZWRGb3JJblNjb3BlOjpJbmRleGVkRm9ySW5TY29wZSwg
bG9jYWwuZ2V0KCksIGluZGV4KTsKKyAgICBtX29wdGltaXplZEZvckluU2NvcGVzLmFwcGVuZChu
ZXdTY29wZSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4ZWRGb3JJblNj
b3BlKGNvbnN0IElkZW50aWZpZXIqIGJvdW5kTG9jYWwpCit7CisgICAgaWYgKCFib3VuZExvY2Fs
KQorICAgICAgICByZXR1cm47CisgICAgbV9vcHRpbWl6ZWRGb3JJblNjb3Blcy5yZW1vdmVMYXN0
KCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3Bl
KGNvbnN0IElkZW50aWZpZXIqIGJvdW5kTG9jYWwsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBpZiAoIWJvdW5kTG9jYWwpCisgICAgICAgIHJldHVybjsKKyAgICBMb2NhbCBsb2Nh
bCA9IHRoaXMtPmxvY2FsKCpib3VuZExvY2FsKTsKKyAgICBBU1NFUlQobG9jYWwuZ2V0KCkpOwor
ICAgIE9wdGltaXplZEZvckluU2NvcGUgbmV3U2NvcGUoT3B0aW1pemVkRm9ySW5TY29wZTo6U3Ry
dWN0dXJlRm9ySW5TY29wZSwgbG9jYWwuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgbV9vcHRp
bWl6ZWRGb3JJblNjb3Blcy5hcHBlbmQobmV3U2NvcGUpOworfQorCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGNvbnN0IElkZW50aWZpZXIqIGJvdW5kTG9j
YWwpCit7CisgICAgaWYgKCFib3VuZExvY2FsKQorICAgICAgICByZXR1cm47CisgICAgbV9vcHRp
bWl6ZWRGb3JJblNjb3Blcy5yZW1vdmVMYXN0KCk7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5KQoreworICAgIGVtaXRP
cGNvZGUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvckVu
dHJ5LT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBpKQoreworICAgIGVtaXRPcGNvZGUob3BfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
aS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdENoZWNrUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVy
SUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSwgTGFiZWwqIGJyZWFr
VGFyZ2V0KQoreworICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKKwor
ICAgIGVtaXRPcGNvZGUob3BfY2hlY2tfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChlbnVtZXJhdG9yLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZW51bWVy
YXRvckVudHJ5LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYnJlYWtUYXJn
ZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOworfQorCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5leHRJbmRleGVkUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5LCBMYWJlbCogdG9wT2ZMb29wKQor
eworICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKKworICAgIGVtaXRP
cGNvZGUob3BfbmV4dF9pbmRleGVkX3BuYW1lKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvckVudHJ5
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodG9wT2ZMb29wLT5iaW5kKGJl
Z2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5leHRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExhYmVsKiB0b3BP
Zkxvb3ApCit7CisgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworCisg
ICAgZW1pdE9wY29kZShvcF9uZXh0X3N0cnVjdHVyZV9wbmFtZSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1l
cmF0b3JFbnRyeS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRvcE9mTG9v
cC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGRzdDsK
K30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0R2VuZXJpY1Byb3Bl
cnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSwgTGFi
ZWwqIHRvcE9mTG9vcCkKK3sKKyAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXpl
KCk7CisKKyAgICBlbWl0T3Bjb2RlKG9wX25leHRfZ2VuZXJpY19wbmFtZSk7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGVudW1lcmF0b3JFbnRyeS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRv
cE9mTG9vcC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgcmV0dXJu
IGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0RW51bWVy
YXRvckVudHJ5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCog
ZW51bWVyYXRvciwgTGFiZWwqIHRvcE9mTG9vcCkKK3sKKyAgICBzaXplX3QgYmVnaW4gPSBpbnN0
cnVjdGlvbnMoKS5zaXplKCk7CisKKyAgICBlbWl0T3Bjb2RlKG9wX25leHRfZW51bWVyYXRvcl9l
bnRyeSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChlbnVtZXJhdG9yLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodG9w
T2ZMb29wLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICByZXR1cm4g
ZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFByb3RvdHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpCit7CisgICAgZW1pdE9wY29kZShv
cF9nZXRfcHJvdG90eXBlKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgcmV0dXJu
IGRzdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lv
biAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsMjQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eVJlZ2lzdGVyOwogICAg
IH07CiAKKyAgICBzdHJ1Y3QgT3B0aW1pemVkRm9ySW5TY29wZSB7CisgICAgICAgIGVudW0gT3B0
aW1pemVkRm9ySW5TY29wZVR5cGUgeworICAgICAgICAgICAgSW5kZXhlZEZvckluU2NvcGUsCisg
ICAgICAgICAgICBTdHJ1Y3R1cmVGb3JJblNjb3BlCisgICAgICAgIH07CisKKyAgICAgICAgT3B0
aW1pemVkRm9ySW5TY29wZShPcHRpbWl6ZWRGb3JJblNjb3BlVHlwZSB0eXBlLCBSZWdpc3RlcklE
KiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpCisgICAgICAgICAgICA6IHR5cGUodHlwZSkKKyAg
ICAgICAgICAgICwgbG9jYWwobG9jYWwpCisgICAgICAgICAgICAsIGluZGV4KGluZGV4KQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBPcHRpbWl6ZWRGb3JJblNjb3BlVHlwZSB0eXBl
OworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWw7CisgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBpbmRleDsKKyAgICB9OworCiAgICAgc3RydWN0IFRyeURhdGEgewogICAgICAgICBS
ZWZQdHI8TGFiZWw+IHRhcmdldDsKICAgICAgICAgdW5zaWduZWQgdGFyZ2V0U2NvcGVEZXB0aDsK
QEAgLTQxMSw2ICs0MjksMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRHZXRQcm9wZXJ0eU5hbWVzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwg
UmVnaXN0ZXJJRCogaSwgUmVnaXN0ZXJJRCogc2l6ZSwgTGFiZWwqIGJyZWFrVGFyZ2V0KTsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBSZWdpc3Rl
cklEKiBpdGVyLCBMYWJlbCogdGFyZ2V0KTsKIAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0
UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAg
ICAgIHZvaWQgZW1pdENoZWNrUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSwgTGFiZWwq
IGJyZWFrVGFyZ2V0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRJbmRleGVkUHJvcGVy
dHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5LCBMYWJl
bCogdG9wT2ZMb29wKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExh
YmVsKiB0b3BPZkxvb3ApOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dEdlbmVyaWNQcm9w
ZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExh
YmVsKiB0b3BPZkxvb3ApOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dEVudW1lcmF0b3JF
bnRyeShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGVudW1l
cmF0b3IsIExhYmVsKiB0b3BPZkxvb3ApOworCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRQ
cm90b3R5cGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKwogICAgICAgICB2
b2lkIGVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7CiAKICAgICAgICAgLy8gU3RhcnQg
YSB0cnkgYmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KQEAgLTQ1MSw2ICs0
ODAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNr
LnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJ
blNjb3BlKGNvbnN0IElkZW50aWZpZXIqIGJvdW5kTG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4KTsK
KyAgICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShjb25zdCBJZGVudGlmaWVyKiBib3Vu
ZExvY2FsKTsKKyAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShjb25zdCBJZGVu
dGlmaWVyKiBib3VuZExvY2FsLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOworICAgICAgICB2
b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoY29uc3QgSWRlbnRpZmllciogYm91bmRMb2NhbCk7
CisKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7
CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYp
OwogCkBAIC02NDksNiArNjgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxD
b250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Njb3BlQ29udGV4
dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250ZXh0U3RhY2s7
CiAgICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9ySW5Db250ZXh0U3RhY2s7CisgICAg
ICAgIFZlY3RvcjxPcHRpbWl6ZWRGb3JJblNjb3BlPiBtX29wdGltaXplZEZvckluU2NvcGVzOwog
ICAgICAgICBWZWN0b3I8VHJ5Q29udGV4dD4gbV90cnlDb250ZXh0U3RhY2s7CiAgICAgICAgIFZl
Y3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFJlZ2lzdGVySUQ+LCBjb25zdCBEZWNvbnN0cnVjdGlvblBh
dHRlcm5Ob2RlKj4+IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRlcnM7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAkocmV2aXNpb24gMTcwMjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAwLDcgKzE4MDAsMTk3
IEBAIHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvckluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIExhYmVsU2NvcGVQ
dHIgb3V0ZXJTY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3Ap
OworCisgICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1lbnRMb2NhdGlvbigpKSB7CisgICAgICAg
IGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4g
c3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJz
dExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworCisgICAgY29uc3Qg
SWRlbnRpZmllciogYm91bmRMb2NhbCA9IHRoaXMtPmlkZW50aWZpZXJGb3JCb3VuZExvY2FsKGdl
bmVyYXRvcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3Bl
cnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworCisg
ICAgUmVmUHRyPExhYmVsPiBvdXRlckxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwor
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5leHRFbnRyeSA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yRW50cnkobmV4dEVudHJ5Lmdl
dCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBvdXRlckxvb3BTdGFydC5nZXQoKSk7
CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKG91dGVyU2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworCisg
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChvdXRlckxvb3BTdGFydC5nZXQoKSk7CisgICAgZ2VuZXJh
dG9yLmVtaXRMb29wSGludCgpOworCisKKyAgICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AKKyAg
ICB7CisgICAgICAgIExhYmVsU2NvcGVQdHIgaW5kZXhlZEl0ZXJhdGlvblNjb3BlID0gZ2VuZXJh
dG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsZW5ndGggPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7
CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKGxlbmd0aC5nZXQo
KSwgbmV4dEVudHJ5LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGkuZ2V0KCks
IGpzTnVtYmVyKDApKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wKG9w
X2xlc3MsIHJlc3VsdC5nZXQoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpLAorICAgICAgICAgICAg
T3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6Om51bWJlclR5cGVJc0ludDMyKCksIFJlc3VsdFR5cGU6
Om51bWJlclR5cGVJc0ludDMyKCkpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxz
ZShyZXN1bHQuZ2V0KCksIGluZGV4ZWRJdGVyYXRpb25TY29wZS0+YnJlYWtUYXJnZXQoKSk7CisK
KyAgICAgICAgUmVmUHRyPExhYmVsPiBpbm5lckxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGlubmVyTG9vcFN0YXJ0LmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOworCisgICAgICAgIGdlbmVyYXRvci5l
bWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICB0
aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAg
ICAgICAgZ2VuZXJhdG9yLnB1c2hJbmRleGVkRm9ySW5TY29wZShib3VuZExvY2FsLCBpLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworICAgICAg
ICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUoYm91bmRMb2NhbCk7CisKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChpbmRleGVkSXRlcmF0aW9uU2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENoZWNrUHJvcGVydHlFbnVtZXJhdG9yKGJhc2Uu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIG5leHRFbnRyeS5nZXQoKSwgaW5kZXhlZEl0ZXJhdGlv
blNjb3BlLT5icmVha1RhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0SW5kZXhl
ZFByb3BlcnR5TmFtZShpLmdldCgpLCBuZXh0RW50cnkuZ2V0KCksIGlubmVyTG9vcFN0YXJ0Lmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChpbmRleGVkSXRlcmF0aW9uU2NvcGUt
PmJyZWFrVGFyZ2V0KCkpOworICAgIH0KKworICAgIC8vIFN0cnVjdHVyZSBwcm9wZXJ0eSBsb29w
CisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHN0cnVjdHVyZUl0ZXJhdGlvblNjb3BlID0g
Z2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisKKyAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHN0cnVjdHVyZUl0ZXJhdGlvblNjb3BlLT5jb250
aW51ZVRhcmdldCgpKTsKKworICAgICAgICBSZWZQdHI8TGFiZWw+IGlubmVyTG9vcFN0YXJ0ID0g
Z2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaW5uZXJM
b29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAg
ICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkp
OworCisgICAgICAgIGdlbmVyYXRvci5wdXNoU3RydWN0dXJlRm9ySW5TY29wZShib3VuZExvY2Fs
LCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGJv
dW5kTG9jYWwpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc3RydWN0dXJlSXRlcmF0
aW9uU2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENoZWNr
UHJvcGVydHlFbnVtZXJhdG9yKGJhc2UuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIG5leHRFbnRy
eS5nZXQoKSwgc3RydWN0dXJlSXRlcmF0aW9uU2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5leHRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdl
dCgpLCBuZXh0RW50cnkuZ2V0KCksIGlubmVyTG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChzdHJ1Y3R1cmVJdGVyYXRpb25TY29wZS0+YnJlYWtUYXJnZXQoKSk7
CisgICAgfQorCisgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBsb29wCisgICAgeworICAgICAgICBM
YWJlbFNjb3BlUHRyIGdlbmVyaWNJdGVyYXRpb25TY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNj
b3BlKExhYmVsU2NvcGU6Okxvb3ApOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9w
ZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChnZW5lcmljSXRlcmF0aW9uU2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworCisgICAg
ICAgIFJlZlB0cjxMYWJlbD4gaW5uZXJMb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChpbm5lckxvb3BTdGFydC5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICB0aGlzLT5lbWl0TG9vcEhl
YWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFi
ZWwoZ2VuZXJpY0l0ZXJhdGlvblNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROZXh0R2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIG5l
eHRFbnRyeS5nZXQoKSwgaW5uZXJMb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGdlbmVyaWNJdGVyYXRpb25TY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgfQor
CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChvdXRlclNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdEdldFByb3RvdHlwZShiYXNlLmdldCgpLCBiYXNlLmdldCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yRW50cnkobmV4dEVudHJ5LmdldCgpLCBi
YXNlLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBvdXRlckxvb3BTdGFydC5nZXQoKSk7CisgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChvdXRlclNjb3BlLT5icmVha1RhcmdldCgpKTsKK30KKworY29u
c3QgSWRlbnRpZmllciogRm9ySW5Ob2RlOjppZGVudGlmaWVyRm9yQm91bmRMb2NhbChCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2Rl
KCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7CisgICAgICAgIExvY2FsIGxvY2FsID0g
Z2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKKyAgICAgICAgaWYgKGxvY2FsLmdldCgpKQorICAgICAg
ICAgICAgcmV0dXJuICZpZGVudDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgaWYgKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25Ob2RlKCkpIHsKKyAgICAgICAgRGVjb25z
dHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSogYXNzaWduTm9kZSA9IHN0YXRpY19jYXN0PERlY29uc3Ry
dWN0aW5nQXNzaWdubWVudE5vZGUqPihtX2xleHByKTsKKyAgICAgICAgYXV0byBiaW5kaW5nID0g
YXNzaWduTm9kZS0+YmluZGluZ3MoKTsKKyAgICAgICAgaWYgKCFiaW5kaW5nLT5pc0JpbmRpbmdO
b2RlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBhdXRvIHNpbXBs
ZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJpbmRpbmcpOworICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsK
KyAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBp
ZiAoIWxvY2FsLmdldCgpIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gJmlkZW50OworICAgIH0KKworICAgIHJldHVybiBu
dWxscHRyOworfQorCit2b2lkIEZvckluTm9kZTo6ZW1pdExvb3BIZWFkZXIoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQoreworICAgIGlmICht
X2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7Cisg
ICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKKyAgICAgICAgaWYg
KGxvY2FsLmdldCgpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgp
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0
b3IuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICAgICAg
UmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGlkZW50KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZSwgaWRlbnQsIHByb3BlcnR5TmFtZSwgZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90
Rm91bmQpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4
cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBhc3Np
Z25Ob2RlID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7CisgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gYXNzaWduTm9kZS0+aWRlbnRpZmllcigpOworICAg
ICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJh
c2UoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNzaWduTm9kZS0+
ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3NpZ25Ob2RlLT5kaXZvdEVuZCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2xleHByLT5pc0JyYWNrZXRB
Y2Nlc3Nvck5vZGUoKSkgeworICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBhc3NpZ25Ob2Rl
ID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29yTm9kZSo+KG1fbGV4cHIpOworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShhc3NpZ25Ob2RlLT5i
YXNlKCkpOworICAgICAgICBSZWdpc3RlcklEKiBzdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUoYXNzaWduTm9kZS0+c3Vic2NyaXB0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwg
YXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwo
YmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25Ob2RlKCkpIHsKKyAgICAg
ICAgRGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSogYXNzaWduTm9kZSA9IHN0YXRpY19jYXN0
PERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqPihtX2xleHByKTsKKyAgICAgICAgYXV0byBi
aW5kaW5nID0gYXNzaWduTm9kZS0+YmluZGluZ3MoKTsKKyAgICAgICAgaWYgKCFiaW5kaW5nLT5p
c0JpbmRpbmdOb2RlKCkpIHsKKyAgICAgICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmJp
bmRWYWx1ZShnZW5lcmF0b3IsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5k
aW5nTm9kZSo+KGJpbmRpbmcpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHNp
bXBsZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5l
cmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAoIWxvY2FsLmdldCgpIHx8IGxvY2FsLmlz
Q2FwdHVyZWQoKSkgeworICAgICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3MoKS0+YmluZFZh
bHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQogCisgICAgLyoKIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIExhYmVsU2Nv
cGVQdHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsK
QEAgLTE4OTcsNiArMjA4Nyw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW4KICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwg
Zmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKIH0KKyovCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JPZk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiB2b2lkIEZvck9mTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU09iamVjdDsK
ICAgICBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogICAgIGNsYXNzIEpTU2NvcGU7Cisg
ICAgc3RydWN0IEVudW1lcmF0b3JFbnRyeTsKIAogICAgIHR5cGVkZWYgRXhlY1N0YXRlIENhbGxG
cmFtZTsKIApAQCAtNzEsNiArNzIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCB1
bmJveGVkQm9vbGVhbigpIGNvbnN0OwogICAgICAgICBkb3VibGUgdW5ib3hlZERvdWJsZSgpIGNv
bnN0OwogICAgICAgICBKU0NlbGwqIHVuYm94ZWRDZWxsKCkgY29uc3Q7CisgICAgICAgIEVudW1l
cmF0b3JFbnRyeSogZW51bWVyYXRvckVudHJ5KCkgY29uc3Q7CisKICAgICAgICAgaW50MzJfdCBw
YXlsb2FkKCkgY29uc3Q7CiAgICAgICAgIGludDMyX3QgdGFnKCkgY29uc3Q7CiAgICAgICAgIGlu
dDMyX3QmIHBheWxvYWQoKTsKQEAgLTg5LDYgKzkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKICAgICAgICAgICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lOwogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgICAgICBF
bnVtZXJhdG9yRW50cnkqIGVudW1lcmF0b3JFbnRyeTsKICAgICAgICAgICAgIEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IgZW5jb2RlZFZhbHVlOwogICAgICAgICAgICAgZG91YmxlIG51bWJlcjsKICAg
ICAgICAgICAgIGludDY0X3QgaW50ZWdlcjsKQEAgLTE1Miw2ICsxNTYsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHJldHVybiB1LmNvZGVCbG9jazsKICAgICB9CiAKKyAgICBBTFdBWVNf
SU5MSU5FIEVudW1lcmF0b3JFbnRyeSogUmVnaXN0ZXI6OmVudW1lcmF0b3JFbnRyeSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdS5lbnVtZXJhdG9yRW50cnk7CisgICAgfQorCiAgICAg
QUxXQVlTX0lOTElORSBpbnQzMl90IFJlZ2lzdGVyOjp1bmJveGVkSW50MzIoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIHBheWxvYWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTcwMjE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ1Myw2ICsxNDUzLDEwNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHV0X3RvX3NjCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKKworTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NoZWNrX3Byb3BlcnR5X2VudW1lcmF0b3IpCit7CisgICAgTExJTlRfQkVHSU4o
KTsKKworICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoTExJTlRfT1AoMSkuanNWYWx1ZSgp
LmFzQ2VsbCgpKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oTExJTlRfT1AoMikuanNWYWx1ZSgpLmFz
Q2VsbCgpKTsKKyAgICBFbnVtZXJhdG9yRW50cnkqIGVudHJ5ID0gTExJTlRfT1AoMykuZW51bWVy
YXRvckVudHJ5KCk7CisKKyAgICBBU1NFUlQoIWVudHJ5LT5vYmplY3QoKSB8fCBlbnRyeS0+b2Jq
ZWN0KCkgPT0gYmFzZSk7CisKKyAgICBpZiAoZW50cnktPnN0cnVjdHVyZSgpID09IGJhc2UtPnN0
cnVjdHVyZSgpKQorICAgICAgICBwYyArPSBPUENPREVfTEVOR1RIKG9wX2NoZWNrX3Byb3BlcnR5
X2VudW1lcmF0b3IpOworICAgIGVsc2UgeworICAgICAgICBMTElOVF9PUCgyKSA9IEpTVmFsdWUo
ZW51bWVyYXRvci0+Y29udmVydFRvR2VuZXJpY0VudW1lcmF0aW9uKGV4ZWMtPnZtKCksIGJhc2Us
IGVudHJ5KSk7CisgICAgICAgIHBjICs9IHBjWzRdLnUub3BlcmFuZDsKKyAgICB9CisKKyAgICBM
TElOVF9FTkQoKTsKK30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25leHRfaW5k
ZXhlZF9wbmFtZSkKK3sKKyAgICBMTElOVF9CRUdJTigpOworCisgICAgRW51bWVyYXRvckVudHJ5
KiBlbnRyeSA9IExMSU5UX09QKDIpLmVudW1lcmF0b3JFbnRyeSgpOworCisgICAgaWYgKGVudHJ5
LT5oYXNOZXh0SW5kZXhlZFByb3BlcnR5TmFtZSgpKSB7CisgICAgICAgIExMSU5UX09QKDEpID0g
anNOdW1iZXIoZW50cnktPm5leHRJbmRleGVkUHJvcGVydHlOYW1lKCkpOworICAgICAgICBwYyAr
PSBwY1szXS51Lm9wZXJhbmQ7CisgICAgfSBlbHNlCisgICAgICAgIHBjICs9IE9QQ09ERV9MRU5H
VEgob3BfbmV4dF9pbmRleGVkX3BuYW1lKTsKKworICAgIExMSU5UX0VORCgpOworfQorCitMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9zdHJ1Y3R1cmVfcG5hbWUpCit7CisgICAg
TExJTlRfQkVHSU4oKTsKKworICAgIEVudW1lcmF0b3JFbnRyeSogZW50cnkgPSBMTElOVF9PUCgy
KS5lbnVtZXJhdG9yRW50cnkoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBuZXh0UHJvcGVydHlO
YW1lID0gZW50cnktPm5leHRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUoKTsKKworICAgIGlmIChuZXh0
UHJvcGVydHlOYW1lKSB7CisgICAgICAgIExMSU5UX09QKDEpID0gSlNWYWx1ZShqc093bmVkU3Ry
aW5nKCZleGVjLT52bSgpLCBuZXh0UHJvcGVydHlOYW1lLT5zdHJpbmcoKSkpOworICAgICAgICBw
YyArPSBwY1szXS51Lm9wZXJhbmQ7CisgICAgfSBlbHNlCisgICAgICAgIHBjICs9IE9QQ09ERV9M
RU5HVEgob3BfbmV4dF9zdHJ1Y3R1cmVfcG5hbWUpOworCisgICAgTExJTlRfRU5EKCk7Cit9CisK
K0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXh0X2dlbmVyaWNfcG5hbWUpCit7Cisg
ICAgTExJTlRfQkVHSU4oKTsKKworICAgIEVudW1lcmF0b3JFbnRyeSogZW50cnkgPSBMTElOVF9P
UCgyKS5lbnVtZXJhdG9yRW50cnkoKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGVudHJ5LT5vYmpl
Y3QoKTsKKworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBlbnRyeS0+bmV4dEdl
bmVyaWNQcm9wZXJ0eU5hbWUoKTsKKyAgICB3aGlsZSAoaWRlbnRpZmllcikgeworICAgICAgICBp
ZiAoYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgKmlkZW50aWZpZXIpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlkZW50aWZpZXIgPSBlbnRyeS0+bmV4dEdlbmVyaWNQcm9wZXJ0eU5hbWUo
KTsKKyAgICB9CisKKyAgICBpZiAoaWRlbnRpZmllcikgeworICAgICAgICBMTElOVF9PUCgxKSA9
IEpTVmFsdWUoanNTdHJpbmcoZXhlYywgaWRlbnRpZmllci0+c3RyaW5nKCkpKTsKKyAgICAgICAg
cGMgKz0gcGNbM10udS5vcGVyYW5kOworICAgIH0gZWxzZQorICAgICAgICBwYyArPSBPUENPREVf
TEVOR1RIKG9wX25leHRfZ2VuZXJpY19wbmFtZSk7CisKKyAgICBMTElOVF9FTkQoKTsKK30KKwor
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9lbnRyeSkKK3sK
KyAgICBMTElOVF9CRUdJTigpOworCisgICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVjdChMTElO
VF9PUCgyKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihMTElOVF9P
UCgzKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEVudW1lcmF0b3JFbnRyeSogZW50cnkgPSBl
bnVtZXJhdG9yLT50YWtlTmV4dEVudHJ5KCk7CisKKyAgICBpZiAoZW50cnkpIHsKKyAgICAgICAg
aWYgKGVudHJ5LT5vYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKGVudHJ5LT5vYmplY3QoKSAh
PSBiYXNlIHx8IGVudHJ5LT5zdHJ1Y3R1cmUoKSAhPSBiYXNlLT5zdHJ1Y3R1cmUoKSkgeworICAg
ICAgICAgICAgICAgIExMSU5UX09QKDMpID0gSlNWYWx1ZShlbnVtZXJhdG9yLT5jb252ZXJ0VG9H
ZW5lcmljRW51bWVyYXRpb24oZXhlYy0+dm0oKSwgYmFzZSwgZW50cnkpKTsKKyAgICAgICAgICAg
ICAgICBlbnRyeSA9IGVudW1lcmF0b3ItPnRha2VOZXh0RW50cnkoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIEFTU0VSVChiYXNlLT5zdHJ1Y3R1cmUoKSA9PSBlbnRyeS0+c3RydWN0dXJlKCkpOworICAg
ICAgICBMTElOVF9PUCgxKSA9IEpTVmFsdWUoZW50cnkpOworICAgICAgICBwYyArPSBwY1s0XS51
Lm9wZXJhbmQ7CisgICAgfSBlbHNlCisgICAgICAgIHBjICs9IE9QQ09ERV9MRU5HVEgob3BfbmV4
dF9lbnVtZXJhdG9yX2VudHJ5KTsKKworICAgIExMSU5UX0VORCgpOworfQorCisKIGV4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292ZXJmbG93X2Vycm9yKFZN
KiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvRnJhbWUpCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdm0tPnRvcENhbGxGcmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEy
NCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhCiBMTElOVF9T
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOwogTExJTlRfU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29wZSk7CiBMTElOVF9TTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSk7CitMTElOVF9TTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NoZWNrX3Byb3BlcnR5X2VudW1lcmF0b3IpOworTExJ
TlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXh0X2luZGV4ZWRfcG5hbWUpOwor
TExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXh0X3N0cnVjdHVyZV9wbmFt
ZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25leHRfZ2VuZXJpY19w
bmFtZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25leHRfZW51bWVy
YXRvcl9lbnRyeSk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBsbGludF90aHJvd19z
dGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikgV1RGX0lOVEVSTkFMOwog
I2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlwZSBs
bGludF9zdGFja19jaGVja19hdF92bV9lbnRyeShWTSosIFJlZ2lzdGVyKikgV1RGX0lOVEVSTkFM
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkocmV2aXNpb24gMTcwMjE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEwLDYg
KzEyMTAsNTEgQEAgX2xsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CiBfbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIG5hdGl2ZUNhbGxUcmFtcG9saW5lKE5hdGl2ZUV4
ZWN1dGFibGU6Om1fY29uc3RydWN0b3IpCiAKK19sbGludF9vcF9nZXRfcHJvcGVydHlfZW51bWVy
YXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgZGlzcGF0Y2goMykKKworX2xsaW50X29wX2dl
dF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorICAgIGRpc3BhdGNoKDMpCisK
K19sbGludF9vcF90b19pbmRleF9zdHJpbmc6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNh
bGxTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKKyAgICBkaXNwYXRjaCgzKQor
CitfbGxpbnRfb3BfY2hlY2tfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlv
bigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfY2hlY2tfcHJvcGVydHlfZW51
bWVyYXRvcikKKyAgICBkaXNwYXRjaCgwKQorCitfbGxpbnRfb3BfbmV4dF9pbmRleGVkX3BuYW1l
OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9uZXh0X2luZGV4ZWRfcG5hbWUpCisgICAgZGlzcGF0Y2goMCkKKworX2xsaW50X29wX25leHRf
c3RydWN0dXJlX3BuYW1lOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9uZXh0X3N0cnVjdHVyZV9wbmFtZSkKKyAgICBkaXNwYXRjaCgwKQor
CitfbGxpbnRfb3BfbmV4dF9nZW5lcmljX3BuYW1lOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXh0X2dlbmVyaWNfcG5hbWUpCisgICAg
ZGlzcGF0Y2goMCkKKworX2xsaW50X29wX25leHRfZW51bWVyYXRvcl9lbnRyeToKKyAgICB0cmFj
ZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV4dF9lbnVt
ZXJhdG9yX2VudHJ5KQorICAgIGRpc3BhdGNoKDApCisKK19sbGludF9vcF9nZXRfcHJvdG90eXBl
OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRf
cHJvdG90eXBlKQorICAgIGRpc3BhdGNoKDMpCisKIAogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0
IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCiAj
IFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNpbmcgTExJbnQgb3IgZWl0
aGVyIEpJVC4gV2UgYXNzZXJ0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODAsNiArMTI4MCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBEZWNvbnN0cnVj
dGlvblBhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7CiAKICAg
ICBwcml2YXRlOgorICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyRm9yQm91bmRM
b2NhbChCeXRlY29kZUdlbmVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRMb29wSGVhZGVyKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKKwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBvdmVycmlkZTsKICAgICB9OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw5
IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdHlwZWRlZiB2b2lkICgqR2V0UHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0
UHJvcGVydHlOYW1lczsKIAorICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGb3JF
bnVtZXJhdGlvbkZ1bmN0aW9uUHRyKShKU09iamVjdCosIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciopOworICAgIEdldFByb3BlcnR5TmFtZXNGb3JFbnVtZXJhdGlvbkZ1bmN0aW9uUHRyIGdldFBy
b3BlcnR5TmFtZXNGb3JFbnVtZXJhdGlvbjsKKwogICAgIHR5cGVkZWYgU3RyaW5nICgqQ2xhc3NO
YW1lRnVuY3Rpb25QdHIpKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgQ2xhc3NOYW1lRnVuY3Rpb25Q
dHIgY2xhc3NOYW1lOwogCkBAIC0xMzcsNiArMTQwLDcgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsK
ICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xh
c3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFt
ZTo6Z2V0UHJvcGVydHlOYW1lcywgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5h
bWVzRm9yRW51bWVyYXRpb24sIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OmN1c3RvbUhhc0luc3RhbmNlLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmRlZmluZU93blByb3BlcnR5LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzNCw2ICs1MzQsMzcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVy
KQogICAgIEVORCgpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5
X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAgICBSRVRVUk4oanNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKGV4ZWMsIE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVjKSkpOworfQorCitT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQoreworICAgIEJF
R0lOKCk7CisgICAgUkVUVVJOKGpzTnVtYmVyKE9QKDIpLmVudW1lcmF0b3JFbnRyeSgpLT5pbmRl
eGluZ0xpbWl0KCkpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0
cmluZykKK3sKKyAgICBCRUdJTigpOworICAgIHVpbnQzMl90IGluZGV4ID0gT1AoMikuanNWYWx1
ZSgpLmFzVUludDMyKCk7CisgICAgUkVUVVJOKGpzSW5kZXhTdHJpbmcoZXhlYywgaW5kZXgpKTsK
K30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9wcm90b3R5cGUpCit7CisgICAgQkVH
SU4oKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBwcm90b3R5cGU7CisgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHByb3RvdHlw
ZSA9IGFzT2JqZWN0KHZhbHVlKS0+cHJvdG90eXBlKCk7CisgICAgZWxzZQorICAgICAgICBwcm90
b3R5cGUgPSB2YWx1ZS5zeW50aGVzaXplUHJvdG90eXBlKGV4ZWMpOworICAgIFJFVFVSTihwcm90
b3R5cGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
IHx8IEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDYgKzE5OSwxNCBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKIFNMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3RvX3ByaW1pdGl2ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9wcm9w
ZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9faW5k
ZXhfc3RyaW5nKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2hlY2tfcHJvcGVy
dHlfZW51bWVyYXRvcik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25leHRfc3Ry
dWN0dXJlX3BuYW1lKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9nZW5l
cmljX3BuYW1lKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJh
dG9yX2VudHJ5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X3Byb3RvdHlw
ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw2ICsyMTIsMTEg
QEAgdm9pZCBKU0NlbGw6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLAogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgSlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVz
Rm9yRW51bWVyYXRpb24oSlNPYmplY3QqLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIGJvb2wgSlNDZWxsOjpjdXN0
b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBF
eGVjU3RhdGU7CiBjbGFzcyBKU0FycmF5QnVmZmVyVmlldzsKIGNsYXNzIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0OwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9wZXJ0eURlc2Ny
aXB0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKQEAgLTIwOSw2ICsyMTAsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIGdldFByb3BlcnR5TmFtZXNGb3JFbnVtZXJhdGlvbihKU09iamVjdCos
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOwogICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1l
KGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgY3Vz
dG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBzdGF0
aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0luZGV4U3RyaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbmRleFN0cmluZy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbmRleFN0cmluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpT
SW5kZXhTdHJpbmdfaAorI2RlZmluZSBKU0luZGV4U3RyaW5nX2gKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTSW5kZXhTdHJpbmcgOiBwdWJsaWMgSlNTdHJpbmcgeworICAgIAorfTsKKyAg
ICAKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNJbmRleFN0cmluZ19oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAx
NzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0ODMsNiArMTQ4MywxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0CiAgICAgfQogfQogCit2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0
eU5hbWVzRm9yRW51bWVyYXRpb24oSlNPYmplY3QqLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
KQoreworfQorCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMg
Zmlyc3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQgY29udmVudGlvbi4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTcwMjE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNiArNjgsNyBAQCBpbmxpbmUgSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdChK
U1ZhbHVlCiBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOwogY2xh
c3MgSlNGdW5jdGlvbjsKK2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIE1hcmtlZEJsb2NrOwogY2xhc3MgUHJvcGVydHlE
ZXNjcmlwdG9yOwpAQCAtNDg0LDYgKzQ4NSw4IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXNGb3JFbnVtZXJhdGlv
bihKU09iamVjdCosIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOworCiAgICAgSlNWYWx1ZSB0
b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJl
bmNlKSBjb25zdDsKICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3Vi
bGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJs
ZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
Citjb25zdCBDbGFzc0luZm8gRW51bWVyYXRvckVudHJ5OjpzX2luZm8gPSB7ICJFbnVtZXJhdG9y
RW50cnkiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEVudW1lcmF0b3JFbnRyeSkgfTsK
KworRW51bWVyYXRvckVudHJ5KiBFbnVtZXJhdG9yRW50cnk6OmNyZWF0ZShWTSYgdm0pCit7Cisg
ICAgRW51bWVyYXRvckVudHJ5KiBuZXdFbnRyeSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEVudW1lcmF0b3JFbnRyeT4odm0uaGVhcCkpIEVudW1lcmF0b3JFbnRyeSh2bSk7CisgICAgbmV3
RW50cnktPkpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBuZXdFbnRyeTsK
K30KKworRW51bWVyYXRvckVudHJ5KiBFbnVtZXJhdG9yRW50cnk6OmNsb25lKFZNJiB2bSwgY29u
c3QgRW51bWVyYXRvckVudHJ5JiBlbnRyeSkKK3sKKyAgICBFbnVtZXJhdG9yRW50cnkqIG5ld0Vu
dHJ5ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RW51bWVyYXRvckVudHJ5Pih2bS5oZWFw
KSkgRW51bWVyYXRvckVudHJ5KHZtLCBlbnRyeSk7CisgICAgbmV3RW50cnktPmZpbmlzaENyZWF0
aW9uKHZtLCBlbnRyeSk7CisgICAgcmV0dXJuIG5ld0VudHJ5OworfQorCitFbnVtZXJhdG9yRW50
cnk6OkVudW1lcmF0b3JFbnRyeShWTSYgdm0pCisgICAgOiBKU0NlbGwodm0sIHZtLmVudW1lcmF0
b3JFbnRyeVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fY3VycmVudEluZGV4ZWRJbmRleCgwKQor
ICAgICwgbV9jdXJyZW50U3RydWN0dXJlUHJvcGVydHlJbmRleCgwKQorICAgICwgbV9jdXJyZW50
R2VuZXJpY1Byb3BlcnR5SW5kZXgoMCkKKyAgICAsIG1faW5kZXhpbmdMaW1pdCgwKQoreworfQor
CitFbnVtZXJhdG9yRW50cnk6OkVudW1lcmF0b3JFbnRyeShWTSYgdm0sIGNvbnN0IEVudW1lcmF0
b3JFbnRyeSYgb3RoZXIpCisgICAgOiBKU0NlbGwodm0sIHZtLmVudW1lcmF0b3JFbnRyeVN0cnVj
dHVyZS5nZXQoKSkKKyAgICAsIG1fY3VycmVudEluZGV4ZWRJbmRleCgwKQorICAgICwgbV9jdXJy
ZW50U3RydWN0dXJlUHJvcGVydHlJbmRleCgwKQorICAgICwgbV9jdXJyZW50R2VuZXJpY1Byb3Bl
cnR5SW5kZXgoMCkKKyAgICAsIG1faW5kZXhpbmdMaW1pdChvdGhlci5tX2luZGV4aW5nTGltaXQp
CisgICAgLCBtX3N0cnVjdHVyZVByb3BlcnR5TmFtZXMob3RoZXIubV9zdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKQorICAgICwgbV9nZW5lcmljUHJvcGVydHlOYW1lcyhvdGhlci5tX2dlbmVyaWNQcm9w
ZXJ0eU5hbWVzKQoreworfQorCit2b2lkIEVudW1lcmF0b3JFbnRyeTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBjb25zdCBFbnVtZXJhdG9yRW50cnkmIGVudHJ5KQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICBtX3N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGVudHJ5Lm1fc3Ry
dWN0dXJlLmdldCgpKTsKKyAgICBtX29iamVjdC5zZXQodm0sIHRoaXMsIGVudHJ5Lm1fb2JqZWN0
LmdldCgpKTsKK30KKwordm9pZCBFbnVtZXJhdG9yRW50cnk6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQoreworICAgIHN0YXRpY19jYXN0PEVudW1lcmF0b3JFbnRyeSo+KGNlbGwpLT5FbnVtZXJhdG9y
RW50cnk6On5FbnVtZXJhdG9yRW50cnkoKTsKK30KKwordm9pZCBFbnVtZXJhdG9yRW50cnk6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEVudW1lcmF0b3JFbnRyeSog
dGhpc09iamVjdCA9IGpzQ2FzdDxFbnVtZXJhdG9yRW50cnkqPihjZWxsKTsKKyAgICBpZiAodGhp
c09iamVjdC0+bV9vYmplY3QpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X29iamVjdCk7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fc3RydWN0dXJlKQorICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zdHJ1Y3R1cmUpOworICAgIGlmICh0aGlzT2JqZWN0
LT5tX25leHRFbnRyeSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmV4
dEVudHJ5KTsKK30KKwordm9pZCBFbnVtZXJhdG9yRW50cnk6OmFkZFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMoY29uc3QgVmVjdG9yPElkZW50aWZpZXI+JiBwcm9wZXJ0eU5hbWVzKQoreworICAgIG1f
c3RydWN0dXJlUHJvcGVydHlOYW1lcyA9IFJlZkNvdW50ZWRBcnJheTxJZGVudGlmaWVyPihwcm9w
ZXJ0eU5hbWVzKTsKK30KKwordm9pZCBFbnVtZXJhdG9yRW50cnk6OmFkZEdlbmVyaWNQcm9wZXJ0
eU5hbWVzKGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgcHJvcGVydHlOYW1lcykKK3sKKyAgICBt
X2dlbmVyaWNQcm9wZXJ0eU5hbWVzID0gUmVmQ291bnRlZEFycmF5PElkZW50aWZpZXI+KHByb3Bl
cnR5TmFtZXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpzX2luZm8gPSB7ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IiLCAwLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcikgfTsKKworSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0pCit7
CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBqc1Byb3BlcnR5TmFtZUVudW1lcmF0b3Ig
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I+KHZt
LmhlYXApKSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0pOworICAgIGpzUHJvcGVydHlOYW1l
RW51bWVyYXRvci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBqc1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjb252ZXJ0VG9HZW5lcmljRW51bWVyYXRpb24oVk0mLCBKU09iamVjdCos
IEVudW1lcmF0b3JFbnRyeSopCit7CisgICAgLy8gVE9ETzogVGhpcy4KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IoVk0mIHZtKQorICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
U3RydWN0dXJlLmdldCgpKQorICAgICwgbV90YWlsRW50cnkobnVsbHB0cikKK3sKK30KKwordm9p
ZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAg
IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpLT5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6On5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKwordm9pZCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0
b3IpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9oZWFkRW50cnkpOworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6d2lsbFN0YXJ0QXBwZW5kaW5nRm9yT2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwg
Ym9vbCBpc0Jhc2VPYmplY3QpCit7CisgICAgRW51bWVyYXRvckVudHJ5KiBuZXdFbnRyeSA9IEVu
dW1lcmF0b3JFbnRyeTo6Y3JlYXRlKHZtKTsKKworICAgIC8vIFRoZSBlbnRyeSBmb3IgdGhlIGJh
c2Ugb2JqZWN0IHNob3VsZCBub3QgaGF2ZSBhIHNwZWNpZmljIG9iamVjdCB0byBjaGVjayBmb3Ig
c28KKyAgICAvLyB0aGF0IGl0IGNhbiBiZSBnZW5lcmljIGFjcm9zcyBtdWx0aXBsZSBiYXNlIG9i
amVjdHMgd2l0aCB0aGUgc2FtZSBwcm90b3R5cGUgY2hhaW4uCisgICAgaWYgKCFpc0Jhc2VPYmpl
Y3QpCisgICAgICAgIG5ld0VudHJ5LT5zZXRPYmplY3Qodm0sIG9iamVjdCk7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgbmV3RW50cnktPnNl
dFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKKworICAgIC8vIFRPRE86IERvIGNoZWNrcyB0byBz
ZWUgaWYgd2UgY2FuIGdvIGZhc3QuCisKKyAgICBpZiAoIW1faGVhZEVudHJ5KSB7CisgICAgICAg
IEFTU0VSVCghbV90YWlsRW50cnkpOworICAgICAgICBtX2hlYWRFbnRyeS5zZXQodm0sIHRoaXMs
IG5ld0VudHJ5KTsKKyAgICAgICAgbV90YWlsRW50cnkgPSBuZXdFbnRyeTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX3RhaWxFbnRyeSk7CisgICAgbV90YWlsRW50cnkt
PnNldE5leHQodm0sIG5ld0VudHJ5KTsKKyAgICBtX3RhaWxFbnRyeSA9IG5ld0VudHJ5OworfQor
Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6c2V0SW5kZXhpbmdMaW1pdCh1bnNpZ25l
ZCBsaW1pdCkKK3sKKyAgICBjdXJyZW50RW50cnkoKS5zZXRJbmRleGluZ0xpbWl0KGxpbWl0KTsK
K30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmFwcGVuZFN0cnVjdHVyZUlkZW50
aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9jdXJyZW50
R2VuZXJpY0lkZW50aWZpZXJzKSB7CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50R2VuZXJpY0lk
ZW50aWZpZXJzLT5pc0VtcHR5KCkpOworICAgICAgICBhcHBlbmRHZW5lcmljSWRlbnRpZmllcihp
ZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fY3VycmVudFN0
cnVjdHVyZUlkZW50aWZpZXJzKQorICAgICAgICBtX2N1cnJlbnRTdHJ1Y3R1cmVJZGVudGlmaWVy
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SWRlbnRpZmllcj4pOworICAgIG1fY3VycmVudFN0cnVj
dHVyZUlkZW50aWZpZXJzLT5hcHBlbmQoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjphcHBlbmRHZW5lcmljSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQoreworICAgIGlmICghbV9jdXJyZW50R2VuZXJpY0lkZW50aWZpZXJzKQor
ICAgICAgICBtX2N1cnJlbnRHZW5lcmljSWRlbnRpZmllcnMgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PElkZW50aWZpZXI+KTsKKyAgICBtX2N1cnJlbnRHZW5lcmljSWRlbnRpZmllcnMtPmFwcGVuZChp
ZGVudGlmaWVyKTsKK30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmRpZEZpbmlz
aEFwcGVuZGluZ0Zvck9iamVjdChKU09iamVjdCopCit7CisgICAgY3VycmVudEVudHJ5KCkuYWRk
U3RydWN0dXJlUHJvcGVydHlOYW1lcygqbV9jdXJyZW50U3RydWN0dXJlSWRlbnRpZmllcnMpOwor
ICAgIGN1cnJlbnRFbnRyeSgpLmFkZEdlbmVyaWNQcm9wZXJ0eU5hbWVzKCptX2N1cnJlbnRHZW5l
cmljSWRlbnRpZmllcnMpOworICAgIG1fY3VycmVudFN0cnVjdHVyZUlkZW50aWZpZXJzLmNsZWFy
KCk7CisgICAgbV9jdXJyZW50R2VuZXJpY0lkZW50aWZpZXJzLmNsZWFyKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2gKKyNkZWZpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gK
KworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworc3RydWN0IEVudW1lcmF0b3JFbnRyeSA6IHB1YmxpYyBKU0NlbGwgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgRW51bWVyYXRv
ckVudHJ5KiBjcmVhdGUoVk0mKTsKKyAgICBzdGF0aWMgRW51bWVyYXRvckVudHJ5KiBjbG9uZShW
TSYsIGNvbnN0IEVudW1lcmF0b3JFbnRyeSYpOworCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxT
dHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZv
KENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHZvaWQgYWRkU3RydWN0dXJlUHJvcGVydHlOYW1lcyhjb25zdCBW
ZWN0b3I8SWRlbnRpZmllcj4mKTsKKyAgICB2b2lkIGFkZEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGNv
bnN0IFZlY3RvcjxJZGVudGlmaWVyPiYpOworCisgICAgdm9pZCBzZXROZXh0KFZNJiB2bSwgRW51
bWVyYXRvckVudHJ5KiBuZXh0KSB7IG1fbmV4dEVudHJ5LnNldCh2bSwgdGhpcywgbmV4dCk7IH0K
KyAgICBFbnVtZXJhdG9yRW50cnkqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHRFbnRyeS5n
ZXQoKTsgfQorCisgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgeyBtX3N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIHN0cnVjdHVyZSk7IH0KKyAgICB2b2lk
IHNldE9iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpIHsgbV9vYmplY3Quc2V0KHZtLCB0
aGlzLCBvYmplY3QpOyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9CisgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldEluZGV4aW5nTGltaXQodW5z
aWduZWQgbGltaXQpIHsgbV9pbmRleGluZ0xpbWl0ID0gbGltaXQ7IH0KKyAgICB1bnNpZ25lZCBp
bmRleGluZ0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ0xpbWl0OyB9CisKKyAgICBi
b29sIGhhc05leHRJbmRleGVkUHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
SW5kZXhlZEluZGV4IDwgbV9pbmRleGluZ0xpbWl0OyB9CisgICAgdW5zaWduZWQgbmV4dEluZGV4
ZWRQcm9wZXJ0eU5hbWUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc05leHRJbmRleGVkUHJv
cGVydHlOYW1lKCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50SW5kZXhlZEluZGV4Kys7Cisg
ICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciogbmV4dFN0cnVjdHVyZVByb3BlcnR5TmFtZSgp
CisgICAgeworICAgICAgICBpZiAobV9jdXJyZW50U3RydWN0dXJlUHJvcGVydHlJbmRleCA+PSBt
X3N0cnVjdHVyZVByb3BlcnR5TmFtZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzW21fY3VycmVudFN0
cnVjdHVyZVByb3BlcnR5SW5kZXgrK107CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciog
bmV4dEdlbmVyaWNQcm9wZXJ0eU5hbWUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY3VycmVudEdl
bmVyaWNQcm9wZXJ0eUluZGV4ID49IG1fZ2VuZXJpY1Byb3BlcnR5TmFtZXMuc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmbV9nZW5lcmljUHJvcGVy
dHlOYW1lc1ttX2N1cnJlbnRHZW5lcmljUHJvcGVydHlJbmRleCsrXTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJl
SXNJbW1vcnRhbCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFn
czsKKworICAgIEVudW1lcmF0b3JFbnRyeShWTSYpOworICAgIEVudW1lcmF0b3JFbnRyeShWTSYs
IGNvbnN0IEVudW1lcmF0b3JFbnRyeSYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IGNvbnN0IEVudW1lcmF0b3JFbnRyeSYpOworCisgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXhl
ZEluZGV4OworICAgIHVuc2lnbmVkIG1fY3VycmVudFN0cnVjdHVyZVByb3BlcnR5SW5kZXg7Cisg
ICAgdW5zaWduZWQgbV9jdXJyZW50R2VuZXJpY1Byb3BlcnR5SW5kZXg7CisgICAgdW5zaWduZWQg
bV9pbmRleGluZ0xpbWl0OworICAgIFJlZkNvdW50ZWRBcnJheTxJZGVudGlmaWVyPiBtX3N0cnVj
dHVyZVByb3BlcnR5TmFtZXM7CisgICAgUmVmQ291bnRlZEFycmF5PElkZW50aWZpZXI+IG1fZ2Vu
ZXJpY1Byb3BlcnR5TmFtZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1
cmU7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX29iamVjdDsKKyAgICBXcml0ZUJhcnJp
ZXI8RW51bWVyYXRvckVudHJ5PiBtX25leHRFbnRyeTsKK307CisKK2NsYXNzIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
ZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjcmVhdGUo
Vk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAg
IHZvaWQgd2lsbFN0YXJ0QXBwZW5kaW5nRm9yT2JqZWN0KFZNJiwgSlNPYmplY3QqLCBib29sIGlz
QmFzZU9iamVjdCk7CisgICAgdm9pZCBzZXRJbmRleGluZ0xpbWl0KHVuc2lnbmVkKTsKKyAgICB2
b2lkIGFwcGVuZFN0cnVjdHVyZUlkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYpOworICAgIHZv
aWQgYXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYpOworICAgIHZvaWQg
ZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KEpTT2JqZWN0Kik7CisKKyAgICBFbnVtZXJhdG9y
RW50cnkqIHRha2VOZXh0RW50cnkoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2hlYWRFbnRyeSkg
eworICAgICAgICAgICAgQVNTRVJUKCFtX3RhaWxFbnRyeSk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBFbnVtZXJhdG9yRW50cnkqIHJlc3VsdCA9IG1f
aGVhZEVudHJ5LmdldCgpOworICAgICAgICBFbnVtZXJhdG9yRW50cnkqIG5ld0hlYWQgPSByZXN1
bHQtPm5leHQoKTsKKyAgICAgICAgaWYgKCFuZXdIZWFkKSB7CisgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IG1fdGFpbEVudHJ5KTsKKyAgICAgICAgICAgIG1fdGFpbEVudHJ5ID0gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgbV9oZWFk
RW50cnkuc2V0V2l0aG91dFdyaXRlQmFycmllcihuZXdIZWFkKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNvbnZlcnRUb0dl
bmVyaWNFbnVtZXJhdGlvbihWTSYsIEpTT2JqZWN0KiBiYXNlLCBFbnVtZXJhdG9yRW50cnkqKTsK
KworcHJpdmF0ZToKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mKTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwg
fCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBj
b25zdCBFbnVtZXJhdG9yRW50cnkmIGN1cnJlbnRFbnRyeSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV90YWlsRW50cnkpOworICAgICAgICByZXR1cm4gKm1fdGFpbEVudHJ5OworICAg
IH0KKworICAgIEVudW1lcmF0b3JFbnRyeSYgY3VycmVudEVudHJ5KCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3RhaWxFbnRyeSk7CisgICAgICAgIHJldHVybiAqbV90YWlsRW50cnk7CisgICAg
fQorCisgICAgT3duUHRyPFZlY3RvcjxJZGVudGlmaWVyPj4gbV9jdXJyZW50U3RydWN0dXJlSWRl
bnRpZmllcnM7CisgICAgT3duUHRyPFZlY3RvcjxJZGVudGlmaWVyPj4gbV9jdXJyZW50R2VuZXJp
Y0lkZW50aWZpZXJzOworICAgIFdyaXRlQmFycmllcjxFbnVtZXJhdG9yRW50cnk+IG1faGVhZEVu
dHJ5OworICAgIEVudW1lcmF0b3JFbnRyeSogbV90YWlsRW50cnk7Cit9OworCitpbmxpbmUgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkUHJvcGVydHlF
bnVtZXJhdG9yKCkKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IuZ2V0
KCk7Cit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRQcm9wZXJ0
eUVudW1lcmF0b3IoVk0mIHZtLCBjb25zdCBTdHJ1Y3R1cmUqLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIHZhbHVlKQoreworICAgIG1fY2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yLnNldCh2bSwg
dGhpcywgdmFsdWUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTSW5kZXhTdHJpbmcuaCIKKyNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTI3NSw2ICsyNzcsMjkgQEAgaW5saW5lIGJvb2wgaXNQcm90b3R5cGVDaGFpbk5vcm1hbGl6ZWQo
SgogICAgIH0KIH0KIAoraW5saW5lIEpTSW5kZXhTdHJpbmcqIGpzSW5kZXhTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCB1aW50MzJfdCBpbmRleCkKK3sKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhp
cy4KKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
anNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2Up
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBzdHJ1Y3R1cmUtPmNhY2hlZFByb3BlcnR5RW51bWVyYXRvcigpOworICAgIGlm
IChlbnVtZXJhdG9yKQorICAgICAgICByZXR1cm4gZW51bWVyYXRvcjsKKworICAgIGVudW1lcmF0
b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisgICAgYmFzZS0+bWV0
aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRm9yRW51bWVyYXRpb24oYmFzZSwgZW51bWVy
YXRvcik7CisgICAgc3RydWN0dXJlLT5zZXRDYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3Iodm0sIGVu
dW1lcmF0b3IpOworICAgIHJldHVybiBlbnVtZXJhdG9yOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIE9wZXJhdGlvbnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGVmZXJHQzsKK2NsYXNzIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb3Bl
cnR5TmFtZUFycmF5OwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwpAQCAtMjk2LDYgKzI5
Nyw5IEBAIHB1YmxpYzoKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNh
Y2hlKCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIHZvaWQg
Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAKKyAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcihW
TSYsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogY2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKCkgY29uc3Q7CisKICAgICBKU1N0cmluZyog
b2JqZWN0VG9TdHJpbmdWYWx1ZSgpCiAgICAgewogICAgICAgICBpZiAoIW1faGFzUmFyZURhdGEp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsMjEgQEAg
aW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIFN0cnVjdHVyZQogICAgIHJldHVybiByYXJl
RGF0YSgpLT5lbnVtZXJhdGlvbkNhY2hlKCk7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6
c2V0Q2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yKQoreworICAgIEFTU0VSVCghaXNEaWN0aW9uYXJ5KCkpOworICAgIGlm
ICghbV9oYXNSYXJlRGF0YSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgcmFy
ZURhdGEoKS0+c2V0Q2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKHZtLCB0aGlzLCBlbnVtZXJhdG9y
KTsKK30KKworaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlOjpjYWNo
ZWRQcm9wZXJ0eUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmICghbV9oYXNSYXJlRGF0YSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPmNhY2hlZFBy
b3BlcnR5RW51bWVyYXRvcigpOworfQorCiBpbmxpbmUgSlNWYWx1ZSBTdHJ1Y3R1cmU6OnByb3Rv
dHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogewogICAg
IGlmIChpc09iamVjdCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogY2xhc3MgU3RydWN0
dXJlOwogCkBAIC01OCw2ICs1OSw5IEBAIHB1YmxpYzoKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7CiAgICAgdm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZN
JiwgY29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUp
OwogCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eUVudW1lcmF0
b3IoKTsKKyAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcihWTSYsIGNvbnN0IFN0
cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogdmFsdWUpOworCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTY5LDYgKzczLDcgQEAgcHJpdmF0
ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwogICAgIFdyaXRlQmFy
cmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdyaXRlQmFycmllcjxK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7CisgICAgV3JpdGVCYXJy
aWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3I7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDE3MDIxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYgKzI1Niw4IEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBKU1N0cmluZzo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IG5vdEFuT2JqZWN0U3RydWN0dXJlLnNldCgqdGhpcywgSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3Ry
dWN0dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBlbnVtZXJhdG9yRW50cnlTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBHZXR0ZXJT
ZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhcGlXcmFw
cGVyU3RydWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBKU1Njb3BlU3RydWN0dXJlLnNldCgqdGhpcywg
SlNTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzAyMTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVj
dHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CiAg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlOwor
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJl
OworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBlbnVtZXJhdG9yRW50cnlTdHJ1Y3R1cmU7CiAg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGdldHRlclNldHRlclN0cnVjdHVyZTsKICAgICAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gYXBpV3JhcHBlclN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gSlNTY29wZVN0cnVjdHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233765</attachid>
            <date>2014-06-24 16:46:53 -0700</date>
            <delta_ts>2014-07-02 18:40:25 -0700</delta_ts>
            <desc>more</desc>
            <filename>bug-134142-20140624164632.patch</filename>
            <type>text/plain</type>
            <size>167391</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNDA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0NiBA
QAorMjAxNC0wNi0yNCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBhZGRzIGEgbmV3IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciB0aGF0IGhhbmRsZXMgdGhlIGNh
Y2hpbmcgb2YgYSBzZXQgb2YgcHJvcGVydHkgbmFtZXMgCisgICAgICAgIGZvciBhbiBvYmplY3Qg
d2l0aCBhIHBhcnRpY3VsYXIgU3RydWN0dXJlLiBJZiB0aGUgb2JqZWN0J3MgU3RydWN0dXJlIG9y
IGl0cyBwcm90b3R5cGUgY2hhaW4gY2hhbmdlcywgCisgICAgICAgIHRoZSBlbnVtZXJhdG9yIHdp
bGwgYmUgY29udmVydGVkIHRvIGEgZnVsbHkgZ2VuZXJpYyBtb2RlIHdoZXJlIGl0IHdpbGwgY2hl
Y2sgaGFzUHJvcGVydHkgZm9yIGVhY2ggCisgICAgICAgIG9mIGl0cyByZW1haW5pbmcgY2FjaGVk
IHByb3BlcnR5IG5hbWVzLgorIAorICAgICAgICBJdCBhbHNvIGFkZHMgYSBudW1iZXIgb2YgbmV3
IGJ5dGVjb2RlcyB0byBzdXBwb3J0IG1vcmUgZXhwbGljaXQgaXRlcmF0aW9uIG9mIHByb3BlcnR5
IG5hbWVzLgorICAgICAgICAKKyAgICAgICAgVGhlIGNoYW5nZXMgdG8gdGhlIGJ5dGVjb2RlIGdl
bmVyYXRvciBhbHNvIGluY2x1ZGUgZXhwbGljaXQgZHVwbGljYXRpb24gb2YgdGhlIGZvci1pbiBs
b29wIGJvZHkgCisgICAgICAgIHRvIHNlZ3JlZ2F0ZSBpdGVyYXRpb24gb3ZlciBpbmRleGVkIHBy
b3BlcnR5IG5hbWVzLCBTdHJ1Y3R1cmUtYmFzZWQgcHJvcGVydHkgbmFtZXMgKGkuZS4gcHJvcGVy
dHkgCisgICAgICAgIG5hbWVzIHN0b3JlZCBkaXJlY3RseSBpbiB0aGUgU3RydWN0dXJlKSwgYW5k
IGdlbmVyaWMgcHJvcGVydHkgbmFtZXMgKGkuZS4gcHJvcGVydGllcyBhYm91dCB3aGljaCAKKyAg
ICAgICAgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgd2l0aCByZWdhcmQgdG8gdGhlIG5hbWUgb2Yg
dGhlIHByb3BlcnR5LCB0aGUgbG9jYXRpb24gb2YgdGhlIHByb3BlcnR5LCAKKyAgICAgICAgb3Ig
ZXZlbiB3aGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IHN0aWxsIGNvbnRhaW5zIHRoYXQgcHJvcGVy
dHkpLiBTcGxpdHRpbmcgdGhlIGxvb3AgaW50byBpdHMgCisgICAgICAgIGxvZ2ljYWwgY29tcG9u
ZW50cyBhbmQgdGhlbiBleHBsaWNpdGx5IGl0ZXJhdGluZyB1cCB0aGUgcHJvdG90eXBlIGNoYWlu
IGFsbG93cyB0aGUgcnVudGltZSBtb3JlIAorICAgICAgICBvcHBvcnR1bml0aWVzIHRvIG9wdGlt
aXplIHRoZSBvdmVyYWxsIGl0ZXJhdGlvbi4gCisKKyAgICAgICAgKiBBUEkvQVBJQ2FzdC5oOgor
ICAgICAgICAodG9KUyk6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQ2FsbGJh
Y2tPYmplY3QuaDoKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOgor
ICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgICogQVBJL0pTT2JqZWN0UmVmLmNwcDoKKyAgICAgICAgKEpT
T2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVs
YXRvckFkZE5hbWUpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAo
RGVwcmVjYXRlZDo6anNUb0luc3BlY3RvclZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRl
Y29kZUJhc2ljQmxvY2suY3BwOgorICAgICAgICAoSlNDOjppc0JyYW5jaCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVV
c2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAg
ICAgICAoSlNDOjpPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6cG9zc2libGVEZWZhdWx0UHJvcGVy
dHlDb3VudCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5n
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVja1Byb3BlcnR5RW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dEluZGV4
ZWRQcm9wZXJ0eU5hbWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5l
eHRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdE5leHRHZW5lcmljUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROZXh0RW51bWVyYXRvckVudHJ5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRHZXRQcm90b3R5cGUpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpPcHRpbWl6ZWRGb3JJblNjb3BlOjpP
cHRpbWl6ZWRGb3JJblNjb3BlKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpGb3JJbk5vZGU6OmlkZW50aWZpZXJGb3JCb3VuZExvY2FsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcik6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJT
Y29wZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyU2NvcGU6OmdldE93blByb3BlcnR5TmFt
ZXMpOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaDoKKyAgICAgICAgKiBpbnRl
cnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6ZW51bWVyYXRvckVu
dHJ5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9lbnRlcik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAg
ICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIGxsaW50
L0xMSW50U2xvd1BhdGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c206CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVu
dHMuY3BwOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmNhbkl0ZXJhdGVJbmRpY2VzUXVpY2ts
eSk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6Z2V0T3duR2VuZXJpY0luZGV4ZWRQcm9wZXJ0
aWVzKToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6Omlz
QXJndW1lbnQpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1NvcnQpOgorICAgICAgICAqIHJ1bnRpbWUvQnV0dGVyZmx5
Lmg6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6cHVibGljTGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6QnV0dGVyZmx5Ojp2ZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpCdXR0ZXJmbHk6Omlu
ZGV4aW5nUGF5bG9hZCk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91c0RvdWJs
ZSk6CisgICAgICAgIChKU0M6OkJ1dHRlcmZseTo6Y29udGlndW91cyk6CisgICAgICAgICogcnVu
dGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaDoKKyAgICAg
ICAgKEpTQzo6SW5kZXhpbmdIZWFkZXI6OnB1YmxpY0xlbmd0aCk6CisgICAgICAgICogcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkpT
QXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9KU0FycmF5QnVmZmVyLmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y2xhc3NO
YW1lKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KEpTQzo6SlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxs
Lmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNG
dW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pT
SW5kZXhTdHJpbmcuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNOb3RBbk9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogcnVudGltZS9KU05vdEFuT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU09O
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4
dFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3YWxrKToKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpjYW5JdGVyYXRlSW5kaWNlc1F1aWNrbHkpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Z2V0T3duR2VuZXJpY0luZGV4ZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmdldFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkVudW1lcmF0
b3JFbnRyeTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OkVudW1lcmF0
b3JFbnRyeSk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OmRlc3Ryb3kpOgorICAgICAgICAoSlND
OjpFbnVtZXJhdG9yRW50cnk6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpFbnVtZXJh
dG9yRW50cnk6OmFkZFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpFbnVt
ZXJhdG9yRW50cnk6OmFkZEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbnZlcnRUb0dlbmVyaWNFbnVtZXJhdGlvbik6CisgICAgICAgIChK
U0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpkZXN0cm95KToKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp3aWxsU3RhcnRBcHBlbmRpbmdGb3JP
YmplY3QpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnNldEluZGV4
aW5nTGltaXQpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmFwcGVu
ZFN0cnVjdHVyZUlkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpkaWRGaW5pc2hBcHBlbmRpbmdGb3JPYmplY3QpOgorICAgICAgICAo
SlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbnRhaW5zSWRlbnRpZmllcik6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5TmFtZUVudW1lcmF0b3JBZ2dyZWdhdG9yOjp+UHJvcGVydHlOYW1l
RW51bWVyYXRvckFnZ3JlZ2F0b3IpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yQWdncmVnYXRvcjo6dm0pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
QWdncmVnYXRvcjo6c2V0SW5kZXhpbmdMaW1pdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFt
ZUVudW1lcmF0b3JBZ2dyZWdhdG9yOjphcHBlbmRTdHJ1Y3R1cmVJZGVudGlmaWVyKToKKyAgICAg
ICAgKEpTQzo6UHJvcGVydHlOYW1lRW51bWVyYXRvckFnZ3JlZ2F0b3I6OmFwcGVuZEdlbmVyaWNJ
ZGVudGlmaWVyKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lRW51bWVyYXRvckFnZ3JlZ2F0
b3I6OndpbGxTdGFydEFwcGVuZGluZ0Zvck9iamVjdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
TmFtZUVudW1lcmF0b3JBZ2dyZWdhdG9yOjpkaWRGaW5pc2hBcHBlbmRpbmdGb3JPYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkVudW1lcmF0b3JFbnRyeTo6c2V0TmV4dCk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JF
bnRyeTo6bmV4dCk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6c2V0U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpzZXRPYmplY3QpOgorICAgICAgICAo
SlNDOjpFbnVtZXJhdG9yRW50cnk6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkVudW1lcmF0
b3JFbnRyeTo6b2JqZWN0KToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpzZXRJbmRl
eGluZ0xpbWl0KToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjppbmRleGluZ0xpbWl0
KToKKyAgICAgICAgKEpTQzo6RW51bWVyYXRvckVudHJ5OjpoYXNOZXh0SW5kZXhlZFByb3BlcnR5
TmFtZSk6CisgICAgICAgIChKU0M6OkVudW1lcmF0b3JFbnRyeTo6bmV4dEluZGV4ZWRQcm9wZXJ0
eU5hbWUpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6Om5leHRTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWUpOgorICAgICAgICAoSlNDOjpFbnVtZXJhdG9yRW50cnk6Om5leHRHZW5lcmljUHJv
cGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Omhl
YWRFbnRyeSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3VycmVu
dEVudHJ5KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpoYXNHZW5l
cmljSWRlbnRpZmllcnMpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yQWdn
cmVnYXRvcjo6UHJvcGVydHlOYW1lRW51bWVyYXRvckFnZ3JlZ2F0b3IpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcik6Cisg
ICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pT
UHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVu
dGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6b2Jq
ZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0
Q29uc3RydWN0b3JLZXlzKToKKyAgICAgICAgKEpTQzo6ZGVmaW5lUHJvcGVydGllcyk6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yU2VhbCk6CisgICAgICAgIChKU0M6Om9iamVjdENv
bnN0cnVjdG9yRnJlZXplKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc1NlYWxl
ZCk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9ySXNGcm96ZW4pOgorICAgICAgICAq
IHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpqc0luZGV4U3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6anNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1l
L1Byb3BlcnR5TmFtZUFnZ3JlZ2F0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5
TmFtZUFnZ3JlZ2F0b3I6On5Qcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yKToKKyAgICAgICAgKiBydW50
aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJy
YXlBZ2dyZWdhdG9yOjp+UHJvcGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yOjp2bSk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5TmFtZUFycmF5QWdncmVnYXRvcjo6c2V0SW5kZXhpbmdMaW1pdCk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5TmFtZUFycmF5QWdncmVnYXRvcjo6YXBwZW5kU3RydWN0dXJlSWRlbnRpZmllcik6
CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5QWdncmVnYXRvcjo6YXBwZW5kR2VuZXJp
Y0lkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0b3I6
OndpbGxTdGFydEFwcGVuZGluZ0Zvck9iamVjdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFt
ZUFycmF5QWdncmVnYXRvcjo6ZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KToKKyAgICAgICAg
KiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFt
ZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFy
cmF5QWdncmVnYXRvcjo6UHJvcGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yKToKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yOjphcnJheSk6CisgICAgICAgICogcnVudGlt
ZS9SZWdFeHBNYXRjaGVzQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTWF0Y2hlc0FycmF5
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5oOgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKToK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Omhhc0RlbGV0ZWRJbmRleGVkUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
c2V0SGFzRGVsZXRlZEluZGV4ZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzZXRDYWNoZWRQcm9wZXJ0
eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhY2hlZFByb3BlcnR5RW51
bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uaDoKKwogMjAxNC0wNi0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgW2Z0bG9wdF0gUmVuYW1lZCBEZWJ1Z2dlckFjdGl2YXRpb24gdG8gRGVidWdn
ZXJTY29wZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCShyZXZpc2lvbiAx
NzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEyLDkgKzExMiw5IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTKEpTT2Jq
ZWN0UmVmIG8KICAgICByZXR1cm4gb2JqZWN0OwogfQogCi1pbmxpbmUgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSogdG9KUyhKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yUmVmIGEpCitpbmxpbmUgSlND
OjpQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yKiB0b0pTKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JS
ZWYgYSkKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OlByb3BlcnR5TmFtZUFy
cmF5Kj4oYSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpQcm9wZXJ0eU5hbWVB
Z2dyZWdhdG9yKj4oYSk7CiB9CiAKIGlubGluZSBKU0M6OlZNKiB0b0pTKEpTQ29udGV4dEdyb3Vw
UmVmIGcpCkBAIC0xNTgsNyArMTU4LDcgQEAgaW5saW5lIEpTR2xvYmFsQ29udGV4dFJlZiB0b0ds
b2JhbFJlZihKUwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTR2xvYmFsQ29udGV4dFJl
Zj4oZSk7CiB9CiAKLWlubGluZSBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yUmVmIHRvUmVmKEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkqIGwpCitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRv
clJlZiB0b1JlZihKU0M6OlByb3BlcnR5TmFtZUFnZ3JlZ2F0b3IqIGwpCiB7CiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZj4obCk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAkocmV2
aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogCiAgICAg
c3RhdGljIGJvb2wgY3VzdG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKIAotICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKIAog
ICAgIHN0YXRpYyBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3Ry
dWN0RGF0YSYpOwogICAgIHN0YXRpYyBDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxs
RGF0YSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OTgsNyArNDk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OgogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50Pgotdm9pZCBKU0NhbGxiYWNrT2JqZWN0
PFBhcmVudD46OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3ZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9w
ZXJ0eU5hbWVBZ2dyZWdhdG9yJiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKICAgICBKU0NhbGxiYWNrT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQ2FsbGJhY2tP
YmplY3QqPihvYmplY3QpOwogICAgIEpTQ29udGV4dFJlZiBleGVjUmVmID0gdG9SZWYoZXhlYyk7
CkBAIC01MTcsNyArNTE3LDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93
bk5vbgogICAgICAgICAgICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOwog
ICAgICAgICAgICAgICAgIFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgp
OwogICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0
dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkpCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKElkZW50aWZpZXIoZXhlYywgbmFtZSkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApAQCAtNTI4LDEyICs1MjgsMTIg
QEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBhcmVudD46OmdldE93bk5vbgogICAgICAgICAgICAg
ICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgICAgIFN0
YXRpY0Z1bmN0aW9uRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAg
ICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51
bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFtZSkpOworICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKElkZW50
aWZpZXIoZXhlYywgbmFtZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIFBhcmVudDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIFBhcmVudDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgUGFyZW50PgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U09iamVjdFJlZi5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzQsOCArNjc0LDkgQEAg
SlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZQogCiAgICAgSlNPYmplY3Qq
IGpzT2JqZWN0ID0gdG9KUyhvYmplY3QpOwogICAgIEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcHJv
cGVydHlOYW1lcyA9IG5ldyBPcGFxdWVKU1Byb3BlcnR5TmFtZUFycmF5KHZtKTsKLSAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBhcnJheSh2bSk7Ci0gICAganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dFByb3BlcnR5TmFtZXMoanNPYmplY3QsIGV4ZWMsIGFycmF5LCBFeGNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0b3IgYWdncmVnYXRvcihleGVj
KTsKKyAgICBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhleGVjLCBq
c09iamVjdCwgYWdncmVnYXRvciwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgUHJv
cGVydHlOYW1lQXJyYXkmIGFycmF5ID0gYWdncmVnYXRvci5hcnJheSgpOwogCiAgICAgc2l6ZV90
IHNpemUgPSBhcnJheS5zaXplKCk7CiAgICAgcHJvcGVydHlOYW1lcy0+YXJyYXkucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaXplKTsKQEAgLTcxMSw3ICs3MTIsNyBAQCBKU1N0cmluZ1JlZiBKU1By
b3BlcnR5TmFtZUFycmF5R2V0TmFtZUF0CiAKIHZvaWQgSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRv
ckFkZE5hbWUoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZiBhcnJheSwgSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lKQogewotICAgIFByb3BlcnR5TmFtZUFycmF5KiBwcm9wZXJ0eU5hbWVzID0g
dG9KUyhhcnJheSk7CisgICAgUHJvcGVydHlOYW1lQWdncmVnYXRvciogcHJvcGVydHlOYW1lcyA9
IHRvSlMoYXJyYXkpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIocHJvcGVydHlOYW1lcy0+dm0o
KSk7Ci0gICAgcHJvcGVydHlOYW1lcy0+YWRkKHByb3BlcnR5TmFtZS0+aWRlbnRpZmllcihwcm9w
ZXJ0eU5hbWVzLT52bSgpKSk7CisgICAgcHJvcGVydHlOYW1lcy0+YXBwZW5kR2VuZXJpY0lkZW50
aWZpZXIocHJvcGVydHlOYW1lLT5pZGVudGlmaWVyKCZwcm9wZXJ0eU5hbWVzLT52bSgpKSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcwNDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgwNywxMCArODA3LDEzIEBACiAJCTI2MDBCNUE2MTUy
QkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyogSlNT
dHJpbmdKb2luZXIuY3BwICovOyB9OwogCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNT
dHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovOyB9Owog
CQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEyODI1Q0YxODM0MUYy
RDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsKKwkJMkEzMDBCMEExOTU4
QjAyODAwOENFMzhGIC8qIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMzAwQjA5MTk1OEIwMjgwMDhDRTM4RiAv
KiBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yLmggKi87IH07CiAJCTJBNDhEMTkxMTc3MjM2NUIwMEM2
NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAwRTJBMjMgLyogQVBJQ2FsbGJh
Y2tGdW5jdGlvbi5oICovOyB9OwogCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5h
Z2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJu
YWwuaCAqLzsgfTsKIAkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1
ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
QTRFQzkwOTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCAqLzsgfTsK
IAkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0RUM5MEExODYwRDZD
MjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJBNjNCQzQwMTk0QTM5OUUwMDg2MDNDOCAvKiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkE2M0JDM0UxOTRBMzk5RTAwODYwM0M4IC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAgKi87IH07CisJCTJBNjNCQzQxMTk0QTM5OUUwMDg2MDNDOCAvKiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBNjNCQzNGMTk0QTM5OUUwMDg2MDNDOCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCAqLzsgfTsKIAkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlX
cml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBNjgyOTVBMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE2RjQ2MjYxN0U5
NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3Bl
cmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMkE3QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3
IC8qIERlZmVyR0MuY3BwICovOyB9OwpAQCAtODE4LDYgKzgyMSw3IEBACiAJCTJBODM2Mzg2MThE
N0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTgzNjM4NDE4RDdEMEVFMDAwMEVCQ0Mg
LyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTJBODM2Mzg5MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NB
Y3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJBODM2Mzg3MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxi
YWNrLmNwcCAqLzsgfTsKIAkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2
aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBODM2Mzg4MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkE4NTQz
RDYxOTUyNTkzMDAwRDMzNDkwIC8qIEpTSW5kZXhTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBODU0M0Q1MTk1MjU5MzAwMEQzMzQ5MCAvKiBK
U0luZGV4U3RyaW5nLmggKi87IH07CiAJCTJBODgwNjc4MTkxMDdENTUwMENCMEJCQiAvKiBERkdG
dW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQTg4MDY3NjE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxp
c3QuY3BwICovOyB9OwogCQkyQTg4MDY3OTE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25X
aGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBODgwNjc3MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovOyB9
OwogCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUFBQTMxMDE4QkQ0OUQx
MDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI5NDEsMTEgKzI5NDUsMTQgQEAKIAkJMjYwMEI1QTQx
NTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxh
eWVkUmVsZWFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlbGF5
ZWRSZWxlYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkEzMDBCMDkx
OTU4QjAyODAwOENFMzhGIC8qIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlOYW1lQWdncmVnYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIwODUgLyogR0NTZWdtZW50
ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFy
cmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMzQzRjc3MThBMTc0OUQwMDM5
QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01hbmFnZWRWYWx1ZUlu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBNEVDOTA5MTg2MEQ2QzIw
MDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkE2M0JDM0UxOTRBMzk5RTAwODYwM0M4
IC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyQTYzQkMzRjE5NEEzOTlFMDA4NjAzQzggLyogSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTY4Mjk1
QTE4NzVGODA1MDBCNkMzRTIgLyogQ29weVdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDb3B5V3JpdGVCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBPcGVyYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJHQy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTUzLDYgKzI5NjAsNyBAQAogCQkyQTgzNjM4
NDE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBODM2Mzg3MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NB
Y3Rpdml0eUNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQTgzNjM4ODE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBODU0M0Q1MTk1MjU5MzAwMEQzMzQ5MCAv
KiBKU0luZGV4U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW5k
ZXhTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkE4ODA2NzYxOTEwN0Q1
NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcDsgcGF0aCA9IGRmZy9E
RkdGdW5jdGlvbldoaXRlbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
ODgwNjc3MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGdW5jdGlvbldoaXRlbGlzdC5oOyBwYXRoID0g
ZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTJBQUFBMzEwMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSURCbG9iLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00OTQwLDYgKzQ5NDgsMTAgQEAKIAkJCQkxNDIwQkU3QTEwQUE2RERC
MDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkxMTk0
MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlDMkI2RDc1MjE4QTMzNzkzMDA0QTkzMDEgLyog
V3JpdGVCYXJyaWVySW5saW5lcy5oICovLAorCQkJCTJBNjNCQzNFMTk0QTM5OUUwMDg2MDNDOCAv
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwICovLAorCQkJCTJBNjNCQzNGMTk0QTM5OUUw
MDg2MDNDOCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLywKKwkJCQkyQTg1NDNENTE5
NTI1OTMwMDBEMzM0OTAgLyogSlNJbmRleFN0cmluZy5oICovLAorCQkJCTJBMzAwQjA5MTk1OEIw
MjgwMDhDRTM4RiAvKiBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0
aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNjAyMiw2ICs2MDM0
LDcgQEAKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8qIERG
R0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MTRDQTUxNkVBOTJGMjAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTJBNjNCQzQxMTk0QTM5OUUwMDg2MDNDOCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Js
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1REIgLyogREZH
QmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MEIwODMzMTdBMEI3OUIw
MERBRjE0QiAvKiBERkdCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovLApAQCAtNjUyOCw2ICs2
NTQxLDcgQEAKIAkJCQlCQzE4QzQ0ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDRCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQYXJzZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTJBODU0M0Q2MTk1MjU5MzAwMEQzMzQ5MCAvKiBKU0luZGV4U3Ry
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA1MkMzNTBGQjc5MjE5MDA0OEZEQzMgLyogUGFy
c2VyQXJlbmEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0NBRTQ1MTZEMENGNzQwMEQwQzY1QiAv
KiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAwNjQw
QTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NzMsNiArNjY4Nyw3IEBA
CiAJCQkJODY2NzM5RDMxM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhB
cnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkEzMDBCMEExOTU4QjAyODAwOENFMzhGIC8qIFBy
b3BlcnR5TmFtZUFnZ3JlZ2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQwMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
RjA4Q0YxNDZDNzYzMzAwMDQ3MkE5IC8qIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3QjYwMTgyMTYzOUZEMkEwMDM3MkJBMyAvKiBVbmxpbmtlZENvZGVCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjAwLDYgKzc2MTUsNyBAQAogCQkJCTE0N0YzOUM1MTA3
RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QzYxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTJBNjNCQzQwMTk0QTM5OUUwMDg2MDNDOCAvKiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8q
IERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJG
QTMwMDNERkQzQSAvKiBEZWJ1Z2dlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBN0E1
OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCShyZXZp
c2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDkgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGpzVG9JbgogICAgICAgICB9CiAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGluc3BlY3Rvck9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhzY3JpcHRTdGF0ZSk7Ci0gICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIHNjcmlwdFN0
YXRlLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAg
UHJvcGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yIGFnZ3JlZ2F0b3Ioc2NyaXB0U3RhdGUpOworICAg
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMoc2NyaXB0U3Rh
dGUsIG9iamVjdCwgYWdncmVnYXRvciwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAg
ICAgIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzID0gYWdncmVnYXRvci5hcnJheSgp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMuc2l6ZSgpOyBp
KyspIHsKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUgPSBwcm9wZXJ0eU5hbWVz
W2ldOwogICAgICAgICAgICAgSlNWYWx1ZSBwcm9wZXJ0eVZhbHVlID0gb2JqZWN0LT5nZXQoc2Ny
aXB0U3RhdGUsIG5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMSBAQCBzdGF0aWMgYm9vbCBpc0JyYW5jaChPcGNvZGVJ
RCBvcGNvZGVJRCkKICAgICBjYXNlIG9wX2dldF9wbmFtZXM6CiAgICAgY2FzZSBvcF9uZXh0X3Bu
YW1lOgogICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgorICAgIGNhc2Ugb3BfY2hlY2tf
cHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9wX25leHRfaW5kZXhlZF9wbmFtZToKKyAg
ICBjYXNlIG9wX25leHRfc3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfbmV4dF9nZW5lcmlj
X3BuYW1lOgorICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX2VudHJ5OgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCShyZXZp
c2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXN0Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsMTUgQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3RvX3ByaW1pdGl2ZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfZ2V0X3BuYW1lcyIsICJsZW5ndGgiIDogNiB9LAogICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfbmV4dF9wbmFtZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6IDMg
fSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCIsICJs
ZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9faW5kZXhfc3RyaW5n
IiwgImxlbmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jaGVja19wcm9w
ZXJ0eV9lbnVtZXJhdG9yIiwgImxlbmd0aCIgOiA1IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6
ICJvcF9uZXh0X2luZGV4ZWRfcG5hbWUiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX25leHRfc3RydWN0dXJlX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCisgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9uZXh0X2dlbmVyaWNfcG5hbWUiLCAibGVuZ3RoIiA6IDUg
fSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25leHRfZW51bWVyYXRvcl9lbnRyeSIsICJs
ZW5ndGgiIDogNiB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X3Byb3RvdHlwZSIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2ZV9zY29w
ZSIsICJsZW5ndGgiIDogNiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zyb21f
c2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1dF90
b19zY29wZSIsICJsZW5ndGgiIDogNyB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MSw2ICs5MSw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9wX2No
ZWNrX3Byb3BlcnR5X2VudW1lcmF0b3I6CiAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoK
ICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKQEAgLTExNiw2
ICsxMTcsMTMgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBm
dW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfZ2V0X3Byb3Rv
dHlwZToKKyAgICBjYXNlIG9wX25leHRfZ2VuZXJpY19wbmFtZToKKyAgICBjYXNlIG9wX25leHRf
c3RydWN0dXJlX3BuYW1lOgorICAgIGNhc2Ugb3BfbmV4dF9pbmRleGVkX3BuYW1lOgorICAgIGNh
c2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJs
ZV9sZW5ndGg6CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9pbml0
X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBj
YXNlIG9wX3B1c2hfbmFtZV9zY29wZToKQEAgLTE0Nyw2ICsxNTUsNyBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfZW50cnk6CiAgICAgY2FzZSBv
cF9nZXRfYnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbDoKICAgICBjYXNl
IG9wX2luOgpAQCAtMjQ0LDYgKzI1Myw3IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9m
ZnNldChDb2RlQmwKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNv
ZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAg
ICAvLyBUaGVzZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2FzZSBvcF9jaGVja19wcm9w
ZXJ0eV9lbnVtZXJhdG9yOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgY2Fz
ZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6
CkBAIC0zNjYsNiArMzc2LDE0IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChD
b2RlQmwKICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF9kZWxfYnlf
aWQ6CiAgICAgY2FzZSBvcF9kZWxfYnlfdmFsOgorICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgY2FzZSBv
cF90b19pbmRleF9zdHJpbmc6CisgICAgY2FzZSBvcF9uZXh0X2luZGV4ZWRfcG5hbWU6CisgICAg
Y2FzZSBvcF9uZXh0X3N0cnVjdHVyZV9wbmFtZToKKyAgICBjYXNlIG9wX25leHRfZ2VuZXJpY19w
bmFtZToKKyAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9lbnRyeToKKyAgICBjYXNlIG9wX2dl
dF9wcm90b3R5cGU6CiAgICAgY2FzZSBvcF91bnNpZ25lZDogewogICAgICAgICBmdW5jdG9yKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODYsNiArMTM4
Niw4NiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgaXQgKz0g
T1BDT0RFX0xFTkdUSChvcF9uZXh0X3BuYW1lKSAtIDE7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2Ug
PSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJnZXRfcHJvcGVydHlfZW51bWVyYXRvciIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoYmFzZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAgICAgICAg
ICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudHJ5ID0gaXRb
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywg
bG9jYXRpb24sIGl0LCAiZ2V0X2VudW1lcmFibGVfbGVuZ3RoIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShl
bnRyeSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0
WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
InRvX2luZGV4X3N0cmluZyIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVn
aXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4X3N0cmluZykgLSAxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jaGVja19wcm9wZXJ0
eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzFdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IGVudW1lcmF0b3JFbnRyeSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCBvZmZzZXQgPSBpdFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5k
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjaGVja19wcm9wZXJ0eV9lbnVtZXJhdG9yIik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlZCgtPiVkKSIsIHJlZ2lzdGVy
TmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShlbnVtZXJhdG9yRW50cnkpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNl
dCk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2NoZWNrX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbmV4dF9pbmRleGVkX3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3JFbnRyeSA9IGl0WzJdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXh0X2lu
ZGV4ZWRfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCki
LCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yRW50cnkp
LmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBpdCArPSBP
UENPREVfTEVOR1RIKG9wX25leHRfaW5kZXhlZF9wbmFtZSkgLSAxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXh0X3N0cnVjdHVyZV9wbmFtZTogewor
ICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBl
bnVtZXJhdG9yRW50cnkgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0
ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAibmV4dF9zdHJ1Y3R1cmVfcG5hbWUiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcywgJWQoLT4lZCkiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yRW50cnkpLmRhdGEoKSwgb2Zmc2V0LCBsb2NhdGlvbiAr
IG9mZnNldCk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX25leHRfc3RydWN0
dXJlX3BuYW1lKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX25leHRfZ2VuZXJpY19wbmFtZTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBlbnVtZXJhdG9yRW50cnkgPSBpdFsyXS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gaXRbM10udS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV4dF9n
ZW5lcmljX3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkKC0+JWQp
IiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvckVudHJ5
KS5kYXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgaXQgKz0g
T1BDT0RFX0xFTkdUSChvcF9uZXh0X2dlbmVyaWNfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX2VudHJ5OiB7
CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW50cnkgPSBpdFszXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzRdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBvZmZzZXQgPSBpdFs1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJuZXh0X2VudW1lcmF0
b3JfZW50cnkiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVzLCAlZCgt
PiVkKSIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKGVudHJ5KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5k
YXRhKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgaXQgKz0gT1BD
T0RFX0xFTkdUSChvcF9uZXh0X2VudW1lcmF0b3JfZW50cnkpIC0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3RvdHlwZTogeworICAgICAg
ICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0g
aXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiZ2V0X3Byb3RvdHlwZSIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X3Byb3RvdHlw
ZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9w
dXNoX3dpdGhfc2NvcGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5k
OwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRoX3Njb3BlIiwgcjApOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsOCArMTE3
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIHNpemVfdCBj
b3VudCA9IDA7Ci0gICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZUFycmF5KCZ2
bSk7Ci0gICAgICAgIHByb3RvdHlwZS0+c3RydWN0dXJlKCktPmdldFByb3BlcnR5TmFtZXNGcm9t
U3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVBcnJheSwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5QWdncmVnYXRvciBhZ2dyZWdhdG9yKHZtKTsK
KyAgICAgICAgcHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1
Y3R1cmUodm0sIGFnZ3JlZ2F0b3IsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lQXJyYXkgPSBhZ2dyZWdhdG9yLmFycmF5
KCk7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBw
cm9wZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5hbWVBcnJheS5kYXRhKCktPnByb3BlcnR5TmFt
ZVZlY3RvcigpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZVZl
Y3Rvci5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHByb3RvdHlw
ZS0+Z2V0RGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWVWZWN0b3JbaV0pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkxLDE5ICsx
MzkxLDI2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXIKIAogUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5KQogewotICAgIGZvciAoc2l6
ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNrLnNpemUoKTsgaSA+IDA7IGktLSkgewotICAgICAg
ICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2kgLSAxXTsKLSAg
ICAgICAgaWYgKGNvbnRleHQucHJvcGVydHlSZWdpc3RlciA9PSBwcm9wZXJ0eSkgewotICAgICAg
ICAgICAgZW1pdE9wY29kZShvcF9nZXRfYnlfcG5hbWUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYmFzZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvcGVydHktPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNv
bnRleHQuZXhwZWN0ZWRTdWJzY3JpcHRSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5pdGVyUmVnaXN0ZXItPmluZGV4KCkpOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuaW5kZXhSZWdpc3Rlci0+aW5k
ZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZHN0OworICAgIGZvciAoc2l6ZV90IGkgPSBtX29w
dGltaXplZEZvckluU2NvcGVzLnNpemUoKTsgaSA+IDA7IGktLSkgeworICAgICAgICBPcHRpbWl6
ZWRGb3JJblNjb3BlJiBzY29wZSA9IG1fb3B0aW1pemVkRm9ySW5TY29wZXNbaSAtIDFdOworICAg
ICAgICBpZiAoc2NvcGUubG9jYWwuZ2V0KCkgIT0gcHJvcGVydHkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBzd2l0Y2ggKHNjb3BlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBPcHRp
bWl6ZWRGb3JJblNjb3BlOjpJbmRleGVkRm9ySW5TY29wZToKKyAgICAgICAgY2FzZSBPcHRpbWl6
ZWRGb3JJblNjb3BlOjpTdHJ1Y3R1cmVGb3JJblNjb3BlOgorICAgICAgICAgICAgLy8gVE9ETzog
VXNlIEpTSW5kZXhTdHJpbmcKKyAgICAgICAgICAgIC8vIFRPRE86IFVzZSBKU1Byb3BlcnR5TmFt
ZVN0cmluZworICAgICAgICAgICAgcHJvcGVydHkgPSBzY29wZS5pbmRleC5nZXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAg
ICAgYnJlYWs7CiAgICAgfQorCiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxl
ID0gbmV3QXJyYXlQcm9maWxlKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoa2lsbChkc3QpKTsKQEAgLTI1MTYsNCArMjUyMywxMjggQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgIGVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJn
ZXQoKSk7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29w
ZShjb25zdCBJZGVudGlmaWVyKiBib3VuZExvY2FsLCBSZWdpc3RlcklEKiBpbmRleCkKK3sKKyAg
ICBpZiAoIWJvdW5kTG9jYWwpCisgICAgICAgIHJldHVybjsKKyAgICBMb2NhbCBsb2NhbCA9IHRo
aXMtPmxvY2FsKCpib3VuZExvY2FsKTsKKyAgICBBU1NFUlQobG9jYWwuZ2V0KCkpOworICAgIE9w
dGltaXplZEZvckluU2NvcGUgbmV3U2NvcGUoT3B0aW1pemVkRm9ySW5TY29wZTo6SW5kZXhlZEZv
ckluU2NvcGUsIGxvY2FsLmdldCgpLCBpbmRleCk7CisgICAgbV9vcHRpbWl6ZWRGb3JJblNjb3Bl
cy5hcHBlbmQobmV3U2NvcGUpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRl
eGVkRm9ySW5TY29wZShjb25zdCBJZGVudGlmaWVyKiBib3VuZExvY2FsKQoreworICAgIGlmICgh
Ym91bmRMb2NhbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fb3B0aW1pemVkRm9ySW5TY29wZXMu
cmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0dXJl
Rm9ySW5TY29wZShjb25zdCBJZGVudGlmaWVyKiBib3VuZExvY2FsLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgaWYgKCFib3VuZExvY2FsKQorICAgICAgICByZXR1cm47CisgICAg
TG9jYWwgbG9jYWwgPSB0aGlzLT5sb2NhbCgqYm91bmRMb2NhbCk7CisgICAgQVNTRVJUKGxvY2Fs
LmdldCgpKTsKKyAgICBPcHRpbWl6ZWRGb3JJblNjb3BlIG5ld1Njb3BlKE9wdGltaXplZEZvcklu
U2NvcGU6OlN0cnVjdHVyZUZvckluU2NvcGUsIGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwor
ICAgIG1fb3B0aW1pemVkRm9ySW5TY29wZXMuYXBwZW5kKG5ld1Njb3BlKTsKK30KKwordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZShjb25zdCBJZGVudGlmaWVy
KiBib3VuZExvY2FsKQoreworICAgIGlmICghYm91bmRMb2NhbCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fb3B0aW1pemVkRm9ySW5TY29wZXMucmVtb3ZlTGFzdCgpOworfQorCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpCit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfcHJvcGVy
dHlfZW51bWVyYXRvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIHJldHVybiBk
c3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSkKK3sK
KyAgICBlbWl0T3Bjb2RlKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVu
dW1lcmF0b3JFbnRyeS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogaSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX3RvX2luZGV4X3N0cmluZyk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGktPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK3ZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDaGVja1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExh
YmVsKiBicmVha1RhcmdldCkKK3sKKyAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5z
aXplKCk7CisKKyAgICBlbWl0T3Bjb2RlKG9wX2NoZWNrX3Byb3BlcnR5X2VudW1lcmF0b3IpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZW51bWVyYXRvci0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGVudW1lcmF0b3JFbnRyeS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGJyZWFrVGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKK30KKwor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0SW5kZXhlZFByb3BlcnR5TmFt
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSwgTGFiZWwqIHRv
cE9mTG9vcCkKK3sKKyAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisK
KyAgICBlbWl0T3Bjb2RlKG9wX25leHRfaW5kZXhlZF9wbmFtZSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1l
cmF0b3JFbnRyeS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRvcE9mTG9v
cC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGRzdDsK
K30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0U3RydWN0dXJlUHJv
cGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5LCBM
YWJlbCogdG9wT2ZMb29wKQoreworICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKKworICAgIGVtaXRPcGNvZGUob3BfbmV4dF9zdHJ1Y3R1cmVfcG5hbWUpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChlbnVtZXJhdG9yRW50cnktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCh0b3BPZkxvb3AtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOworICAgIHJl
dHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dEdl
bmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExhYmVsKiB0b3BPZkxvb3ApCit7CisgICAgc2l6ZV90
IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworCisgICAgZW1pdE9wY29kZShvcF9uZXh0
X2dlbmVyaWNfcG5hbWUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkp
OworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvckVudHJ5LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodG9wT2ZMb29wLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
KTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5leHRFbnVtZXJhdG9yRW50cnkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBjdXJyZW50RW50cnksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIExhYmVs
KiB0b3BPZkxvb3ApCit7CisgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
OworCisgICAgZW1pdE9wY29kZShvcF9uZXh0X2VudW1lcmF0b3JfZW50cnkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY3VycmVudEVudHJ5
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvci0+aW5kZXgo
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRvcE9mTG9vcC0+YmluZChiZWdpbiwgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRQcm90b3R5cGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlKQoreworICAgIGVtaXRPcGNvZGUob3BfZ2V0X3Byb3RvdHlwZSk7CisgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsNiArMTA0LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvcGVydHlSZWdpc3RlcjsKICAgICB9OwogCisgICAgc3RydWN0IE9wdGlt
aXplZEZvckluU2NvcGUgeworICAgICAgICBlbnVtIE9wdGltaXplZEZvckluU2NvcGVUeXBlIHsK
KyAgICAgICAgICAgIEluZGV4ZWRGb3JJblNjb3BlLAorICAgICAgICAgICAgU3RydWN0dXJlRm9y
SW5TY29wZQorICAgICAgICB9OworCisgICAgICAgIE9wdGltaXplZEZvckluU2NvcGUoT3B0aW1p
emVkRm9ySW5TY29wZVR5cGUgdHlwZSwgUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGlu
ZGV4KQorICAgICAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICAgICAsIGxvY2FsKGxvY2Fs
KQorICAgICAgICAgICAgLCBpbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgT3B0aW1pemVkRm9ySW5TY29wZVR5cGUgdHlwZTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGxvY2FsOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5kZXg7CisgICAgfTsK
KwogICAgIHN0cnVjdCBUcnlEYXRhIHsKICAgICAgICAgUmVmUHRyPExhYmVsPiB0YXJnZXQ7CiAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldFNjb3BlRGVwdGg7CkBAIC00MTEsNiArNDI5LDE3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlOYW1lcyhS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVy
SUQqIHNpemUsIExhYmVsKiBicmVha1RhcmdldCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRO
ZXh0UHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0
ZXJJRCogaSwgUmVnaXN0ZXJJRCogc2l6ZSwgUmVnaXN0ZXJJRCogaXRlciwgTGFiZWwqIHRhcmdl
dCk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0
R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3JFbnRyeSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAgICB2b2lkIGVtaXRDaGVja1Byb3Bl
cnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yRW50cnksIExhYmVsKiBicmVha1RhcmdldCk7CisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXROZXh0SW5kZXhlZFByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3JFbnRyeSwgTGFiZWwqIHRvcE9mTG9vcCk7CisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXROZXh0U3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5LCBMYWJlbCogdG9wT2ZMb29wKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdE5leHRHZW5lcmljUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvckVudHJ5LCBMYWJlbCog
dG9wT2ZMb29wKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRFbnVtZXJhdG9yRW50cnko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBjdXJyZW50RW50
cnksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIExhYmVsKiB0b3BPZkxvb3ApOworCisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRHZXRQcm90b3R5cGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlKTsKKwogICAgICAgICB2b2lkIGVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7
CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4g
ZW1pdHRlZC4KQEAgLTQ1MSw2ICs0ODAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogCisgICAgICAg
IHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKGNvbnN0IElkZW50aWZpZXIqIGJvdW5kTG9jYWws
IFJlZ2lzdGVySUQqIGluZGV4KTsKKyAgICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShj
b25zdCBJZGVudGlmaWVyKiBib3VuZExvY2FsKTsKKyAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJl
Rm9ySW5TY29wZShjb25zdCBJZGVudGlmaWVyKiBib3VuZExvY2FsLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoY29uc3QgSWRl
bnRpZmllciogYm91bmRMb2NhbCk7CisKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1Rhcmdl
dChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVUYXJn
ZXQoY29uc3QgSWRlbnRpZmllciYpOwogCkBAIC02NDksNiArNjgzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFZlY3RvcjxDb250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiBtX3Njb3BlQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4g
bV9zd2l0Y2hDb250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9y
SW5Db250ZXh0U3RhY2s7CisgICAgICAgIFZlY3RvcjxPcHRpbWl6ZWRGb3JJblNjb3BlPiBtX29w
dGltaXplZEZvckluU2NvcGVzOwogICAgICAgICBWZWN0b3I8VHJ5Q29udGV4dD4gbV90cnlDb250
ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFJlZ2lzdGVySUQ+LCBj
b25zdCBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKj4+IG1fZGVjb25zdHJ1Y3RlZFBhcmFtZXRl
cnM7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODAwLDcgKzE4MDAsMTk4IEBAIHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXIKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvckluTm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgRm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQoreworICAgIExhYmVsU2NvcGVQdHIgb3V0ZXJTY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNj
b3BlKExhYmVsU2NvcGU6Okxvb3ApOworCisgICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1lbnRM
b2NhdGlvbigpKSB7CisgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwg
IkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxF
eGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zm
c2V0KCkpOworCisgICAgY29uc3QgSWRlbnRpZmllciogYm91bmRMb2NhbCA9IHRoaXMtPmlkZW50
aWZpZXJGb3JCb3VuZExvY2FsKGdlbmVyYXRvcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJh
c2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGJh
c2UuZ2V0KCksIG1fZXhwcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVudW1lcmF0b3IgPSBn
ZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGJhc2UuZ2V0KCkpOworCisgICAgUmVmUHRyPExhYmVsPiBvdXRlckxvb3BTdGFydCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5leHRFbnRyeSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdExvYWQobmV4dEVu
dHJ5LmdldCgpLCBqc051bGwoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvckVu
dHJ5KG5leHRFbnRyeS5nZXQoKSwgYmFzZS5nZXQoKSwgbmV4dEVudHJ5LmdldCgpLCBlbnVtZXJh
dG9yLmdldCgpLCBvdXRlckxvb3BTdGFydC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KG91dGVyU2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworCisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChv
dXRlckxvb3BTdGFydC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOworCisK
KyAgICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AKKyAgICB7CisgICAgICAgIExhYmVsU2NvcGVQ
dHIgaW5kZXhlZEl0ZXJhdGlvblNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxT
Y29wZTo6TG9vcCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkg
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBs
ZW5ndGggPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRHZXRFbnVtZXJhYmxlTGVuZ3RoKGxlbmd0aC5nZXQoKSwgbmV4dEVudHJ5LmdldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGkuZ2V0KCksIGpzTnVtYmVyKDApKTsKKworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wKG9wX2xlc3MsIHJlc3VsdC5nZXQoKSwgaS5n
ZXQoKSwgbGVuZ3RoLmdldCgpLAorICAgICAgICAgICAgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6
Om51bWJlclR5cGVJc0ludDMyKCksIFJlc3VsdFR5cGU6Om51bWJlclR5cGVJc0ludDMyKCkpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGluZGV4ZWRJ
dGVyYXRpb25TY29wZS0+YnJlYWtUYXJnZXQoKSk7CisKKyAgICAgICAgUmVmUHRyPExhYmVsPiBp
bm5lckxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGlubmVyTG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
b29wSGludCgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0
eU5hbWUuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5l
cmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hJbmRl
eGVkRm9ySW5TY29wZShib3VuZExvY2FsLCBpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZv
ckluU2NvcGUoYm91bmRMb2NhbCk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChpbmRl
eGVkSXRlcmF0aW9uU2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENoZWNrUHJvcGVydHlFbnVtZXJhdG9yKGJhc2UuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCks
IG5leHRFbnRyeS5nZXQoKSwgaW5kZXhlZEl0ZXJhdGlvblNjb3BlLT5icmVha1RhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0SW5kZXhlZFByb3BlcnR5TmFtZShpLmdldCgpLCBu
ZXh0RW50cnkuZ2V0KCksIGlubmVyTG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbChpbmRleGVkSXRlcmF0aW9uU2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgIH0K
KworICAgIC8vIFN0cnVjdHVyZSBwcm9wZXJ0eSBsb29wCisgICAgeworICAgICAgICBMYWJlbFNj
b3BlUHRyIHN0cnVjdHVyZUl0ZXJhdGlvblNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5
TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKHN0cnVjdHVyZUl0ZXJhdGlvblNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKworICAgICAg
ICBSZWZQdHI8TGFiZWw+IGlubmVyTG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaW5uZXJMb29wU3RhcnQuZ2V0KCkpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFk
ZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5w
dXNoU3RydWN0dXJlRm9ySW5TY29wZShib3VuZExvY2FsLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGJvdW5kTG9jYWwpOworCisgICAgICAgIGdl
bmVyYXRvci5lbWl0TGFiZWwoc3RydWN0dXJlSXRlcmF0aW9uU2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENoZWNrUHJvcGVydHlFbnVtZXJhdG9yKGJhc2Uu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIG5leHRFbnRyeS5nZXQoKSwgc3RydWN0dXJlSXRlcmF0
aW9uU2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5leHRTdHJ1
Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBuZXh0RW50cnkuZ2V0KCksIGlu
bmVyTG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzdHJ1Y3R1
cmVJdGVyYXRpb25TY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgfQorCisgICAgLy8gR2VuZXJp
YyBwcm9wZXJ0eSBsb29wCisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIGdlbmVyaWNJdGVy
YXRpb25TY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwor
CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChnZW5lcmljSXRlcmF0aW9u
U2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4gaW5uZXJM
b29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChpbm5lckxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhp
bnQoKTsKKworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5
TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1l
bnQpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZ2VuZXJpY0l0ZXJhdGlvblNjb3Bl
LT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0R2VuZXJpY1By
b3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGJhc2UuZ2V0KCksIG5leHRFbnRyeS5nZXQo
KSwgaW5uZXJMb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGdl
bmVyaWNJdGVyYXRpb25TY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgfQorCisgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChvdXRlclNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdEdldFByb3RvdHlwZShiYXNlLmdldCgpLCBiYXNlLmdldCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdE5leHRFbnVtZXJhdG9yRW50cnkobmV4dEVudHJ5LmdldCgpLCBiYXNlLmdldCgpLCBu
ZXh0RW50cnkuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIG91dGVyTG9vcFN0YXJ0LmdldCgpKTsK
KyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKG91dGVyU2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworfQor
Citjb25zdCBJZGVudGlmaWVyKiBGb3JJbk5vZGU6OmlkZW50aWZpZXJGb3JCb3VuZExvY2FsKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCit7CisgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2
ZU5vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKKyAgICAgICAgTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAobG9jYWwuZ2V0KCkpCisg
ICAgICAgICAgICByZXR1cm4gJmlkZW50OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgeworICAgICAgICBE
ZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVj
b25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIpOworICAgICAgICBhdXRvIGJpbmRp
bmcgPSBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlzQmlu
ZGluZ05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGF1dG8g
c2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0
eSgpOworICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAg
ICAgIGlmICghbG9jYWwuZ2V0KCkgfHwgbG9jYWwuaXNDYXB0dXJlZCgpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmaWRlbnQ7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcihCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCit7CisgICAg
aWYgKG1fbGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIo
KTsKKyAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAg
ICBpZiAobG9jYWwuZ2V0KCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwu
Z2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGdl
bmVyYXRvci5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgICAg
ICAgICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCBpZGVudCwgcHJvcGVydHlOYW1l
LCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93
SWZOb3RGb3VuZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
bV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSkgeworICAgICAgICBEb3RBY2Nlc3Nvck5vZGUq
IGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihtX2xleHByKTsKKyAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBhc3NpZ25Ob2RlLT5pZGVudGlmaWVyKCk7
CisgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9k
ZS0+YmFzZSgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25O
b2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kKCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHItPmlzQnJh
Y2tldEFjY2Vzc29yTm9kZSgpKSB7CisgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGFzc2ln
bk5vZGUgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5v
ZGUtPmJhc2UoKSk7CisgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9IGdlbmVyYXRvci5l
bWl0Tm9kZShhc3NpZ25Ob2RlLT5zdWJzY3JpcHQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFy
dCgpLCBhc3NpZ25Ob2RlLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRC
eVZhbChiYXNlLmdldCgpLCBzdWJzY3JpcHQsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgewor
ICAgICAgICBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGlj
X2Nhc3Q8RGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIpOworICAgICAgICBh
dXRvIGJpbmRpbmcgPSBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpOworICAgICAgICBpZiAoIWJpbmRp
bmctPmlzQmluZGluZ05vZGUoKSkgeworICAgICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3Mo
KS0+YmluZFZhbHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0
PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICBMb2NhbCBsb2NhbCA9
IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmICghbG9jYWwuZ2V0KCkgfHwgbG9j
YWwuaXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpLT5i
aW5kVmFsdWUoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CiAKKyAgICAvKgogdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgTGFi
ZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxv
b3ApOwpAQCAtMTg5Nyw2ICsyMDg4LDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbgogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVt
ZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwogICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogfQorKi8KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvck9mTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgRm9yT2ZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmNwcAkocmV2aXNpb24g
MTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MywxMCArODMsMTAgQEAgYm9vbCBEZWJ1Z2dlclNjb3Bl
OjpkZWxldGVQcm9wZXJ0eShKU0NlbAogICAgIHJldHVybiB0aGlzT2JqZWN0LT5tX2FjdGl2YXRp
b24tPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QtPm1fYWN0aXZhdGlv
bi5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBEZWJ1Z2dlclNjb3BlOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9p
ZCBEZWJ1Z2dlclNjb3BlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgRGVidWdnZXJTY29wZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxEZWJ1Z2dlclNjb3BlKj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT5tX2FjdGl2YXRp
b24tPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVjdC0+bV9hY3RpdmF0
aW9uLmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICB0aGlzT2JqZWN0LT5t
X2FjdGl2YXRpb24tPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMoZXhlYywgdGhpc09i
amVjdC0+bV9hY3RpdmF0aW9uLmdldCgpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogYm9v
bCBEZWJ1Z2dlclNjb3BlOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMTcwNDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0
b3ImLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkocmV2
aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgSlNPYmplY3Q7CiAgICAgY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKICAg
ICBjbGFzcyBKU1Njb3BlOworICAgIHN0cnVjdCBFbnVtZXJhdG9yRW50cnk7CiAKICAgICB0eXBl
ZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CiAKQEAgLTcxLDYgKzcyLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGJvb2wgdW5ib3hlZEJvb2xlYW4oKSBjb25zdDsKICAgICAgICAgZG91Ymxl
IHVuYm94ZWREb3VibGUoKSBjb25zdDsKICAgICAgICAgSlNDZWxsKiB1bmJveGVkQ2VsbCgpIGNv
bnN0OworICAgICAgICBFbnVtZXJhdG9yRW50cnkqIGVudW1lcmF0b3JFbnRyeSgpIGNvbnN0Owor
CiAgICAgICAgIGludDMyX3QgcGF5bG9hZCgpIGNvbnN0OwogICAgICAgICBpbnQzMl90IHRhZygp
IGNvbnN0OwogICAgICAgICBpbnQzMl90JiBwYXlsb2FkKCk7CkBAIC04OSw2ICs5Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CiAgICAgICAg
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrOworICAgICAgICAgICAgRW51bWVyYXRvckVudHJ5KiBlbnVtZXJhdG9yRW50cnk7CiAgICAg
ICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIGVuY29kZWRWYWx1ZTsKICAgICAgICAgICAg
IGRvdWJsZSBudW1iZXI7CiAgICAgICAgICAgICBpbnQ2NF90IGludGVnZXI7CkBAIC0xNTIsNiAr
MTU2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdS5jb2RlQmxvY2s7CiAg
ICAgfQogCisgICAgQUxXQVlTX0lOTElORSBFbnVtZXJhdG9yRW50cnkqIFJlZ2lzdGVyOjplbnVt
ZXJhdG9yRW50cnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHUuZW51bWVyYXRvckVu
dHJ5OworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBSZWdpc3Rlcjo6dW5ib3hl
ZEludDMyKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBwYXlsb2FkKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE3MDQwMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc2MSw5ICs3NjEsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1
Y3Rpb24qIAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfZW50ZXIoSW5zdHJ1Y3Rpb24qKQordm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCghaW5zdHJ1Y3Rpb24pOwogICAgIAogICAgIC8vIEV2
ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFu
dAogICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgcHJvbG9uZ2luZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUz
LDYgKzE0NTMsMTQzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2MK
ICAgICBMTElOVF9FTkQoKTsKIH0KIAorCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Y2hlY2tfcHJvcGVydHlfZW51bWVyYXRvcikKK3sKKyAgICBMTElOVF9CRUdJTigpOworICAgIC8v
ZGF0YUxvZ0YoImNoZWNrIHByb3BlcnR5IGVudW1lcmF0b3JcbiIpOworCisgICAgSlNPYmplY3Qq
IGJhc2UgPSBhc09iamVjdChMTElOVF9PUCgxKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqPihMTElOVF9PUCgyKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEVudW1l
cmF0b3JFbnRyeSogZW50cnkgPSBMTElOVF9PUCgzKS5lbnVtZXJhdG9yRW50cnkoKTsKKworICAg
IEFTU0VSVCghZW50cnktPm9iamVjdCgpIHx8IGVudHJ5LT5vYmplY3QoKSA9PSBiYXNlKTsKKwor
ICAgIC8vIElmIHdlJ3JlIGluIHRoZSBwcm90b3R5cGUgY2hhaW4sIGFsbCBwcm9wZXJ0aWVzIGFy
ZSBnZW5lcmljIGFueXdheXMuCisgICAgLy8gSWYgdGhlIGVudHJ5J3MgU3RydWN0dXJlIG1hdGNo
ZXMgdGhlIGJhc2Ugb2JqZWN0IHRoZW4gd2UncmUgZ29vZCB0byBnby4KKyAgICBpZiAoZW50cnkt
Pm9iamVjdCgpIHx8IChlbnRyeS0+c3RydWN0dXJlKCkgPT0gYmFzZS0+c3RydWN0dXJlKCkgJiYg
IWJhc2UtPnN0cnVjdHVyZSgpLT5oYXNEZWxldGVkSW5kZXhlZFByb3BlcnRpZXMoKSkpCisgICAg
ICAgIHBjICs9IE9QQ09ERV9MRU5HVEgob3BfY2hlY2tfcHJvcGVydHlfZW51bWVyYXRvcik7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIFRoZSBiYXNlIG9iamVjdCdzIHN0cnVjdHVyZSBjaGFuZ2Vk
LCBzbyB3ZSBuZWVkIHRvIGNvbnZlcnQgdG8gZnVsbHkgZ2VuZXJpYyBlbnVtZXJhdGlvbi4KKyAg
ICAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBnZW5lcmljRW51bWVyYXRvciA9IGVudW1l
cmF0b3ItPmNvbnZlcnRUb0dlbmVyaWNFbnVtZXJhdGlvbihleGVjLT52bSgpLCBiYXNlLCBlbnRy
eSk7CisgICAgICAgIExMSU5UX09QKDIpID0gSlNWYWx1ZShnZW5lcmljRW51bWVyYXRvcik7Cisg
ICAgICAgIExMSU5UX09QKDMpID0gZ2VuZXJpY0VudW1lcmF0b3ItPmhlYWRFbnRyeSgpOworICAg
ICAgICBwYyArPSBwY1s0XS51Lm9wZXJhbmQ7CisgICAgfQorCisgICAgTExJTlRfRU5EKCk7Cit9
CisKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXh0X2luZGV4ZWRfcG5hbWUpCit7
CisgICAgTExJTlRfQkVHSU4oKTsKKyAgICAvL2RhdGFMb2dGKCJuZXh0IGluZGV4ZWQgcG5hbWVc
biIpOworCisgICAgRW51bWVyYXRvckVudHJ5KiBlbnRyeSA9IExMSU5UX09QKDIpLmVudW1lcmF0
b3JFbnRyeSgpOworCisgICAgaWYgKGVudHJ5LT5oYXNOZXh0SW5kZXhlZFByb3BlcnR5TmFtZSgp
KSB7CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGVudHJ5LT5uZXh0SW5kZXhlZFByb3Bl
cnR5TmFtZSgpOworICAgICAgICBMTElOVF9PUCgxKSA9IGpzTnVtYmVyKG5leHRJbmRleCk7Cisg
ICAgICAgIHBjICs9IHBjWzNdLnUub3BlcmFuZDsKKyAgICB9IGVsc2UgCisgICAgICAgIHBjICs9
IE9QQ09ERV9MRU5HVEgob3BfbmV4dF9pbmRleGVkX3BuYW1lKTsKKworICAgIExMSU5UX0VORCgp
OworfQorCitMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9zdHJ1Y3R1cmVfcG5h
bWUpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKyAgICAvL2RhdGFMb2dGKCJuZXh0IHN0cnVjdHVy
ZSBwbmFtZVxuIik7CisKKyAgICBFbnVtZXJhdG9yRW50cnkqIGVudHJ5ID0gTExJTlRfT1AoMiku
ZW51bWVyYXRvckVudHJ5KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogbmV4dFByb3BlcnR5TmFt
ZSA9IGVudHJ5LT5uZXh0U3RydWN0dXJlUHJvcGVydHlOYW1lKCk7CisKKyAgICBpZiAobmV4dFBy
b3BlcnR5TmFtZSkgeworICAgICAgICBMTElOVF9PUCgxKSA9IEpTVmFsdWUoanNPd25lZFN0cmlu
ZygmZXhlYy0+dm0oKSwgbmV4dFByb3BlcnR5TmFtZS0+c3RyaW5nKCkpKTsKKyAgICAgICAgcGMg
Kz0gcGNbM10udS5vcGVyYW5kOworICAgIH0gZWxzZQorICAgICAgICBwYyArPSBPUENPREVfTEVO
R1RIKG9wX25leHRfc3RydWN0dXJlX3BuYW1lKTsKKworICAgIExMSU5UX0VORCgpOworfQorCitM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9nZW5lcmljX3BuYW1lKQoreworICAg
IExMSU5UX0JFR0lOKCk7CisgICAgLy9kYXRhTG9nRigibmV4dCBnZW5lcmljIHBuYW1lXG4iKTsK
KworICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoTExJTlRfT1AoMikuanNWYWx1ZSgpLmFz
Q2VsbCgpKTsKKyAgICBFbnVtZXJhdG9yRW50cnkqIGVudHJ5ID0gTExJTlRfT1AoMykuZW51bWVy
YXRvckVudHJ5KCk7CisKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudGlmaWVyID0gZW50cnkt
Pm5leHRHZW5lcmljUHJvcGVydHlOYW1lKCk7CisgICAgd2hpbGUgKGlkZW50aWZpZXIpIHsKKyAg
ICAgICAgaWYgKGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsICppZGVudGlmaWVyKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZGVudGlmaWVyID0gZW50cnktPm5leHRHZW5lcmljUHJvcGVy
dHlOYW1lKCk7CisgICAgfQorCisgICAgaWYgKGlkZW50aWZpZXIpIHsKKyAgICAgICAgTExJTlRf
T1AoMSkgPSBKU1ZhbHVlKGpzU3RyaW5nKGV4ZWMsIGlkZW50aWZpZXItPnN0cmluZygpKSk7Cisg
ICAgICAgIHBjICs9IHBjWzRdLnUub3BlcmFuZDsKKyAgICB9IGVsc2UKKyAgICAgICAgcGMgKz0g
T1BDT0RFX0xFTkdUSChvcF9uZXh0X2dlbmVyaWNfcG5hbWUpOworCisgICAgTExJTlRfRU5EKCk7
Cit9CisKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfZW50
cnkpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKyAgICAvL2RhdGFMb2dGKCJuZXh0IGVudW1lcmF0
b3IgZW50cnlcbiIpOworCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUCgyKS5qc1Zh
bHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc051bGwoKSkgeworICAgICAgICBwYyArPSBPUENP
REVfTEVOR1RIKG9wX25leHRfZW51bWVyYXRvcl9lbnRyeSk7CisgICAgICAgIExMSU5UX0VORCgp
OworICAgIH0KKworICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoYmFzZVZhbHVlLmFzQ2Vs
bCgpKTsKKyAgICBVTlVTRURfUEFSQU0oYmFzZSk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KExMSU5U
X09QKDQpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CisKKyAgICBFbnVtZXJhdG9yRW50cnkqIGN1cnJl
bnRFbnRyeTsKKyAgICBKU1ZhbHVlIGN1cnJlbnRFbnRyeVZhbHVlID0gTExJTlRfT1AoMykuanNW
YWx1ZSgpOworICAgIGlmIChjdXJyZW50RW50cnlWYWx1ZS5pc051bGwoKSkKKyAgICAgICAgY3Vy
cmVudEVudHJ5ID0gbnVsbHB0cjsKKyAgICBlbHNlCisgICAgICAgIGN1cnJlbnRFbnRyeSA9IGpz
Q2FzdDxFbnVtZXJhdG9yRW50cnkqPihjdXJyZW50RW50cnlWYWx1ZS5hc0NlbGwoKSk7CisKKyAg
ICBFbnVtZXJhdG9yRW50cnkqIG5leHRFbnRyeTsKKyAgICBpZiAoY3VycmVudEVudHJ5ICYmIGN1
cnJlbnRFbnRyeS0+bmV4dCgpKQorICAgICAgICBuZXh0RW50cnkgPSBFbnVtZXJhdG9yRW50cnk6
OmNsb25lKGV4ZWMtPnZtKCksICpjdXJyZW50RW50cnktPm5leHQoKSk7CisgICAgZWxzZSBpZiAo
IWN1cnJlbnRFbnRyeSkKKyAgICAgICAgbmV4dEVudHJ5ID0gZW51bWVyYXRvci0+aGVhZEVudHJ5
KCk7CisgICAgZWxzZQorICAgICAgICBuZXh0RW50cnkgPSBudWxscHRyOworCisgICAgaWYgKG5l
eHRFbnRyeSkgeworLyoKKyAgICAgICAgaWYgKG5leHRFbnRyeS0+b2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIGlmIChuZXh0RW50cnktPm9iamVjdCgpICE9IGJhc2UgfHwgbmV4dEVudHJ5LT5zdHJ1
Y3R1cmUoKSAhPSBiYXNlLT5zdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIC8vIFRPRE86
IFdoZW4gd2UgY29udmVydCB0byBmdWxseSBnZW5lcmljLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhl
IG9yaWdpbmFsIGJhc2UuCisgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBnZW5lcmljRW51bWVyYXRvciA9IGVudW1lcmF0b3ItPmNvbnZlcnRUb0dlbmVyaWNFbnVtZXJh
dGlvbihleGVjLT52bSgpLCBiYXNlLCBuZXh0RW50cnkpOworICAgICAgICAgICAgICAgIExMSU5U
X09QKDQpID0gSlNWYWx1ZShnZW5lcmljRW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgbmV4
dEVudHJ5ID0gZ2VuZXJpY0VudW1lcmF0b3ItPmhlYWRFbnRyeSgpOworICAgICAgICAgICAgICAg
IEFTU0VSVChuZXh0RW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIEFTU0VSVChiYXNlLT5zdHJ1Y3R1cmUoKSA9PSBuZXh0RW50cnktPnN0cnVjdHVyZSgp
KTsKKyovCisgICAgICAgIExMSU5UX09QKDEpID0gSlNWYWx1ZShuZXh0RW50cnkpOworICAgICAg
ICBwYyArPSBwY1s1XS51Lm9wZXJhbmQ7CisgICAgfSBlbHNlCisgICAgICAgIHBjICs9IE9QQ09E
RV9MRU5HVEgob3BfbmV4dF9lbnVtZXJhdG9yX2VudHJ5KTsKKworICAgIExMSU5UX0VORCgpOwor
fQorCisKIGV4dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3Rocm93X3N0YWNrX292
ZXJmbG93X2Vycm9yKFZNKiB2bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvRnJhbWUpCiB7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gdm0tPnRvcENhbGxGcmFtZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDYgKzEyNCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX2hhCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2Nv
cGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29w
ZSk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF90b19zY29wZSk7
CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NoZWNrX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXh0X2lu
ZGV4ZWRfcG5hbWUpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXh0
X3N0cnVjdHVyZV9wbmFtZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X25leHRfZ2VuZXJpY19wbmFtZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX25leHRfZW51bWVyYXRvcl9lbnRyeSk7CiBleHRlcm4gIkMiIFNsb3dQYXRoUmV0dXJuVHlw
ZSBsbGludF90aHJvd19zdGFja19vdmVyZmxvd19lcnJvcihWTSosIFByb3RvQ2FsbEZyYW1lKikg
V1RGX0lOVEVSTkFMOwogI2lmIEVOQUJMRShMTElOVF9DX0xPT1ApCiBleHRlcm4gIkMiIFNsb3dQ
YXRoUmV0dXJuVHlwZSBsbGludF9zdGFja19jaGVja19hdF92bV9lbnRyeShWTSosIFJlZ2lzdGVy
KikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEwLDYgKzEyMTAsNTEgQEAgX2xsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6
CiBfbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIG5hdGl2ZUNhbGxUcmFt
cG9saW5lKE5hdGl2ZUV4ZWN1dGFibGU6Om1fY29uc3RydWN0b3IpCiAKK19sbGludF9vcF9nZXRf
cHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgZGlzcGF0Y2goMykK
KworX2xsaW50X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICB0cmFjZUV4ZWN1dGlvbigp
CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorICAg
IGRpc3BhdGNoKDMpCisKK19sbGludF9vcF90b19pbmRleF9zdHJpbmc6CisgICAgdHJhY2VFeGVj
dXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKKyAg
ICBkaXNwYXRjaCgzKQorCitfbGxpbnRfb3BfY2hlY2tfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfY2hl
Y2tfcHJvcGVydHlfZW51bWVyYXRvcikKKyAgICBkaXNwYXRjaCgwKQorCitfbGxpbnRfb3BfbmV4
dF9pbmRleGVkX3BuYW1lOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9uZXh0X2luZGV4ZWRfcG5hbWUpCisgICAgZGlzcGF0Y2goMCkKKwor
X2xsaW50X29wX25leHRfc3RydWN0dXJlX3BuYW1lOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXh0X3N0cnVjdHVyZV9wbmFtZSkKKyAg
ICBkaXNwYXRjaCgwKQorCitfbGxpbnRfb3BfbmV4dF9nZW5lcmljX3BuYW1lOgorICAgIHRyYWNl
RXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXh0X2dlbmVy
aWNfcG5hbWUpCisgICAgZGlzcGF0Y2goMCkKKworX2xsaW50X29wX25leHRfZW51bWVyYXRvcl9l
bnRyeToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfbmV4dF9lbnVtZXJhdG9yX2VudHJ5KQorICAgIGRpc3BhdGNoKDApCisKK19sbGludF9v
cF9nZXRfcHJvdG90eXBlOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgo
X3Nsb3dfcGF0aF9nZXRfcHJvdG90eXBlKQorICAgIGRpc3BhdGNoKDMpCisKIAogIyBMYXN0bHks
IG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQg
YWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNp
bmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODAsNiArMTI4MCw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1l
bnROb2RlKik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dGlmaWVyRm9yQm91bmRMb2NhbChCeXRlY29kZUdlbmVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRMb29wSGVhZGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1l
KTsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKICAgICB9OwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxNzA0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTUsMTkgKzIxNSwzOSBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEFyZ3VtZW50czo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK2Jvb2wg
QXJndW1lbnRzOjpjYW5JdGVyYXRlSW5kaWNlc1F1aWNrbHkoKSBjb25zdAogewotICAgIEFyZ3Vt
ZW50cyogdGhpc09iamVjdCA9IGpzQ2FzdDxBcmd1bWVudHMqPihvYmplY3QpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX251bUFyZ3VtZW50czsgKytpKSB7Ci0g
ICAgICAgIGlmICghdGhpc09iamVjdC0+aXNBcmd1bWVudChpKSkKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9udW1Bcmd1bWVudHM7ICsraSkgeworICAgICAgICBpZiAoIWlzQXJndW1l
bnQoaSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEFyZ3VtZW50czo6Z2V0T3duR2VuZXJpY0luZGV4ZWRQcm9wZXJ0aWVzKFZN
JiB2bSwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVydHlOYW1lcykKK3sKKyAgICBBU1NF
UlQoIWNhbkl0ZXJhdGVJbmRpY2VzUXVpY2tseSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9udW1Bcmd1bWVudHM7ICsraSkgeworICAgICAgICBpZiAoIWlzQXJndW1lbnQoaSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYXBwZW5kR2VuZXJp
Y0lkZW50aWZpZXIoSWRlbnRpZmllcjo6ZnJvbSgmdm0sIGkpKTsKICAgICB9Cit9CisKK3ZvaWQg
QXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iamVjdCwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBBcmd1bWVudHMq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8QXJndW1lbnRzKj4ob2JqZWN0KTsKKyAgICBpZiAodGhpc09i
amVjdC0+Y2FuSXRlcmF0ZUluZGljZXNRdWlja2x5KCkpCisgICAgICAgIHByb3BlcnR5TmFtZXMu
c2V0SW5kZXhpbmdMaW1pdCh2bSwgdGhpc09iamVjdC0+bV9udW1Bcmd1bWVudHMpOworICAgIGVs
c2UKKyAgICAgICAgdGhpc09iamVjdC0+Z2V0T3duR2VuZXJpY0luZGV4ZWRQcm9wZXJ0aWVzKHZt
LCBwcm9wZXJ0eU5hbWVzKTsKKwogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpIHsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygp
LmNhbGxlZSk7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVy
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFw
cGVuZEdlbmVyaWNJZGVudGlmaWVyKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAg
IH0KLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhl
eGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIEFyZ3VtZW50czo6
cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzEx
Myw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBZ2dyZWdh
dG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBz
dGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKQEAgLTEyMiw5
ICsxMjIsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5l
Y2Vzc2FyeShFeGVjU3RhdGUqKTsKICAgICB2b2lkIGNyZWF0ZVN0cmljdE1vZGVDYWxsZWVJZk5l
Y2Vzc2FyeShFeGVjU3RhdGUqKTsKIAorICAgIGJvb2wgY2FuSXRlcmF0ZUluZGljZXNRdWlja2x5
KCkgY29uc3Q7CisgICAgdm9pZCBnZXRPd25HZW5lcmljSW5kZXhlZFByb3BlcnRpZXMoVk0mLCBQ
cm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJik7CisKICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemVJ
bkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBt
X251bUFyZ3VtZW50czsgfQogICAgIHZvaWQgYWxsb2NhdGVSZWdpc3RlckFycmF5KFZNJik7Ci0g
ICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCk7CisgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCkg
Y29uc3Q7CiAgICAgYm9vbCB0cnlTZXRBcmd1bWVudChWTSYsIHNpemVfdCBhcmd1bWVudCwgSlNW
YWx1ZSk7CiAgICAgSlNWYWx1ZSB0cnlHZXRBcmd1bWVudChzaXplX3QgYXJndW1lbnQpOwogICAg
IGJvb2wgaXNEZWxldGVkQXJndW1lbnQoc2l6ZV90KTsKQEAgLTI0OSw3ICsyNTIsNyBAQCBpbmxp
bmUgYm9vbCBBcmd1bWVudHM6OmlzRGVsZXRlZEFyZ3VtZW50CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWlubGluZSBib29sIEFyZ3VtZW50czo6aXNBcmd1bWVudChzaXplX3QgYXJndW1lbnQpCitp
bmxpbmUgYm9vbCBBcmd1bWVudHM6OmlzQXJndW1lbnQoc2l6ZV90IGFyZ3VtZW50KSBjb25zdAog
ewogICAgIGlmIChhcmd1bWVudCA+PSBtX251bUFyZ3VtZW50cykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjEsMTAgKzcyMSwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIAotICAgIFByb3BlcnR5TmFtZUFycmF5IG5hbWVBcnJheShleGVjKTsK
LSAgICB0aGlzT2JqLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0
aGlzT2JqLCBleGVjLCBuYW1lQXJyYXksIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAg
IFByb3BlcnR5TmFtZUFycmF5QWdncmVnYXRvciBuYW1lQXJyYXlBZ2dyZWdhdG9yKGV4ZWMpOwor
ICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKGV4
ZWMsIHRoaXNPYmosIG5hbWVBcnJheUFnZ3JlZ2F0b3IsIEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSYgbmFtZUFy
cmF5ID0gbmFtZUFycmF5QWdncmVnYXRvci5hcnJheSgpOwogCiAgICAgVmVjdG9yPHVpbnQzMl90
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4ga2V5czsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG5hbWVBcnJheS5zaXplKCk7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5LmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw5
IEBAIHByaXZhdGU6CiB9OwogCiB0eXBlZGVmIENvbnRpZ3VvdXNEYXRhPGRvdWJsZT4gQ29udGln
dW91c0RvdWJsZXM7Cit0eXBlZGVmIENvbnRpZ3VvdXNEYXRhPGNvbnN0IGRvdWJsZT4gQ29uc3RD
b250aWd1b3VzRG91YmxlczsKIHR5cGVkZWYgQ29udGlndW91c0RhdGE8V3JpdGVCYXJyaWVyPFVu
a25vd24+PiBDb250aWd1b3VzSlNWYWx1ZXM7Cit0eXBlZGVmIENvbnRpZ3VvdXNEYXRhPGNvbnN0
IFdyaXRlQmFycmllcjxVbmtub3duPj4gQ29uc3RDb250aWd1b3VzSlNWYWx1ZXM7CiAKIGNsYXNz
IEJ1dHRlcmZseSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnV0dGVyZmx5KTsKQEAgLTEx
NSwxOCArMTE3LDI0IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eVN0b3JhZ2UgcHJvcGVydHlTdG9y
YWdlKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIoKS0+cHJvcGVydHlTdG9yYWdlKCk7IH0KICAg
ICBDb25zdFByb3BlcnR5U3RvcmFnZSBwcm9wZXJ0eVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBp
bmRleGluZ0hlYWRlcigpLT5wcm9wZXJ0eVN0b3JhZ2UoKTsgfQogICAgIAotICAgIHVpbnQzMl90
IHB1YmxpY0xlbmd0aCgpIHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnB1YmxpY0xlbmd0aCgp
OyB9Ci0gICAgdWludDMyX3QgdmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gaW5kZXhpbmdIZWFkZXIo
KS0+dmVjdG9yTGVuZ3RoKCk7IH0KKyAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSBjb25zdCB7
IHJldHVybiBpbmRleGluZ0hlYWRlcigpLT5wdWJsaWNMZW5ndGgoKTsgfQorICAgIHVpbnQzMl90
IHZlY3Rvckxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGluZGV4aW5nSGVhZGVyKCktPnZlY3Rvckxl
bmd0aCgpOyB9CiAgICAgdm9pZCBzZXRQdWJsaWNMZW5ndGgodWludDMyX3QgdmFsdWUpIHsgaW5k
ZXhpbmdIZWFkZXIoKS0+c2V0UHVibGljTGVuZ3RoKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0VmVj
dG9yTGVuZ3RoKHVpbnQzMl90IHZhbHVlKSB7IGluZGV4aW5nSGVhZGVyKCktPnNldFZlY3Rvckxl
bmd0aCh2YWx1ZSk7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIFQqIGlu
ZGV4aW5nUGF5bG9hZCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFQqPih0aGlzKTsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBpbmRleGluZ1BheWxv
YWQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBUKj4odGhpcyk7
IH0KKwogICAgIEFycmF5U3RvcmFnZSogYXJyYXlTdG9yYWdlKCkgeyByZXR1cm4gaW5kZXhpbmdQ
YXlsb2FkPEFycmF5U3RvcmFnZT4oKTsgfQogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjb250aWd1
b3VzSW50MzIoKSB7IHJldHVybiBDb250aWd1b3VzSlNWYWx1ZXMoaW5kZXhpbmdQYXlsb2FkPFdy
aXRlQmFycmllcjxVbmtub3duPj4oKSwgdmVjdG9yTGVuZ3RoKCkpOyB9CiAKICAgICBDb250aWd1
b3VzRG91YmxlcyBjb250aWd1b3VzRG91YmxlKCkgeyByZXR1cm4gQ29udGlndW91c0RvdWJsZXMo
aW5kZXhpbmdQYXlsb2FkPGRvdWJsZT4oKSwgdmVjdG9yTGVuZ3RoKCkpOyB9CisgICAgQ29uc3RD
b250aWd1b3VzRG91YmxlcyBjb250aWd1b3VzRG91YmxlKCkgY29uc3QgeyByZXR1cm4gQ29uc3RD
b250aWd1b3VzRG91YmxlcyhpbmRleGluZ1BheWxvYWQ8ZG91YmxlPigpLCB2ZWN0b3JMZW5ndGgo
KSk7IH0KICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udGlndW91cygpIHsgcmV0dXJuIENvbnRp
Z3VvdXNKU1ZhbHVlcyhpbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+PigpLCB2
ZWN0b3JMZW5ndGgoKSk7IH0KKyAgICBDb25zdENvbnRpZ3VvdXNKU1ZhbHVlcyBjb250aWd1b3Vz
KCkgY29uc3QgeyByZXR1cm4gQ29uc3RDb250aWd1b3VzSlNWYWx1ZXMoaW5kZXhpbmdQYXlsb2Fk
PFdyaXRlQmFycmllcjxVbmtub3duPj4oKSwgdmVjdG9yTGVuZ3RoKCkpOyB9CiAgICAgCiAgICAg
c3RhdGljIEJ1dHRlcmZseSogZnJvbUNvbnRpZ3VvdXMoV3JpdGVCYXJyaWVyPFVua25vd24+KiBj
b250aWd1b3VzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTMgKzczLDEzIEBAIHN0cnVj
dCBNZXRob2RUYWJsZSB7CiAgICAgdHlwZWRlZiBKU1ZhbHVlICgqRGVmYXVsdFZhbHVlRnVuY3Rp
b25QdHIpKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSk7CiAgICAgRGVmYXVsdFZhbHVlRnVuY3Rpb25QdHIgZGVmYXVsdFZhbHVlOwogCi0gICAgdHlw
ZWRlZiB2b2lkICgqR2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICB0eXBl
ZGVmIHZvaWQgKCpHZXRPd25Qcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
R2V0T3duUHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldE93blByb3BlcnR5TmFtZXM7CiAKLSAg
ICB0eXBlZGVmIHZvaWQgKCpHZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciko
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgdHlwZWRlZiB2b2lkICgqR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rp
b25QdHIpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgR2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzRnVuY3Rpb25Q
dHIgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzOwogCi0gICAgdHlwZWRlZiB2b2lkICgqR2V0
UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9w
ZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1l
QWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0
aW9uUHRyIGdldFByb3BlcnR5TmFtZXM7CiAKICAgICB0eXBlZGVmIFN0cmluZyAoKkNsYXNzTmFt
ZUZ1bmN0aW9uUHRyKShjb25zdCBKU09iamVjdCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzA0MDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NDIsNiArNTQyLDQxIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9lbnRlcikKICAgICBFTkQoKTsKIH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKQoreworICAgIEJFR0lOKCk7CisgICAgLy9kYXRhTG9nRigiZ2V0
IHByb3BlcnR5IGVudW1lcmF0b3JcbiIpOworICAgIFJFVFVSTihqc1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IoZXhlYywgT1AoMikuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpKSk7Cit9CisKK1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCit7CisgICAgQkVHSU4o
KTsKKyAgICAvL2RhdGFMb2dGKCJnZXQgZW51bWVyYWJsZSBsZW5ndGhcbiIpOworICAgIFJFVFVS
Tihqc051bWJlcihPUCgyKS5lbnVtZXJhdG9yRW50cnkoKS0+aW5kZXhpbmdMaW1pdCgpKSk7Cit9
CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCit7CisgICAgQkVH
SU4oKTsKKyAgICAvL2RhdGFMb2dGKCJ0byBpbmRleCBzdHJpbmdcbiIpOworICAgIHVpbnQzMl90
IGluZGV4ID0gT1AoMikuanNWYWx1ZSgpLmFzVUludDMyKCk7CisgICAgUkVUVVJOKGpzSW5kZXhT
dHJpbmcoZXhlYywgaW5kZXgpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9w
cm90b3R5cGUpCit7CisgICAgQkVHSU4oKTsKKyAgICAvL2RhdGFMb2dGKCJnZXQgcHJvdG90eXBl
XG4iKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBwcm90b3R5cGU7CisgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHByb3RvdHlw
ZSA9IGFzT2JqZWN0KHZhbHVlKS0+cHJvdG90eXBlKCk7CisgICAgZWxzZQorICAgICAgICBwcm90
b3R5cGUgPSB2YWx1ZS5zeW50aGVzaXplUHJvdG90eXBlKGV4ZWMpOworICAgIFJFVFVSTihwcm90
b3R5cGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
IHx8IEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDYgKzE5OSwxNCBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKIFNMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3RvX3ByaW1pdGl2ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9wcm9w
ZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9faW5k
ZXhfc3RyaW5nKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2hlY2tfcHJvcGVy
dHlfZW51bWVyYXRvcik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25leHRfc3Ry
dWN0dXJlX3BuYW1lKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9nZW5l
cmljX3BuYW1lKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJh
dG9yX2VudHJ5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X3Byb3RvdHlw
ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmRleGluZ0hlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICB1Lmxlbmd0aHMudmVjdG9yTGVuZ3Ro
ID0gbGVuZ3RoOwogICAgIH0KICAgICAKLSAgICB1aW50MzJfdCBwdWJsaWNMZW5ndGgoKSB7IHJl
dHVybiB1Lmxlbmd0aHMucHVibGljTGVuZ3RoOyB9CisgICAgdWludDMyX3QgcHVibGljTGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gdS5sZW5ndGhzLnB1YmxpY0xlbmd0aDsgfQogICAgIHZvaWQgc2V0
UHVibGljTGVuZ3RoKHVpbnQzMl90IGF1eFdvcmQpIHsgdS5sZW5ndGhzLnB1YmxpY0xlbmd0aCA9
IGF1eFdvcmQ7IH0KICAgICAKICAgICBBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIoKSB7IHJldHVy
biB1LnR5cGVkQXJyYXkuYnVmZmVyOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNiwxMyArMTA2LDEzIEBAIGlubGluZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQ
dXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3ZvaWQg
SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4ob2JqZWN0KTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gQ2FsbEZyYW1lOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KHRoaXNP
YmplY3QtPm1fcmVnaXN0ZXJzKSk7CiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcyAmJiAhdGhpc09iamVjdC0+aXNUb3JuT2ZmKCkgJiYgKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPnVzZXNBcmd1bWVudHMoKSB8fCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzRXZh
bCgpKSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmFy
Z3VtZW50cyk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYXBwZW5kR2VuZXJpY0lkZW50aWZpZXIo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyk7CiAKICAgICB7CiAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7
CkBAIC0xMjIsMTEgKzEyMiwxMSBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIXRoaXNP
YmplY3QtPmlzVmFsaWQoaXQtPnZhbHVlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQo
KSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRpZmllcihJ
ZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAv
LyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcwotICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmplY3Q6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhleGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAogaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZVB1
dFdpdGhBdHRyaWJ1dGVzKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
UHJvcGVydHlOYW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBzdGF0aWMg
dm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsMTQgKzIyMywxNCBAQCBzdGF0
aWMgaW50IGNvbXBhcmVLZXlzRm9yUVNvcnQoY29uc3Qgdm9pCiAgICAgcmV0dXJuIChkYSA+IGRi
KSAtIChkYSA8IGRiKTsKIH0KIAotdm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTQXJyYXk6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QsIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9i
amVjdCk7CiAKICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQotICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAg
ICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRpZmllcihleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKTsKIAotICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgSlNPYmpl
Y3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhleGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgbWFrZXMgcm9vbSBpbiB0aGUgdmVj
dG9yLCBidXQgbGVhdmVzIHRoZSBuZXcgc3BhY2UgZm9yIGNvdW50IHNsb3RzIHVuY2xlYXJlZC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE3
MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCBw
dXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmKTsKIAogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBKU09iamVj
dCosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImLCBFbnVtZXJhdGlvbk1vZGUpOwogCiBwcml2YXRl
OgogICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTcwNDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSwxNCArMTE1LDE0IEBAIGJvb2wgSlNBcnJheUJ1ZmZlcjo6ZGVsZXRlUHJv
cGVydHkoSlNDZWwKIH0KIAogdm9pZCBKU0FycmF5QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMoCi0gICAgSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgYXJyYXksIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNBcnJheUJ1ZmZlciogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKICAgICAKICAgICBpZiAobW9k
ZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQotICAgICAgICBhcnJheS5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFwcGVu
ZEdlbmVyaWNJZGVudGlmaWVyKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKICAg
ICAKLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgYXJyYXksIG1vZGUpOworICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhl
eGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlci5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpOwogICAgIAotICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiwgRW51
bWVyYXRpb25Nb2RlKTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkocmV2aXNpb24gMTcwNDAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsMTggKzE5NiwxOCBAQCBib29sIEpTQXJyYXlCdWZmZXJW
aWV3OjpkZWxldGVQcm9wZXJ0eSgKIH0KIAogdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKAotICAgIEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycmF5LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZUFnZ3JlZ2F0
b3ImIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTQXJyYXlC
dWZmZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0
KTsKICAgICAKICAgICAvLyBsZW5ndGgvYnl0ZU9mZnNldC9ieXRlTGVuZ3RoIGFyZSBEb250RW51
bSwgYXQgbGVhc3QgaW4gRmlyZWZveC4KICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKSB7Ci0gICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZU9mZnNldCk7Ci0gICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxl
bmd0aCk7Ci0gICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKTsK
KyAgICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRpZmllcihleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYXBwZW5kR2Vu
ZXJpY0lkZW50aWZpZXIoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOworICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5idWZmZXIpOwogICAgIH0KICAgICAKLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOworICAgIEJhc2U6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhleGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAogdm9pZCBKU0FycmF5QnVmZmVyVmlldzo6ZmluYWxpemUoSlNDZWxsKiBjZWxs
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcg
QEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBi
b29sIHNob3VsZFRocm93KTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogICAgIAotICAgIHN0YXRpYyB2b2lkIGdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBZ2dyZWdh
dG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKIHB1YmxpYzoKICAgICBUeXBlZEFycmF5TW9k
ZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwyOCAr
MTg2LDI4IEBAIGJvb2wgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEoKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSlNDZWxsOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCitT
dHJpbmcgSlNDZWxsOjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEpT
Q2VsbDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCitjb25zdCBjaGFyKiBKU0NlbGw6
OmNsYXNzTmFtZSgpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gY2xhc3NJbmZvKCktPmNsYXNzTmFtZTsKIH0KIAotU3RyaW5nIEpTQ2VsbDo6
Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKK3ZvaWQgSlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVz
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYsIEVudW1lcmF0
aW9uTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBTdHJpbmcoKTsKIH0KIAotY29uc3QgY2hhciogSlNDZWxsOjpjbGFzc05hbWUoKSBjb25zdAor
dm9pZCBKU0NlbGw6OmdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQ
cm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKQogewotICAgIHJldHVybiBj
bGFzc0luZm8oKS0+Y2xhc3NOYW1lOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLXZvaWQgSlNDZWxsOjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit2b2lkIEpTQ2VsbDo6Z2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgUHJvcGVydHlO
YW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0OwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7Ci1jbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eTsKK2NsYXNzIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CiAKIGVu
dW0gRW51bWVyYXRpb25Nb2RlIHsKQEAgLTIwNiw5ICsyMDYsOSBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICAvLyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgb2Ygb3ZlcnJpZGUtYWJsZSBzdGF0aWMgZnVuY3Rp
b25zIGZvciBjbGFzc2VzIHRvIHB1dCBpbiB0aGVpciBNZXRob2RUYWJsZQogICAgIHN0YXRpYyBK
U1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpOwotICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFT
SCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBZ2dy
ZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShj
b25zdCBKU09iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1c3Rv
bUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNyArMzg3LDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAotdm9pZCBKU0Z1bmN0
aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCit2b2lkIEpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3Im
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRnVuY3Rpb24q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7CiAgICAgaWYgKCF0aGlz
T2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpICYmIChtb2RlID09IEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMpKSB7CkBAIC0zOTYsMTIgKzM5NiwxMiBAQCB2b2lkIEpTRnVuY3Rpb246
OmdldE93bk5vbkluZGV4UHJvcGVydHlOCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNP
YmplY3QpOwogICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIHNs
b3QpOwogCi0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmFyZ3Vt
ZW50cyk7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmNhbGxl
cik7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7
Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKHZtLnByb3BlcnR5TmFtZXMtPm5hbWUpOworICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKHZtLnByb3BlcnR5TmFt
ZXMtPmFyZ3VtZW50cyk7CisgICAgICAgIHByb3BlcnR5TmFtZXMuYXBwZW5kR2VuZXJpY0lkZW50
aWZpZXIodm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVyKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
cHBlbmRHZW5lcmljSWRlbnRpZmllcih2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOworICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUpOwogICAgIH0KLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCiB2b2lkIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBjcmVhdGVBbGxvY2F0aW9u
UHJvZmlsZShFeGVjU3RhdGUqLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAg
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBKU09i
amVjdCosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7
CiAKICAgICAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJl
dmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw4ICsyNDAsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgcHV0QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIHN0
YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpOwogICAgIAotICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5Jiwg
RW51bWVyYXRpb25Nb2RlKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OworICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUq
LCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImLCBFbnVtZXJhdGlvbk1vZGUpOwor
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKICAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgc3Rh
dGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tl
bik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAkocmV2aXNpb24gMTcwNDAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNywyNiArNDA3LDIzIEBAIGJvb2wgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmQKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4KIHZvaWQgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcygKLSAgICBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25Nb2RlIG1vZGUpCisgICAgRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CiAgICAgCiAgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykK
LSAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpOwogICAgIAotICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1l
cyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7CisgICAgQmFzZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzKGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPgogdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjo6Z2V0T3duUHJvcGVydHlOYW1lcygKLSAgICBKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSwgRW51bWVyYXRpb25N
b2RlIG1vZGUpCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0
eU5hbWVBZ2dyZWdhdG9yJiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
ICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVy
aWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRoaXNPYmplY3QtPm1fbGVuZ3RoOyArK2kpCi0gICAgICAgIGFycmF5LmFkZChJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLSAgICAKLSAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKKyAgICBwcm9wZXJ0eU5hbWVz
LnNldEluZGV4aW5nTGltaXQoZXhlYy0+dm0oKSwgdGhpc09iamVjdC0+bV9sZW5ndGgpOworICAg
IHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0luZGV4U3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbmRleFN0cmluZy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbmRleFN0cmluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTSW5kZXhT
dHJpbmdfaAorI2RlZmluZSBKU0luZGV4U3RyaW5nX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTSW5kZXhTdHJpbmcgOiBwdWJsaWMgSlNTdHJpbmcgeworICAgIAorfTsKKyAgICAKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNJbmRleFN0cmluZ19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmNwcAkocmV2aXNp
b24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNOb3RBbk9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBKU05vdEFuT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBKU05v
dEFuT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3ZvaWQgSlNOb3RBbk9iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgUHJvcGVy
dHlOYW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSkKIHsKICAgICBBU1NFUlRfVU5VU0VE
KGV4ZWMsIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU05vdEFuT2JqZWN0LmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTm90QW5PYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKICAgICAg
ICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CiAKLSAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImLCBFbnVtZXJhdGlv
bk1vZGUpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OTMsOCArNDkzLDkgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmRO
ZXh0UHJvcAogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNpbmdBcnJheVJlcGxhY2Vy
KQogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IHN0cmluZ2lmaWVyLm1fYXJyYXlS
ZXBsYWNlclByb3BlcnR5TmFtZXMuZGF0YSgpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlOYW1lcyhleGVjKTsKLSAg
ICAgICAgICAgICAgICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhtX29iamVjdC5nZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXlBZ2dyZWdh
dG9yIGFnZ3JlZ2F0b3IoZXhlYyk7CisgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRh
YmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIG1fb2JqZWN0LmdldCgp
LCBhZ2dyZWdhdG9yLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSYgb2JqZWN0UHJvcGVydHlOYW1lcyA9IGFnZ3JlZ2F0b3IuYXJy
YXkoKTsKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5h
bWVzLnJlbGVhc2VEYXRhKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3NpemUgPSBt
X3Byb3BlcnR5TmFtZXMtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNpemUoKTsKQEAgLTcxMCw4ICs3
MTEsOSBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGluVmFsdWUpOwogICAgICAgICAg
ICAgICAgIG9iamVjdFN0YWNrLnB1c2gob2JqZWN0KTsKICAgICAgICAgICAgICAgICBpbmRleFN0
YWNrLmFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0YWNrLmFwcGVuZChQcm9w
ZXJ0eU5hbWVBcnJheShtX2V4ZWMpKTsKLSAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBtX2V4ZWMsIHByb3BlcnR5U3RhY2su
bGFzdCgpLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0b3IgYWdncmVnYXRvcihtX2V4ZWMpOworICAgICAgICAgICAg
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX2V4ZWMsIG9i
amVjdCwgYWdncmVnYXRvciwgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9leGVjLT52bSgp
LCBhZ2dyZWdhdG9yLmFycmF5KCkucmVsZWFzZURhdGEoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKICAgICAgICAgICAgIEZBTExUSFJPVUdI
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIGNvbnN0IENsYXNzSW5mbyBKU09i
amVjdDo6c19pbmZvID0geyAiT2IKIAogY29uc3QgQ2xhc3NJbmZvIEpTRmluYWxPYmplY3Q6OnNf
aW5mbyA9IHsgIk9iamVjdCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNGaW5hbE9iamVjdCkgfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVy
dHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUsIGJvb2wg
ZGlkUmVpZnkpCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIFByb3BlcnR5TmFtZUFnZ3Jl
Z2F0b3ImIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlLCBib29sIGRpZFJlaWZ5
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGdldENsYXNzUHJvcGVydHlOYW1lcwogCiAgICAgICAgIGZvciAoYXV0byBp
dGVyID0gdGFibGUtPmJlZ2luKHZtKTsgaXRlciAhPSB0YWJsZS0+ZW5kKHZtKTsgKytpdGVyKSB7
CiAgICAgICAgICAgICBpZiAoKCEoaXRlci0+YXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8ICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSAmJiAhKChpdGVyLT5hdHRyaWJ1dGVz
KCkgJiBCdWlsdGluT3JGdW5jdGlvbikgJiYgZGlkUmVpZnkpKQotICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKGl0ZXIua2V5KCkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoSWRlbnRpZmllcihleGVjLCBpdGVyLmtleSgpKSk7
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xMjk4LDEwICsxMjk4LDEzIEBAIGJvb2wgSlNPYmpl
Y3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsK
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAg
IAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7ICAgIAorCiAgICAgaWYgKGkgPiBNQVhfQVJSQVlf
SU5ERVgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgp
KS0+ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVj
LCBpKSk7CisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwog
ICAgIAorICAgIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnNldEhhc0RlbGV0ZWRJbmRleGVk
UHJvcGVydGllcygpOworCiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkg
ewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX1VOREVD
SURFRF9JTkRFWElOR19UWVBFUzoKQEAgLTE0NjAsNzEgKzE0NjMsOTQgQEAgYm9vbCBKU09iamVj
dDo6Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK2Jvb2wgSlNPYmplY3Q6OmNhbkl0ZXJhdGVJbmRpY2VzUXVpY2tseSgpIGNvbnN0CiB7
Ci0gICAgcHJvcGVydHlOYW1lcy5zZXRCYXNlT2JqZWN0KG9iamVjdCk7Ci0gICAgb2JqZWN0LT5t
ZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwotCi0gICAgaWYgKG9iamVjdC0+cHJvdG90eXBlKCkuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGluZGV4aW5nVHlwZSgpKSB7Cisg
ICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBTExfVU5ERUNJREVE
X0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgY2Fz
ZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzogeworICAgICAgICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMt
PmJ1dHRlcmZseSgpOworICAgICAgICB1bnNpZ25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJm
bHkoKTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldOworICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIEpTT2JqZWN0KiBwcm90b3R5
cGUgPSBhc09iamVjdChvYmplY3QtPnByb3RvdHlwZSgpKTsKLSAgICB3aGlsZSgxKSB7Ci0gICAg
ICAgIGlmIChwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcygpKSB7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGgg
PSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwotICAgICAgICBKU1ZhbHVlIG5leHRQcm90byA9IHByb3RvdHlwZS0+cHJvdG90eXBl
KCk7Ci0gICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgcHJvdG90eXBlID0gYXNPYmplY3QobmV4dFByb3RvKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi12
b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQordm9pZCBKU09iamVjdDo6Z2V0T3duR2VuZXJpY0luZGV4ZWRQcm9wZXJ0aWVz
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgLy8gQWRkIG51bWVyaWMgcHJvcGVydGllcyBm
aXJzdC4gVGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252ZW50aW9uLgotICAgIC8v
IEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3Ig
ZXZlcnkgaW50ZWdlcgotICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdl
IGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKLSAgICAvLyB3aGljaCBhbG1v
c3QgY2VydGFpbmx5IG1lYW5zIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgUHJvcGVydHlOYW1l
QXJyYXkuCi0gICAgc3dpdGNoIChvYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgQVNTRVJU
KCFjYW5JdGVyYXRlSW5kaWNlc1F1aWNrbHkoKSk7CisgICAgc3dpdGNoIChpbmRleGluZ1R5cGUo
KSkgewogICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX1VO
REVDSURFRF9JTkRFWElOR19UWVBFUzoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6IHsKLSAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1
dHRlcmZseSgpOworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZs
eSgpOwogICAgICAgICB1bnNpZ25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5n
dGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkg
ewogICAgICAgICAgICAgaWYgKCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmRHZW5l
cmljSWRlbnRpZmllcihJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzogewotICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+YnV0dGVy
Zmx5KCk7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7
CiAgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRpZmll
cihJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKLSAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0LT5tX2J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1fYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIHVzZWRW
ZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9y
TGVuZ3RoKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCi0gICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRp
ZmllcihJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFw
LmdldCgpKSB7CkBAIC0xNTM5LDcgKzE1NjUsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0ZDo6c29ydChrZXlz
LmJlZ2luKCksIGtleXMuZW5kKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRpZmllcihJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtl
eXNbaV0pKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNTQ3LDIwICsx
NTczLDQ3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICBk
ZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAg
ICAKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotdm9p
ZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQordm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lQWdncmVn
YXRvciYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBnZXRDbGFzc1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5j
bGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNS
ZWlmaWVkKCkpOworICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zy
b21TdHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQogCit2b2lkIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwg
UHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBib29sIGNhbkNhY2hlUHJvcGVy
dGllc0Zyb21TdHJ1Y3R1cmUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7Ci0gICAgb2JqZWN0LT5z
dHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlO
YW1lcywgbW9kZSk7CisgICAgaWYgKG9iamVjdC0+Y2FuSXRlcmF0ZUluZGljZXNRdWlja2x5KCkp
CisgICAgICAgIHByb3BlcnR5TmFtZXMuc2V0SW5kZXhpbmdMaW1pdCh2bSwgb2JqZWN0LT5nZXRB
cnJheUxlbmd0aCgpKTsKKyAgICBlbHNlCisgICAgICAgIG9iamVjdC0+Z2V0T3duR2VuZXJpY0lu
ZGV4ZWRQcm9wZXJ0aWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworCisgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhleGVjLCBvYmpl
Y3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0
eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lQWdn
cmVnYXRvciYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBwcm9wZXJ0eU5hbWVzLndpbGxTdGFydEFwcGVuZGluZ0Zv
ck9iamVjdCh2bSwgb2JqZWN0LCB0cnVlKTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwor
ICAgIHByb3BlcnR5TmFtZXMuZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KG9iamVjdCk7Cisg
ICAgCisgICAgaWYgKG9iamVjdC0+cHJvdG90eXBlKCkuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChjYW5DYWNoZVByb3BlcnRpZXNGcm9tU3RydWN0dXJlKQotICAgICAgICBw
cm9wZXJ0eU5hbWVzLnNldE51bUNhY2hlYWJsZVNsb3RzRm9yT2JqZWN0KG9iamVjdCwgcHJvcGVy
dHlOYW1lcy5zaXplKCkpOworICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChvYmpl
Y3QtPnByb3RvdHlwZSgpKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBwcm9wZXJ0eU5h
bWVzLndpbGxTdGFydEFwcGVuZGluZ0Zvck9iamVjdCh2bSwgcHJvdG90eXBlLCBmYWxzZSk7Cisg
ICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4
ZWMsIHByb3RvdHlwZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHByb3BlcnR5TmFt
ZXMuZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KHByb3RvdHlwZSk7CisKKyAgICAgICAgSlNW
YWx1ZSBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPnByb3RvdHlwZSgpOworICAgICAgICBpZiAobmV4
dFByb3RvLmlzTnVsbCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHByb3RvdHlwZSA9
IGFzT2JqZWN0KG5leHRQcm90byk7CisgICAgfQogfQogCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVt
YmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNiBAQCBj
bGFzcyBKU0Z1bmN0aW9uOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFy
a2VkQmxvY2s7CiBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7Ci1jbGFzcyBQcm9wZXJ0eU5hbWVB
cnJheTsKIGNsYXNzIFN0cnVjdHVyZTsKIHN0cnVjdCBIYXNoVGFibGU7CiBzdHJ1Y3QgSGFzaFRh
YmxlVmFsdWU7CkBAIC00ODAsOSArNDc5LDExIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0luc3Rh
bmNlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGRlZmF1bHRIYXNJbnN0
YW5jZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3RvdHlwZVByb3BlcnR5KTsKIAot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9y
JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0
eU5hbWVBZ2dyZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBib29sIGNhbkl0ZXJhdGVJ
bmRpY2VzUXVpY2tseSgpIGNvbnN0OworICAgIHZvaWQgZ2V0T3duR2VuZXJpY0luZGV4ZWRQcm9w
ZXJ0aWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImLCBFbnVtZXJhdGlvbk1v
ZGUpOwogCiAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICBib29sIGdldFByaW1pdGl2ZU51
bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBFbnVtZXJhdG9yRW50cnk6OnNf
aW5mbyA9IHsgIkVudW1lcmF0b3JFbnRyeSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
RW51bWVyYXRvckVudHJ5KSB9OworCitFbnVtZXJhdG9yRW50cnkqIEVudW1lcmF0b3JFbnRyeTo6
Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBFbnVtZXJhdG9yRW50cnkqIG5ld0VudHJ5ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8RW51bWVyYXRvckVudHJ5Pih2bS5oZWFwKSkgRW51bWVyYXRv
ckVudHJ5KHZtKTsKKyAgICBuZXdFbnRyeS0+SlNDZWxsOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmV0dXJuIG5ld0VudHJ5OworfQorCitFbnVtZXJhdG9yRW50cnkqIEVudW1lcmF0b3JFbnRy
eTo6Y2xvbmUoVk0mIHZtLCBjb25zdCBFbnVtZXJhdG9yRW50cnkmIGVudHJ5KQoreworICAgIEVu
dW1lcmF0b3JFbnRyeSogbmV3RW50cnkgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFbnVt
ZXJhdG9yRW50cnk+KHZtLmhlYXApKSBFbnVtZXJhdG9yRW50cnkodm0sIGVudHJ5KTsKKyAgICBu
ZXdFbnRyeS0+ZmluaXNoQ3JlYXRpb24odm0sIGVudHJ5KTsKKyAgICByZXR1cm4gbmV3RW50cnk7
Cit9CisKK0VudW1lcmF0b3JFbnRyeTo6RW51bWVyYXRvckVudHJ5KFZNJiB2bSkKKyAgICA6IEpT
Q2VsbCh2bSwgdm0uZW51bWVyYXRvckVudHJ5U3RydWN0dXJlLmdldCgpKQorICAgICwgbV9jdXJy
ZW50SW5kZXhlZEluZGV4KDEpIC8vIFdlIHN0YXJ0IGF0IDEgaW5zdGVhZCBvZiAwIGJlY2F1c2Ug
dGhlIGZpcnN0IGl0ZXJhdGlvbiBkb2Vzbid0IGFzayBmb3IgdGhlIG5leHQgaW5kZXguIFRPRE86
IEdldCByaWQgb2YgdGhpcyBoYWNrLgorICAgICwgbV9jdXJyZW50U3RydWN0dXJlUHJvcGVydHlJ
bmRleCgwKQorICAgICwgbV9jdXJyZW50R2VuZXJpY1Byb3BlcnR5SW5kZXgoMCkKKyAgICAsIG1f
aW5kZXhpbmdMaW1pdCgwKQoreworfQorCitFbnVtZXJhdG9yRW50cnk6OkVudW1lcmF0b3JFbnRy
eShWTSYgdm0sIGNvbnN0IEVudW1lcmF0b3JFbnRyeSYgb3RoZXIpCisgICAgOiBKU0NlbGwodm0s
IHZtLmVudW1lcmF0b3JFbnRyeVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fY3VycmVudEluZGV4
ZWRJbmRleCgxKSAvLyBXZSBzdGFydCBhdCAxIGluc3RlYWQgb2YgMCBiZWNhdXNlIHRoZSBmaXJz
dCBpdGVyYXRpb24gZG9lc24ndCBhc2sgZm9yIHRoZSBuZXh0IGluZGV4LiBUT0RPOiBHZXQgcmlk
IG9mIHRoaXMgaGFjay4KKyAgICAsIG1fY3VycmVudFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoMCkK
KyAgICAsIG1fY3VycmVudEdlbmVyaWNQcm9wZXJ0eUluZGV4KDApCisgICAgLCBtX2luZGV4aW5n
TGltaXQob3RoZXIubV9pbmRleGluZ0xpbWl0KQorICAgICwgbV9zdHJ1Y3R1cmVQcm9wZXJ0eU5h
bWVzKG90aGVyLm1fc3RydWN0dXJlUHJvcGVydHlOYW1lcykKKyAgICAsIG1fZ2VuZXJpY1Byb3Bl
cnR5TmFtZXMob3RoZXIubV9nZW5lcmljUHJvcGVydHlOYW1lcykKK3sKK30KKwordm9pZCBFbnVt
ZXJhdG9yRW50cnk6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29uc3QgRW51bWVyYXRvckVudHJ5
JiBlbnRyeSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9zdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBlbnRyeS5tX3N0cnVjdHVyZS5nZXQoKSk7CisgICAgbV9vYmplY3Qu
c2V0KHZtLCB0aGlzLCBlbnRyeS5tX29iamVjdC5nZXQoKSk7Cit9CisKK3ZvaWQgRW51bWVyYXRv
ckVudHJ5OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxFbnVtZXJh
dG9yRW50cnkqPihjZWxsKS0+RW51bWVyYXRvckVudHJ5Ojp+RW51bWVyYXRvckVudHJ5KCk7Cit9
CisKK3ZvaWQgRW51bWVyYXRvckVudHJ5Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNp
dG9yKTsKKyAgICBFbnVtZXJhdG9yRW50cnkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RW51bWVyYXRv
ckVudHJ5Kj4oY2VsbCk7CisgICAgaWYgKHRoaXNPYmplY3QtPm1fb2JqZWN0KQorICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9vYmplY3QpOworICAgIGlmICh0aGlzT2JqZWN0
LT5tX3N0cnVjdHVyZSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3Ry
dWN0dXJlKTsKKyAgICBpZiAodGhpc09iamVjdC0+bV9uZXh0RW50cnkpCisgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHRFbnRyeSk7Cit9CisKK3ZvaWQgRW51bWVyYXRv
ckVudHJ5OjphZGRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGNvbnN0IFZlY3RvcjxJZGVudGlmaWVy
PiYgcHJvcGVydHlOYW1lcykKK3sKKyAgICBtX3N0cnVjdHVyZVByb3BlcnR5TmFtZXMgPSBSZWZD
b3VudGVkQXJyYXk8SWRlbnRpZmllcj4ocHJvcGVydHlOYW1lcyk7Cit9CisKK3ZvaWQgRW51bWVy
YXRvckVudHJ5OjphZGRHZW5lcmljUHJvcGVydHlOYW1lcyhjb25zdCBWZWN0b3I8SWRlbnRpZmll
cj4mIHByb3BlcnR5TmFtZXMpCit7CisgICAgbV9nZW5lcmljUHJvcGVydHlOYW1lcyA9IFJlZkNv
dW50ZWRBcnJheTxJZGVudGlmaWVyPihwcm9wZXJ0eU5hbWVzKTsKK30KKworY29uc3QgQ2xhc3NJ
bmZvIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6c19pbmZvID0geyAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IpIH07CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cioganNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yPih2bS5oZWFwKSkgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKHZtKTsKKyAgICBqc1Byb3BlcnR5TmFtZUVudW1lcmF0b3ItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4ganNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOworfQorCitKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y29udmVydFRvR2VuZXJp
Y0VudW1lcmF0aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgRW51bWVyYXRvckVudHJ5KiBl
bnRyeSkKK3sKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGdlbmVyaWNFbnVtZXJhdG9y
ID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0pOworICAgIGdlbmVyaWNFbnVt
ZXJhdG9yLT53aWxsU3RhcnRBcHBlbmRpbmdGb3JPYmplY3Qodm0sIG9iamVjdCwgdHJ1ZSk7Cisg
ICAgd2hpbGUgKGVudHJ5KSB7CisgICAgICAgIHdoaWxlIChlbnRyeS0+aGFzTmV4dEluZGV4ZWRQ
cm9wZXJ0eU5hbWUoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBlbnRyeS0+bmV4
dEluZGV4ZWRQcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgICAgIGdlbmVyaWNFbnVtZXJhdG9yLT5h
cHBlbmRHZW5lcmljSWRlbnRpZmllcihJZGVudGlmaWVyOjpmcm9tKCZ2bSwgaW5kZXgpKTsKKyAg
ICAgICAgfQorICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUgPSBlbnRyeS0+
bmV4dFN0cnVjdHVyZVByb3BlcnR5TmFtZSgpOworICAgICAgICB3aGlsZSAocHJvcGVydHlOYW1l
KSB7CisgICAgICAgICAgICBnZW5lcmljRW51bWVyYXRvci0+YXBwZW5kR2VuZXJpY0lkZW50aWZp
ZXIoKnByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBlbnRyeS0+bmV4
dFN0cnVjdHVyZVByb3BlcnR5TmFtZSgpOworICAgICAgICB9CisgICAgICAgIHByb3BlcnR5TmFt
ZSA9IGVudHJ5LT5uZXh0R2VuZXJpY1Byb3BlcnR5TmFtZSgpOworICAgICAgICB3aGlsZSAocHJv
cGVydHlOYW1lKSB7CisgICAgICAgICAgICBnZW5lcmljRW51bWVyYXRvci0+YXBwZW5kR2VuZXJp
Y0lkZW50aWZpZXIoKnByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBl
bnRyeS0+bmV4dEdlbmVyaWNQcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWVudHJ5LT5uZXh0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZW50cnkgPSBFbnVt
ZXJhdG9yRW50cnk6OmNsb25lKHZtLCAqZW50cnktPm5leHQoKSk7CisgICAgfQorICAgIGdlbmVy
aWNFbnVtZXJhdG9yLT5kaWRGaW5pc2hBcHBlbmRpbmdGb3JPYmplY3Qob2JqZWN0KTsKKyAgICBy
ZXR1cm4gZ2VuZXJpY0VudW1lcmF0b3I7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSkKKyAgICA6IEpTQ2VsbCh2bSwgdm0ucHJv
cGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faWRlbnRpZmllclNl
dChhZG9wdFB0cihuZXcgSWRlbnRpZmllclNldCkpCisgICAgLCBtX3RhaWxFbnRyeShudWxscHRy
KQorICAgICwgbV9jYW5Hb0Zhc3QodHJ1ZSkKK3sKK30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpLT5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6On5K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9oZWFkRW50
cnkpOworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6d2lsbFN0YXJ0QXBwZW5k
aW5nRm9yT2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgYm9vbCBpc0Jhc2VPYmplY3Qp
Cit7CisgICAgRW51bWVyYXRvckVudHJ5KiBuZXdFbnRyeSA9IEVudW1lcmF0b3JFbnRyeTo6Y3Jl
YXRlKHZtKTsKKworICAgIC8vIFRoZSBlbnRyeSBmb3IgdGhlIGJhc2Ugb2JqZWN0IHNob3VsZCBu
b3QgaGF2ZSBhIHNwZWNpZmljIG9iamVjdCB0byBjaGVjayBmb3Igc28KKyAgICAvLyB0aGF0IGl0
IGNhbiBiZSBnZW5lcmljIGFjcm9zcyBtdWx0aXBsZSBiYXNlIG9iamVjdHMgd2l0aCB0aGUgc2Ft
ZSBwcm90b3R5cGUgY2hhaW4uCisgICAgaWYgKCFpc0Jhc2VPYmplY3QpCisgICAgICAgIG5ld0Vu
dHJ5LT5zZXRPYmplY3Qodm0sIG9iamVjdCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBv
YmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgbmV3RW50cnktPnNldFN0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlKTsKKworICAgIC8vIFRPRE86IERvIHdlIGNhcmUgYWJvdXQgZ2V0dGVycy9zZXR0ZXJz
PworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkKKyAgICAgICAg
fHwgc3RydWN0dXJlLT5oYXNEZWxldGVkSW5kZXhlZFByb3BlcnRpZXMoKSkKKyAgICAgICAgbV9j
YW5Hb0Zhc3QgPSBmYWxzZTsKKworICAgIG1fY3VycmVudFN0cnVjdHVyZUlkZW50aWZpZXJzID0g
YWRvcHRQdHIobmV3IFZlY3RvcjxJZGVudGlmaWVyPik7CisgICAgbV9jdXJyZW50R2VuZXJpY0lk
ZW50aWZpZXJzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxJZGVudGlmaWVyPik7CisKKyAgICBpZiAo
IW1faGVhZEVudHJ5KSB7CisgICAgICAgIEFTU0VSVCghbV90YWlsRW50cnkpOworICAgICAgICBt
X2hlYWRFbnRyeS5zZXQodm0sIHRoaXMsIG5ld0VudHJ5KTsKKyAgICAgICAgbV90YWlsRW50cnkg
PSBuZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX3RhaWxF
bnRyeSk7CisgICAgbV90YWlsRW50cnktPnNldE5leHQodm0sIG5ld0VudHJ5KTsKKyAgICBtX3Rh
aWxFbnRyeSA9IG5ld0VudHJ5OworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
c2V0SW5kZXhpbmdMaW1pdCh1bnNpZ25lZCBsaW1pdCkKK3sKKyAgICAvLyBJZiB3ZSdyZSBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLCB3ZSBmb3JjZSBpbmRleGVkIHByb3BlcnRpZXMgdG8gYmUgZ2Vu
ZXJpYy4KKyAgICBpZiAoaGFzR2VuZXJpY0lkZW50aWZpZXJzKCkgfHwgY3VycmVudEVudHJ5KCku
b2JqZWN0KCkgfHwgIW1fY2FuR29GYXN0KSB7CisgICAgICAgIFZNKiB2bSA9IEhlYXA6OmhlYXAo
dGhpcyktPnZtKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaW1pdDsgKytp
KQorICAgICAgICAgICAgYXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIE5vIG9iamVjdCBzaG91bGQg
c2V0IHRoZSB0aGUgaW5kZXhpbmcgbGltaXQgdHdpY2UuCisgICAgaWYgKGN1cnJlbnRFbnRyeSgp
LmluZGV4aW5nTGltaXQoKSkgeworICAgICAgICBBU1NFUlQoIWxpbWl0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjdXJyZW50RW50cnkoKS5zZXRJbmRleGluZ0xpbWl0KGxpbWl0KTsK
K30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmFwcGVuZFN0cnVjdHVyZUlkZW50
aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICAvLyBJZiB3ZSdyZSBp
biB0aGUgcHJvdG90eXBlIGNoYWluLCB3ZSBmb3JjZSBzdHJ1Y3R1cmUgcHJvcGVydGllcyB0byBi
ZSBnZW5lcmljLgorICAgIGlmIChoYXNHZW5lcmljSWRlbnRpZmllcnMoKSB8fCBjdXJyZW50RW50
cnkoKS5vYmplY3QoKSB8fCAhbV9jYW5Hb0Zhc3QpIHsKKyAgICAgICAgYXBwZW5kR2VuZXJpY0lk
ZW50aWZpZXIoaWRlbnRpZmllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNv
bnRhaW5zSWRlbnRpZmllcihpZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faWRl
bnRpZmllclNldC0+YWRkKGlkZW50aWZpZXIuaW1wbCgpKTsKKyAgICBtX2N1cnJlbnRTdHJ1Y3R1
cmVJZGVudGlmaWVycy0+YXBwZW5kKGlkZW50aWZpZXIpOworfQorCit2b2lkIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6YXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllcikKK3sKKyAgICBpZiAoY29udGFpbnNJZGVudGlmaWVyKGlkZW50aWZpZXIpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9pZGVudGlmaWVyU2V0LT5hZGQoaWRlbnRpZmllci5pbXBs
KCkpOworICAgIG1fY3VycmVudEdlbmVyaWNJZGVudGlmaWVycy0+YXBwZW5kKGlkZW50aWZpZXIp
OworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGlkRmluaXNoQXBwZW5kaW5n
Rm9yT2JqZWN0KEpTT2JqZWN0KikKK3sKKyAgICBjdXJyZW50RW50cnkoKS5hZGRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVzKCptX2N1cnJlbnRTdHJ1Y3R1cmVJZGVudGlmaWVycyk7CisgICAgY3VycmVu
dEVudHJ5KCkuYWRkR2VuZXJpY1Byb3BlcnR5TmFtZXMoKm1fY3VycmVudEdlbmVyaWNJZGVudGlm
aWVycyk7CisgICAgbV9jdXJyZW50U3RydWN0dXJlSWRlbnRpZmllcnMuY2xlYXIoKTsKKyAgICBt
X2N1cnJlbnRHZW5lcmljSWRlbnRpZmllcnMuY2xlYXIoKTsKK30KKworYm9vbCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbnRhaW5zSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKSBjb25zdAoreworICAgIGlmIChtX2hlYWRFbnRyeS0+aW5kZXhpbmdMaW1pdCgpKSB7
CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gUHJvcGVydHlOYW1lKGlkZW50aWZpZXIpLmFzSW5k
ZXgoKTsKKyAgICAgICAgaWYgKGluZGV4ICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKKyAg
ICAgICAgICAgIHJldHVybiBpbmRleCA8IG1faGVhZEVudHJ5LT5pbmRleGluZ0xpbWl0KCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2lkZW50aWZpZXJTZXQtPmNvbnRhaW5zKGlkZW50aWZpZXIuaW1w
bCgpKTsKK30KKworUHJvcGVydHlOYW1lRW51bWVyYXRvckFnZ3JlZ2F0b3I6On5Qcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yQWdncmVnYXRvcigpCit7Cit9CisKK1ZNJiBQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yQWdncmVnYXRvcjo6dm0oKQoreworICAgIHJldHVybiAqSGVhcDo6aGVhcCgmbV9lbnVtZXJh
dG9yKS0+dm0oKTsKK30KKwordm9pZCBQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yQWdncmVnYXRvcjo6
c2V0SW5kZXhpbmdMaW1pdChWTSYsIHVuc2lnbmVkIGxpbWl0KQoreworICAgIG1fZW51bWVyYXRv
ci5zZXRJbmRleGluZ0xpbWl0KGxpbWl0KTsKK30KKwordm9pZCBQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yQWdncmVnYXRvcjo6YXBwZW5kU3RydWN0dXJlSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQoreworICAgIG1fZW51bWVyYXRvci5hcHBlbmRTdHJ1Y3R1cmVJZGVudGlm
aWVyKGlkZW50aWZpZXIpOworfQorCit2b2lkIFByb3BlcnR5TmFtZUVudW1lcmF0b3JBZ2dyZWdh
dG9yOjphcHBlbmRHZW5lcmljSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQoreworICAgIG1fZW51bWVyYXRvci5hcHBlbmRHZW5lcmljSWRlbnRpZmllcihpZGVudGlmaWVy
KTsKK30KKwordm9pZCBQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yQWdncmVnYXRvcjo6d2lsbFN0YXJ0
QXBwZW5kaW5nRm9yT2JqZWN0KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgYm9vbCBpc0Jhc2VP
YmplY3QpCit7CisgICAgbV9lbnVtZXJhdG9yLndpbGxTdGFydEFwcGVuZGluZ0Zvck9iamVjdCh2
bSwgb2JqZWN0LCBpc0Jhc2VPYmplY3QpOworfQorCit2b2lkIFByb3BlcnR5TmFtZUVudW1lcmF0
b3JBZ2dyZWdhdG9yOjpkaWRGaW5pc2hBcHBlbmRpbmdGb3JPYmplY3QoSlNPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBtX2VudW1lcmF0b3IuZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KG9iamVj
dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKKyNkZWZpbmUgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yX2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEVudW1lcmF0b3JFbnRyeSA6IHB1
YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBz
dGF0aWMgRW51bWVyYXRvckVudHJ5KiBjcmVhdGUoVk0mKTsKKyAgICBzdGF0aWMgRW51bWVyYXRv
ckVudHJ5KiBjbG9uZShWTSYsIGNvbnN0IEVudW1lcmF0b3JFbnRyeSYpOworCisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHZvaWQgYWRkU3RydWN0dXJlUHJvcGVy
dHlOYW1lcyhjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mKTsKKyAgICB2b2lkIGFkZEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYpOworCisgICAgdm9pZCBzZXRO
ZXh0KFZNJiB2bSwgRW51bWVyYXRvckVudHJ5KiBuZXh0KSB7IG1fbmV4dEVudHJ5LnNldCh2bSwg
dGhpcywgbmV4dCk7IH0KKyAgICBFbnVtZXJhdG9yRW50cnkqIG5leHQoKSBjb25zdCB7IHJldHVy
biBtX25leHRFbnRyeS5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeyBtX3N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIHN0cnVjdHVy
ZSk7IH0KKyAgICB2b2lkIHNldE9iamVjdChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpIHsgbV9v
YmplY3Quc2V0KHZtLCB0aGlzLCBvYmplY3QpOyB9CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlLmdldCgpOyB9CisgICAgSlNPYmplY3QqIG9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldElu
ZGV4aW5nTGltaXQodW5zaWduZWQgbGltaXQpIHsgbV9pbmRleGluZ0xpbWl0ID0gbGltaXQ7IH0K
KyAgICB1bnNpZ25lZCBpbmRleGluZ0xpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZ0xp
bWl0OyB9CisKKyAgICBib29sIGhhc05leHRJbmRleGVkUHJvcGVydHlOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJyZW50SW5kZXhlZEluZGV4IDwgbV9pbmRleGluZ0xpbWl0OyB9CisgICAgdW5z
aWduZWQgbmV4dEluZGV4ZWRQcm9wZXJ0eU5hbWUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c05leHRJbmRleGVkUHJvcGVydHlOYW1lKCkpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50SW5k
ZXhlZEluZGV4Kys7CisgICAgfQorCisgICAgY29uc3QgSWRlbnRpZmllciogbmV4dFN0cnVjdHVy
ZVByb3BlcnR5TmFtZSgpCisgICAgeworICAgICAgICBpZiAobV9jdXJyZW50U3RydWN0dXJlUHJv
cGVydHlJbmRleCA+PSBtX3N0cnVjdHVyZVByb3BlcnR5TmFtZXMuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmVQcm9wZXJ0eU5h
bWVzW21fY3VycmVudFN0cnVjdHVyZVByb3BlcnR5SW5kZXgrK107CisgICAgfQorCisgICAgY29u
c3QgSWRlbnRpZmllciogbmV4dEdlbmVyaWNQcm9wZXJ0eU5hbWUoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fY3VycmVudEdlbmVyaWNQcm9wZXJ0eUluZGV4ID49IG1fZ2VuZXJpY1Byb3BlcnR5TmFt
ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAm
bV9nZW5lcmljUHJvcGVydHlOYW1lc1ttX2N1cnJlbnRHZW5lcmljUHJvcGVydHlJbmRleCsrXTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIEVudW1lcmF0b3JFbnRyeShWTSYpOworICAgIEVudW1l
cmF0b3JFbnRyeShWTSYsIGNvbnN0IEVudW1lcmF0b3JFbnRyeSYpOworCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIGNvbnN0IEVudW1lcmF0b3JFbnRyeSYpOworCisgICAgdW5zaWduZWQg
bV9jdXJyZW50SW5kZXhlZEluZGV4OworICAgIHVuc2lnbmVkIG1fY3VycmVudFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXg7CisgICAgdW5zaWduZWQgbV9jdXJyZW50R2VuZXJpY1Byb3BlcnR5SW5kZXg7
CisgICAgdW5zaWduZWQgbV9pbmRleGluZ0xpbWl0OworICAgIFJlZkNvdW50ZWRBcnJheTxJZGVu
dGlmaWVyPiBtX3N0cnVjdHVyZVByb3BlcnR5TmFtZXM7CisgICAgUmVmQ291bnRlZEFycmF5PElk
ZW50aWZpZXI+IG1fZ2VuZXJpY1Byb3BlcnR5TmFtZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX29iamVjdDsK
KyAgICBXcml0ZUJhcnJpZXI8RW51bWVyYXRvckVudHJ5PiBtX25leHRFbnRyeTsKK307CisKK2Ns
YXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgor
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBjcmVhdGUoVk0mKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJl
ID0gdHJ1ZTsKKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKKworICAgIHZvaWQgd2lsbFN0YXJ0QXBwZW5kaW5nRm9yT2JqZWN0KFZNJiwgSlNP
YmplY3QqLCBib29sIGlzQmFzZU9iamVjdCk7CisgICAgdm9pZCBzZXRJbmRleGluZ0xpbWl0KHVu
c2lnbmVkKTsKKyAgICB2b2lkIGFwcGVuZFN0cnVjdHVyZUlkZW50aWZpZXIoY29uc3QgSWRlbnRp
ZmllciYpOworICAgIHZvaWQgYXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoY29uc3QgSWRlbnRpZmll
ciYpOworICAgIHZvaWQgZGlkRmluaXNoQXBwZW5kaW5nRm9yT2JqZWN0KEpTT2JqZWN0Kik7CisK
KyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNvbnZlcnRUb0dlbmVyaWNFbnVtZXJhdGlv
bihWTSYsIEpTT2JqZWN0KiBiYXNlLCBFbnVtZXJhdG9yRW50cnkqKTsKKworICAgIEVudW1lcmF0
b3JFbnRyeSogaGVhZEVudHJ5KCkgY29uc3QgeyByZXR1cm4gbV9oZWFkRW50cnkuZ2V0KCk7IH0K
KworcHJpdmF0ZToKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mKTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwg
fCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBj
b25zdCBFbnVtZXJhdG9yRW50cnkmIGN1cnJlbnRFbnRyeSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV90YWlsRW50cnkpOworICAgICAgICByZXR1cm4gKm1fdGFpbEVudHJ5OworICAg
IH0KKworICAgIEVudW1lcmF0b3JFbnRyeSYgY3VycmVudEVudHJ5KCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3RhaWxFbnRyeSk7CisgICAgICAgIHJldHVybiAqbV90YWlsRW50cnk7CisgICAg
fQorCisgICAgYm9vbCBoYXNHZW5lcmljSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiAhbV9j
dXJyZW50R2VuZXJpY0lkZW50aWZpZXJzLT5pc0VtcHR5KCk7IH0KKyAgICBib29sIGNvbnRhaW5z
SWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKSBjb25zdDsKKworICAgIHR5
cGVkZWYgSGFzaFNldDxTdHJpbmdJbXBsKiwgUHRySGFzaDxTdHJpbmdJbXBsKj4+IElkZW50aWZp
ZXJTZXQ7CisgICAgT3duUHRyPElkZW50aWZpZXJTZXQ+IG1faWRlbnRpZmllclNldDsKKyAgICBP
d25QdHI8VmVjdG9yPElkZW50aWZpZXI+PiBtX2N1cnJlbnRTdHJ1Y3R1cmVJZGVudGlmaWVyczsK
KyAgICBPd25QdHI8VmVjdG9yPElkZW50aWZpZXI+PiBtX2N1cnJlbnRHZW5lcmljSWRlbnRpZmll
cnM7CisgICAgV3JpdGVCYXJyaWVyPEVudW1lcmF0b3JFbnRyeT4gbV9oZWFkRW50cnk7CisgICAg
RW51bWVyYXRvckVudHJ5KiBtX3RhaWxFbnRyeTsKKyAgICBib29sIG1fY2FuR29GYXN0OworfTsK
KworY2xhc3MgUHJvcGVydHlOYW1lRW51bWVyYXRvckFnZ3JlZ2F0b3IgOiBwdWJsaWMgUHJvcGVy
dHlOYW1lQWdncmVnYXRvciB7CitwdWJsaWM6CisgICAgUHJvcGVydHlOYW1lRW51bWVyYXRvckFn
Z3JlZ2F0b3IoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQorICAgICAgICA6
IG1fZW51bWVyYXRvcigqZW51bWVyYXRvcikKKyAgICB7CisgICAgICAgIEFTU0VSVChlbnVtZXJh
dG9yKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Qcm9wZXJ0eU5hbWVFbnVtZXJhdG9yQWdncmVn
YXRvcigpOworCisgICAgdmlydHVhbCBWTSYgdm0oKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleGluZ0xpbWl0KFZNJiwgdW5zaWduZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRTdHJ1Y3R1cmVJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxTdGFydEFwcGVuZGluZ0Zvck9iamVj
dChWTSYsIEpTT2JqZWN0KiwgYm9vbCBpc0Jhc2VPYmplY3QpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hBcHBlbmRpbmdGb3JPYmplY3QoSlNPYmplY3QqKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3ImIG1fZW51bWVyYXRvcjsK
K307CisKK2lubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIFN0cnVjdHVyZVJhcmVEYXRh
OjpjYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IoKQoreworICAgIHJldHVybiBtX2NhY2hlZFByb3Bl
cnR5RW51bWVyYXRvci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6
OnNldENhY2hlZFByb3BlcnR5RW51bWVyYXRvcihWTSYgdm0sIGNvbnN0IFN0cnVjdHVyZSosIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogdmFsdWUpCit7CisgICAgbV9jYWNoZWRQcm9wZXJ0eUVu
dW1lcmF0b3Iuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsOSBA
QCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVj
KTsKLSAgICBvLT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG8sIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIFByb3BlcnR5TmFtZUFy
cmF5QWdncmVnYXRvciBhZ2dyZWdhdG9yKGV4ZWMpOworICAgIG8tPm1ldGhvZFRhYmxlKCktPmdl
dFByb3BlcnR5TmFtZXMoZXhlYywgbywgYWdncmVnYXRvciwgRXhjbHVkZURvbnRFbnVtUHJvcGVy
dGllcyk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMgPSBhZ2dyZWdhdG9y
LmFycmF5KCk7CiAgICAgc2l6ZV90IG51bUNhY2hlYWJsZVNsb3RzID0gMDsKICAgICBpZiAoIW8t
PnN0cnVjdHVyZSgpLT5oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpICYmICFvLT5zdHJ1Y3R1
cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpCiAgICAgICAgICYmICFvLT5zdHJ1Y3R1
cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSAmJiAhby0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIs
MTYgKzExMiwxNiBAQCBib29sIEpTUHJveHk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlCiAg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwogfQogCi12b2lkIEpTUHJveHk6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIEpTUHJveHk6OmdldFByb3BlcnR5TmFtZXMoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1Byb3h5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwotICAgIHRoaXNPYmplY3QtPnRhcmdl
dCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LT50YXJnZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgdGhpc09iamVjdC0+
dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMs
IHRoaXNPYmplY3QtPnRhcmdldCgpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotdm9pZCBK
U1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQordm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Byb3h5Kj4ob2JqZWN0KTsKLSAgICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFyZ2V0KCks
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5t
ZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhleGVjLCB0aGlzT2Jq
ZWN0LT50YXJnZXQoKSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNp
b24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4IEBAIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wg
c2hvdWxkVGhyb3cpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDE3MDQw
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgSlNTeW1ib2xUYWJsZU9i
amVjdDo6ZGVsZXRlUHJvcGVydHkKICAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKLXZvaWQgSlNTeW1ib2xUYWJs
ZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5h
bWVBZ2dyZWdhdG9yJiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVP
YmplY3QqPihvYmplY3QpOwogICAgIHsKQEAgLTY3LDExICs2NywxMSBAQCB2b2lkIEpTU3ltYm9s
VGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4CiAgICAgICAgICAgICBpZiAoaXQtPmtleS0+aXNF
bXB0eVVuaXF1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYg
KCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKElkZW50aWZpZXIoZXhlYywgaXQtPmtl
eS5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7CisgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhleGVjLCB0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgcHVibGljOgogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3ltYm9sVGFibGUuZ2V0KCk7IH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBZ2dy
ZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBJc0Vudmlyb25tZW50UmVjb3JkIHwgT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA1LDEzICsyMDUsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdAogewogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJSZXF1ZXN0ZWQgcHJvcGVydHkgbmFtZXMgb2YgYSB2YWx1ZSB0aGF0IGlzIG5vdCBh
biBvYmplY3QuIikpKTsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMpOwot
ICAgIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PmdldE93blByb3BlcnR5TmFtZXMoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBleGVjLCBw
cm9wZXJ0aWVzLCBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBQcm9wZXJ0eU5hbWVB
cnJheUFnZ3JlZ2F0b3IgYWdncmVnYXRvcihleGVjKTsKKyAgICBhc09iamVjdChleGVjLT5hcmd1
bWVudCgwKSktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4
ZWMsIGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgYWdncmVnYXRvciwgSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcyk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnRpZXMgPSBhZ2dy
ZWdhdG9yLmFycmF5KCk7CiAgICAgSlNBcnJheSogbmFtZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIDApOwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydGllcy5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBpKyspCiAgICAgICAg
IG5hbWVzLT5wdXNoKGV4ZWMsIGpzT3duZWRTdHJpbmcoZXhlYywgcHJvcGVydGllc1tpXS5zdHJp
bmcoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmFtZXMpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKIC8vIEZJWE1FOiBVc2UgdGhlIGVu
dW1lcmF0aW9uIGNhY2hlLgpAQCAtMjE5LDEzICsyMjAsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RDb25zdAogewogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJSZXF1ZXN0ZWQga2V5cyBvZiBhIHZhbHVlIHRoYXQgaXMg
bm90IGFuIG9iamVjdC4iKSkpOwotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhl
Yyk7Ci0gICAgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5tZXRob2RUYWJsZShleGVjLT52
bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIGV4
ZWMsIHByb3BlcnRpZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIFByb3BlcnR5
TmFtZUFycmF5QWdncmVnYXRvciBhZ2dyZWdhdG9yKGV4ZWMpOworICAgIGFzT2JqZWN0KGV4ZWMt
PmFyZ3VtZW50KDApKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFt
ZXMoZXhlYywgYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBhZ2dyZWdhdG9yLCBFeGNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydGllcyA9
IGFnZ3JlZ2F0b3IuYXJyYXkoKTsKICAgICBKU0FycmF5KiBrZXlzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCAwKTsKICAgICBzaXplX3QgbnVtUHJvcGVydGllcyA9IHByb3BlcnRpZXMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKQogICAg
ICAgICBrZXlzLT5wdXNoKGV4ZWMsIGpzT3duZWRTdHJpbmcoZXhlYywgcHJvcGVydGllc1tpXS5z
dHJpbmcoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoa2V5cyk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAogLy8gRVM1IDguMTAuNSBUb1By
b3BlcnR5RGVzY3JpcHRvcgpAQCAtMzMwLDggKzMzMiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0CiAKIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBKU09iamVjdCogcHJvcGVydGllcykK
IHsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwotICAgIGFzT2Jq
ZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURv
bnRFbnVtUHJvcGVydGllcyk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTShwcm9wZXJ0aWVzKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0b3IgYWdncmVn
YXRvcihleGVjKTsKKyAgICBhc09iamVjdChwcm9wZXJ0aWVzKS0+bWV0aG9kVGFibGUoZXhlYy0+
dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMoZXhlYywgYXNPYmplY3QocHJvcGVydGllcyksIGFn
Z3JlZ2F0b3IsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzID0gYWdncmVnYXRvci5hcnJheSgpOwogICAgIHNpemVfdCBudW1Q
cm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CiAgICAgVmVjdG9yPFByb3BlcnR5RGVz
Y3JpcHRvcj4gZGVzY3JpcHRvcnM7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbWFya0J1ZmZl
cjsKQEAgLTM5Nyw4ICs0MDIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0CiAgICAgfQogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5h
bWUgUCBvZiBPLAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYyk7Ci0gICAg
b2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGV4ZWMsIHByb3BlcnRpZXMsIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIFBy
b3BlcnR5TmFtZUFycmF5QWdncmVnYXRvciBhZ2dyZWdhdG9yKGV4ZWMpOworICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0
LCBhZ2dyZWdhdG9yLCBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydGllcyA9IGFnZ3JlZ2F0b3IuYXJyYXkoKTsKICAgICBQcm9wZXJ0eU5h
bWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3Ig
KFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIC8vIGEuIExldCBkZXNjIGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhv
ZCBvZiBPIHdpdGggUC4KQEAgLTQzNCw4ICs0NDAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0CiAgICAgfQogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3du
IHByb3BlcnR5IG5hbWUgUCBvZiBPLAotICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMo
ZXhlYyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpOworICAgIFByb3BlcnR5TmFtZUFycmF5QWdncmVnYXRvciBhZ2dyZWdhdG9yKGV4ZWMpOwor
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMo
ZXhlYywgb2JqZWN0LCBhZ2dyZWdhdG9yLCBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAg
ICBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydGllcyA9IGFnZ3JlZ2F0b3IuYXJyYXkoKTsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQo
KTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJv
cGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIC8vIGEuIExl
dCBkZXNjIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHdpdGggUC4KQEAgLTQ4Miw4ICs0ODksOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNTZWFsZWQoZXhlYy0+dm0oKSkpKTsKIAogICAgIC8v
IDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKLSAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0
b3IgYWdncmVnYXRvcihleGVjKTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdCwgYWdncmVnYXRvciwgSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcyk7CisgICAgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnRpZXMgPSBh
Z2dyZWdhdG9yLmFycmF5KCk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRl
cikgewogICAgICAgICAvLyBhLiBMZXQgZGVzYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhl
IFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIFAuCkBAIC01MTIs
OCArNTIwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKGV4
ZWMtPnZtKCkpKSk7CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFt
ZSBQIG9mIE8sCi0gICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjKTsKLSAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVj
dCwgZXhlYywgcHJvcGVydGllcywgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgUHJv
cGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yIGFnZ3JlZ2F0b3IoZXhlYyk7CisgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhleGVjLCBvYmplY3Qs
IGFnZ3JlZ2F0b3IsIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0aWVzID0gYWdncmVnYXRvci5hcnJheSgpOwogICAgIFByb3BlcnR5TmFt
ZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAo
UHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgLy8gYS4gTGV0IGRlc2MgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBQLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuaAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU0luZGV4U3RyaW5nLmgiCisjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0yNzUsNiAr
Mjc3LDI4IEBAIGlubGluZSBib29sIGlzUHJvdG90eXBlQ2hhaW5Ob3JtYWxpemVkKEoKICAgICB9
CiB9CiAKK2lubGluZSBKU1N0cmluZyoganNJbmRleFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIHVp
bnQzMl90IGluZGV4KQoreworICAgIC8vIFRPRE86IFVzZSBKU0luZGV4U3RyaW5nLgorICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4KS5zdHJpbmco
KSk7Cit9CisKK2lubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGpzUHJvcGVydHlOYW1l
RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1
cmUodm0pOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gc3Ry
dWN0dXJlLT5jYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKKyAgICBpZiAoZW51bWVyYXRvcikK
KyAgICAgICAgcmV0dXJuIGVudW1lcmF0b3I7CisKKyAgICBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0pOworICAgIFByb3BlcnR5TmFtZUVudW1lcmF0b3JB
Z2dyZWdhdG9yIGFnZ3JlZ2F0b3IoZW51bWVyYXRvcik7CisgICAgYmFzZS0+bWV0aG9kVGFibGUo
dm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIGJhc2UsIGFnZ3JlZ2F0b3IsIEV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXMpOworICAgIHN0cnVjdHVyZS0+c2V0Q2FjaGVkUHJvcGVydHlFbnVtZXJh
dG9yKHZtLCBlbnVtZXJhdG9yKTsKKyAgICByZXR1cm4gZW51bWVyYXRvcjsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBPcGVyYXRpb25zX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFnZ3JlZ2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5h
bWVBZ2dyZWdhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgUHJvcGVydHlOYW1lQWdncmVnYXRvcl9oCisjZGVmaW5lIFByb3BlcnR5TmFt
ZUFnZ3JlZ2F0b3JfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSWRlbnRpZmllcjsKK2Ns
YXNzIFZNOworCitjbGFzcyBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5Qcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yKCkgPSAwOworCisgICAgdmlydHVhbCBWTSYg
dm0oKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhpbmdMaW1pdChWTSYsIHVuc2ln
bmVkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cnVjdHVyZUlkZW50aWZpZXIoY29u
c3QgSWRlbnRpZmllciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kR2VuZXJpY0lkZW50
aWZpZXIoY29uc3QgSWRlbnRpZmllciYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsU3Rh
cnRBcHBlbmRpbmdGb3JPYmplY3QoVk0mLCBKU09iamVjdCosIGJvb2wgaXNCYXNlT2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaEFwcGVuZGluZ0Zvck9iamVjdChKU09iamVj
dCopID0gMDsKK307CisKK2lubGluZSBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yOjp+UHJvcGVydHlO
YW1lQWdncmVnYXRvcigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
UHJvcGVydHlOYW1lQWdncmVnYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCShyZXZpc2lvbiAxNzA0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDQgKzUyLDM3IEBAIHZvaWQgUHJvcGVydHlOYW1lQXJyYXk6OmFk
ZChTdHJpbmdJbXBsKiAKICAgICBhZGRLbm93blVuaXF1ZShpZGVudGlmaWVyKTsKIH0KIAorUHJv
cGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yOjp+UHJvcGVydHlOYW1lQXJyYXlBZ2dyZWdhdG9yKCkK
K3sKK30KKworVk0mIFByb3BlcnR5TmFtZUFycmF5QWdncmVnYXRvcjo6dm0oKQoreworICAgIHJl
dHVybiAqbV9hcnJheS52bSgpOworfQorCit2b2lkIFByb3BlcnR5TmFtZUFycmF5QWdncmVnYXRv
cjo6c2V0SW5kZXhpbmdMaW1pdChWTSYgdm0sIHVuc2lnbmVkIGxpbWl0KQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaW1pdDsgKytpKQorICAgICAgICBtX2FycmF5LmFkZChJZGVu
dGlmaWVyOjpmcm9tKCZ2bSwgaSkpOworfQorCit2b2lkIFByb3BlcnR5TmFtZUFycmF5QWdncmVn
YXRvcjo6YXBwZW5kU3RydWN0dXJlSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQoreworICAgIG1fYXJyYXkuYWRkKGlkZW50aWZpZXIpOworfQorCit2b2lkIFByb3BlcnR5
TmFtZUFycmF5QWdncmVnYXRvcjo6YXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBtX2FycmF5LmFkZChpZGVudGlmaWVyKTsKK30KKwor
dm9pZCBQcm9wZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0b3I6OndpbGxTdGFydEFwcGVuZGluZ0Zvck9i
amVjdChWTSYsIEpTT2JqZWN0KiwgYm9vbCkKK3sKK30KKwordm9pZCBQcm9wZXJ0eU5hbWVBcnJh
eUFnZ3JlZ2F0b3I6OmRpZEZpbmlzaEFwcGVuZGluZ0Zvck9iamVjdChKU09iamVjdCopCit7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlOYW1lQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lQWdncmVnYXRvci5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02Nyw2
ICs2OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAg
ICAgUHJvcGVydHlOYW1lQXJyYXkoVk0mIHZtLCBQYXNzUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5
RGF0YT4gZGF0YSkKKyAgICAgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgICAgICAgICAsIG1f
dm0oJnZtKQorICAgICAgICAgICAgLCBtX251bUNhY2hlYWJsZVNsb3RzKDApCisgICAgICAgICAg
ICAsIG1fYmFzZU9iamVjdCgwKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAgICBWTSog
dm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKICAgICAgICAgdm9pZCBhZGQoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikgeyBhZGQoaWRlbnRpZmllci5pbXBsKCkpOyB9CkBAIC0xMTAsNiArMTE5
LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU09iamVjdCogbV9iYXNlT2JqZWN0Owog
ICAgIH07CiAKKyAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0b3IgOiBwdWJsaWMg
UHJvcGVydHlOYW1lQWdncmVnYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBQcm9wZXJ0eU5h
bWVBcnJheUFnZ3JlZ2F0b3IoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICAgICAgOiBtX2FycmF5
KGV4ZWMpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5
QWdncmVnYXRvcihWTSYgdm0pCisgICAgICAgICAgICA6IG1fYXJyYXkoJnZtKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIH5Qcm9wZXJ0eU5hbWVBcnJheUFnZ3JlZ2F0
b3IoKTsKKworICAgICAgICB2aXJ0dWFsIFZNJiB2bSgpIG92ZXJyaWRlOworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRJbmRleGluZ0xpbWl0KFZNJiwgdW5zaWduZWQpIG92ZXJyaWRlOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3RydWN0dXJlSWRlbnRpZmllcihjb25zdCBJZGVudGlm
aWVyJikgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRHZW5lcmljSWRlbnRp
Zmllcihjb25zdCBJZGVudGlmaWVyJikgb3ZlcnJpZGU7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IHdpbGxTdGFydEFwcGVuZGluZ0Zvck9iamVjdChWTSYsIEpTT2JqZWN0KiwgYm9vbCBpc0Jhc2VP
YmplY3QpIG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoQXBwZW5kaW5n
Rm9yT2JqZWN0KEpTT2JqZWN0Kikgb3ZlcnJpZGU7CisKKyAgICAgICAgUHJvcGVydHlOYW1lQXJy
YXkmIGFycmF5KCkgeyByZXR1cm4gbV9hcnJheTsgfQorICAgICAgICBjb25zdCBQcm9wZXJ0eU5h
bWVBcnJheSYgYXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5OyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBtX2FycmF5OworICAgIH07CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gUHJvcGVydHlOYW1lQXJyYXlfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHJl
dmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1h
dGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBKU0FycmF5OjpkZWxldGVQcm9wZXJ0eUJ5SW5k
ZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSA9
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5h
bWVBZ2dyZWdhdG9yJiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEV4Y2x1
ZGVEb250RW51bVByb3BlcnRpZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ0V4cE1hdGNo
ZXNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxSZWdFeHBNYXRjaGVzQXJyYXkqPihvYmplY3Qp
OwogICAgICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlBbGxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnko
ZXhlYyk7Ci0gICAgICAgICAgICBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIGV4ZWMsIGFyciwgbW9kZSk7CisgICAgICAgICAgICBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9u
IDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxOCArMTA3LDE4IEBAIGJvb2wgUmVnRXhwT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHko
Y2VsbCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWVBZ2dyZWdhdG9yJiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKLSAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgcHJvcGVy
dHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRpZmllcihleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFz
dEluZGV4KTsKKyAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoZXhlYywgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotdm9pZCBSZWdFeHBPYmplY3Q6OmdldFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFJlZ0V4
cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QsIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogewogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCi0g
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgp
OwotICAgIEJhc2U6OmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hcHBlbmRHZW5lcmljSWRlbnRpZmllcihl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKKyAgICBCYXNlOjpnZXRQcm9wZXJ0eU5h
bWVzKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHN0YXRpYyBib29s
IHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBP
YmplY3QuaAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxl
dGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFnZ3Jl
Z2F0b3ImLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgUHJvcGVydHlO
YW1lQWdncmVnYXRvciYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCwx
NSArMTQ0LDE1IEBAIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgKICAg
ICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqZWN0LCBleGVj
LCBpKTsKIH0KIAotdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFt
ZUFnZ3JlZ2F0b3ImIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAg
IFN0cmluZ09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxTdHJpbmdPYmplY3QqPihvYmplY3Qp
OwogICAgIGludCBzaXplID0gdGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5sZW5ndGgoKTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgIHByb3BlcnR5TmFtZXMu
YXBwZW5kR2VuZXJpY0lkZW50aWZpZXIoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CiAgICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKLSAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFwcGVuZEdlbmVyaWNJZGVudGlmaWVyKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhleGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IAogU3RyaW5nT2JqZWN0KiBjb25zdHJ1Y3RTdHJpbmcoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHN0cmluZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFnZ3JlZ2F0b3ImLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTcwNDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYgKzE3Niw3IEBA
IFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmoKICAgICAsIG1fZGlkVHJh
bnNpdGlvbihmYWxzZSkKICAgICAsIG1fc3RhdGljRnVuY3Rpb25SZWlmaWVkKGZhbHNlKQogICAg
ICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKKyAgICAsIG1faGFzRGVsZXRlZEluZGV4ZWRQcm9wZXJ0
aWVzKGZhbHNlKQogewogICAgIEFTU0VSVChpbmxpbmVDYXBhY2l0eSA8PSBKU0ZpbmFsT2JqZWN0
OjptYXhJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8UHJvcGVydHlP
ZmZzZXQ+KGlubGluZUNhcGFjaXR5KSA8IGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KTsKQEAgLTIwNCw2
ICsyMDUsNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgLCBtX2RpZFRyYW5z
aXRpb24oZmFsc2UpCiAgICAgLCBtX3N0YXRpY0Z1bmN0aW9uUmVpZmllZChmYWxzZSkKICAgICAs
IG1faGFzUmFyZURhdGEoZmFsc2UpCisgICAgLCBtX2hhc0RlbGV0ZWRJbmRleGVkUHJvcGVydGll
cyhmYWxzZSkKIHsKICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IFR5cGVJbmZvKENlbGxUeXBlLCBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU3RydWN0dXJlSXNJbW1vcnRhbCk7CiAgICAgbV9ibG9i
ID0gU3RydWN0dXJlSURCbG9iKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmFsbG9jYXRlSUQo
dGhpcyksIDAsIHR5cGVJbmZvKTsKQEAgLTIzMSw2ICsyMzMsNyBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0sIGNvbnN0IFN0cnVjCiAgICAgLCBtX2RpZFRyYW5zaXRpb24odHJ1ZSkKICAg
ICAsIG1fc3RhdGljRnVuY3Rpb25SZWlmaWVkKHByZXZpb3VzLT5tX3N0YXRpY0Z1bmN0aW9uUmVp
ZmllZCkKICAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCisgICAgLCBtX2hhc0RlbGV0ZWRJbmRl
eGVkUHJvcGVydGllcyhwcmV2aW91cy0+bV9oYXNEZWxldGVkSW5kZXhlZFByb3BlcnRpZXMpCiB7
CiAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBwcmV2aW91cy0+dHlwZUluZm8oKTsKICAgICBtX2Js
b2IgPSBTdHJ1Y3R1cmVJREJsb2Iodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuYWxsb2NhdGVJ
RCh0aGlzKSwgcHJldmlvdXMtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHlwZUlu
Zm8pOwpAQCAtOTc2LDI0ICs5NzksMjEgQEAgdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5
TWFwKGNvbnN0IAogICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIFByb3BlcnR5VGFi
bGU6OmNyZWF0ZSh2bSwgY2FwYWNpdHkpKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3Bl
cnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQordm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5
TmFtZXNGcm9tU3RydWN0dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQWdncmVnYXRvciYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwogICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJH
Qyk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJv
b2wga25vd25VbmlxdWUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7Ci0KICAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgIGZvciAoUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBBU1NFUlQobV9oYXNOb25FbnVtZXJhYmxlUHJv
cGVydGllcyB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwotICAgICAgICBpZiAo
IWl0ZXItPmtleS0+aXNFbXB0eVVuaXF1ZSgpICYmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250
RW51bSkgfHwgbW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgewotICAgICAgICAg
ICAgaWYgKGtub3duVW5pcXVlKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkS25v
d25VbmlxdWUoaXRlci0+a2V5KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChpdGVyLT5rZXkpOwotICAgICAgICB9CisgICAgICAgIGlmIChpdGVy
LT5rZXktPmlzRW1wdHlVbmlxdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtICYmIG1vZGUgPT0gRXhjbHVkZURvbnRFbnVt
UHJvcGVydGllcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFwcGVuZFN0cnVjdHVyZUlkZW50aWZpZXIoSWRlbnRpZmllcigmdm0sIGl0ZXItPmtleSkpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lLmgiCisj
aW5jbHVkZSAiUHJvcGVydHlOYW1lQWdncmVnYXRvci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFt
ZUFycmF5LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJQcm90ZWN0
LmgiCkBAIC01NCw2ICs1NSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGVmZXJHQzsK
K2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlE
YXRhOwpAQCAtMjY4LDYgKzI3MCw5IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9mZnNldCBnZXRD
b25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdl
dENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMs
IEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOwogCisgICAgYm9vbCBoYXNEZWxldGVkSW5kZXhlZFBy
b3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0RlbGV0ZWRJbmRleGVkUHJvcGVydGllczsg
fQorICAgIHZvaWQgc2V0SGFzRGVsZXRlZEluZGV4ZWRQcm9wZXJ0aWVzKCkgeyBtX2hhc0RlbGV0
ZWRJbmRleGVkUHJvcGVydGllcyA9IHRydWU7IH0KKwogICAgIGJvb2wgaGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzR2V0dGVyU2V0dGVyUHJvcGVydGllczsg
fQogICAgIGJvb2wgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQ
cm90bygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRp
ZXNFeGNsdWRpbmdQcm90bzsgfQogICAgIHZvaWQgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
cyhib29sIGlzX19wcm90b19fKQpAQCAtMjk0LDcgKzI5OSwxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoVk0mLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVt
ZXJhdGlvbkNhY2hlKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCiAg
ICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOyAvLyBEZWZpbmVk
IGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KLSAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKFZNJiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwor
ICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVB
Z2dyZWdhdG9yJiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIHZvaWQgc2V0Q2FjaGVkUHJvcGVy
dHlFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisgICAgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IoKSBjb25zdDsKIAog
ICAgIEpTU3RyaW5nKiBvYmplY3RUb1N0cmluZ1ZhbHVlKCkKICAgICB7CkBAIC01NDUsNiArNTUz
LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2RpZFRyYW5zaXRpb24gOiAxOwogICAgIHVu
c2lnbmVkIG1fc3RhdGljRnVuY3Rpb25SZWlmaWVkIDogMTsKICAgICBib29sIG1faGFzUmFyZURh
dGEgOiAxOworICAgIGJvb2wgbV9oYXNEZWxldGVkSW5kZXhlZFByb3BlcnRpZXMgOiAxOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAxNzA0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0Nyw2ICsxNDcsMjEgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIFN0cnVj
dHVyZQogICAgIHJldHVybiByYXJlRGF0YSgpLT5lbnVtZXJhdGlvbkNhY2hlKCk7CiB9CiAKK2lu
bGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkUHJvcGVydHlFbnVtZXJhdG9yKFZNJiB2bSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIEFTU0VSVCghaXNE
aWN0aW9uYXJ5KCkpOworICAgIGlmICghbV9oYXNSYXJlRGF0YSkKKyAgICAgICAgYWxsb2NhdGVS
YXJlRGF0YSh2bSk7CisgICAgcmFyZURhdGEoKS0+c2V0Q2FjaGVkUHJvcGVydHlFbnVtZXJhdG9y
KHZtLCB0aGlzLCBlbnVtZXJhdG9yKTsKK30KKworaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogU3RydWN0dXJlOjpjYWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IoKSBjb25zdAoreworICAg
IGlmICghbV9oYXNSYXJlRGF0YSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IHJhcmVEYXRhKCktPmNhY2hlZFByb3BlcnR5RW51bWVyYXRvcigpOworfQorCiBpbmxpbmUgSlNW
YWx1ZSBTdHJ1Y3R1cmU6OnByb3RvdHlwZUZvckxvb2t1cChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KSBjb25zdAogewogICAgIGlmIChpc09iamVjdCgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAx
NzA0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOwogY2xhc3MgU3RydWN0dXJlOwogCkBAIC01OCw2ICs1OSw5IEBAIHB1YmxpYzoKICAg
ICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7CiAgICAgdm9pZCBz
ZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgY29uc3QgU3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciogdmFsdWUpOwogCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBj
YWNoZWRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKKyAgICB2b2lkIHNldENhY2hlZFByb3BlcnR5RW51
bWVyYXRvcihWTSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogdmFsdWUpOworCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAg
LTY5LDYgKzczLDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3By
ZXZpb3VzOwogICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVl
OwogICAgIFdyaXRlQmFycmllcjxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9u
Q2FjaGU7CisgICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNo
ZWRQcm9wZXJ0eUVudW1lcmF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MDQwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYg
KzI1Niw4IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBz
dHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwogICAgIG5vdEFuT2JqZWN0U3RydWN0dXJlLnNldCgqdGhpcywgSlNO
b3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHBy
b3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5
TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBlbnVtZXJhdG9y
RW50cnlTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBFbnVtZXJhdG9yRW50cnk6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBhcGlXcmFwcGVyU3RydWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdyYXBwZXI6OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBKU1Njb3BlU3RydWN0dXJl
LnNldCgqdGhpcywgSlNTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzA0MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjEsNiArMjYxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHN0cmluZ1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RT
dHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9y
U3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBlbnVtZXJhdG9yRW50cnlT
dHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGdldHRlclNldHRlclN0cnVjdHVy
ZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gYXBpV3JhcHBlclN0cnVjdHVyZTsKICAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gSlNTY29wZVN0cnVjdHVyZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234305</attachid>
            <date>2014-07-02 18:40:27 -0700</date>
            <delta_ts>2014-07-07 18:30:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140702184008.patch</filename>
            <type>text/plain</type>
            <size>95919</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNC0wNy0wMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorCisgICAgICAgIEl0IGRvZXMgdGhpcyBieSBlbWl0dGluZyB0
aGVzZSBleHBsaWNpdCBsb29wcyBpbiBieXRlY29kZSwgdXNpbmcgYSBuZXcgc2V0IG9mIGJ5dGVj
b2RlcyB0byAKKyAgICAgICAgc3VwcG9ydCB0aGUgdmFyaW91cyBvcGVyYXRpb25zIHJlcXVpcmVk
IGZvciBlYWNoIGxvb3AuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uOgorICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6CisgICAgICAgIChKU0M6OmNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3Blcyk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJdGVyYWJsZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OnB1c2hPcHRpbWlzZWRGb3JJbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwb3BPcHRpbWlzZWRGb3JJbik6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdExvb3BI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0
L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVIYXNJdGVyYWJsZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50MzJMb2FkKToKKyAgICAgICAgKiBqaXQvSklUSW5s
aW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSXRlcmFibGVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfaXRlcmFibGVfcHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2hhc19pdGVyYWJsZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKToKKyAgICAgICAgKiBqaXQvSklU
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3Vi
bGVMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0xvYWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0RG91YmxlR2V0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250
aWd1b3VzR2V0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0
b3JhZ2VHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc206CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgICogcnVudGltZS9D
bGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAg
ICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRTdHJ1
Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omhhc093blByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmpl
Y3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGVzdHJveSk6
CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpwcm9wZXJ0eU5hbWVBdElu
ZGV4KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1By
b3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU1Byb3h5
Lmg6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHA6CisgICAgICAgIChK
U0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheTo6c2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50
aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5
OjpQcm9wZXJ0eU5hbWVBcnJheSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5Ojph
ZGQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6Y2FuQWRkS25vd25VbmlxdWVG
b3JTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlv
dXNseUVudW1lcmF0ZWRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6
CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zy
b21TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENhY2hlZFByb3BlcnR5
TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhY2hlZFByb3BlcnR5
TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVy
dHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlUmFyZURhdGE6OmNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik6Cisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoK
KwogMjAxNC0wNy0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFtmdGxvcHRdIEFsbG9jYXRlIGEgbmV3IEdldHRlclNldHRlciBpZiB3ZSBjaGFuZ2UgdGhlIHZh
bHVlIG9mIGFueSBvZiBpdHMgZW50cmllcyBvdGhlciB0aGFuIHdoZW4gdGhleSB3ZXJlIHByZXZp
b3VzbHkgbnVsbCwgc28gdGhhdCBpZiB3ZSBjb25zdGFudC1pbmZlciBhbiBhY2Nlc3NvciBzbG90
IHRoZW4gd2UgaW1tZWRpYXRlbHkgZ2V0IHRoZSBmdW5jdGlvbiBjb25zdGFudCBmb3IgZnJlZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MDczOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDggQEAKIAkJMUNBQTlBMjMxOEY0QTIy
MDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBQTlBMjExOEY0QTIyMDAwMEEzNjlE
IC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICovOyB9OwogCQkyNjAwQjVBNjE1MkJB
QUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3Ry
aW5nSm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3Ry
aW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsKKwkJ
MkEwNUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTA1QUJEMzE5
NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCAqLzsgfTsKKwkJ
MkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFCRDQxOTYx
REYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovOyB9OwogCQkyQTI4
MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEyODI1Q0YxODM0MUYyRDAwODdG
QkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsKIAkJMkE0OEQxOTExNzcyMzY1QjAw
QzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxs
YmFja0Z1bmN0aW9uLmggKi87IH07CiAJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBKU01h
bmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRl
cm5hbC5oICovOyB9OwpAQCAtMjk0OSw2ICsyOTUxLDggQEAKIAkJMUNBQTlBMjExOEY0QTIyMDAw
MEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5n
Sm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFB
NzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJB
MDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkEwNUFCRDQxOTYxREYyNDAw
MzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNl
U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsYXllZFJlbGVhc2VT
Y29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTM0M0Y3NDE4QTE3NDhCMDAz
OUIwODUgLyogR0NTZWdtZW50ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHQ1NlZ21lbnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
MzQzRjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk2Myw2ICs0OTY3LDggQEAKIAkJCQkxNDIw
QkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENCNzc5MTJF
M0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlDMkI2RDc1MjE4QTMzNzkz
MDA0QTkzMDEgLyogV3JpdGVCYXJyaWVySW5saW5lcy5oICovLAorCQkJCTJBMDVBQkQzMTk2MURG
MjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwICovLAorCQkJCTJBMDVB
QkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02
NTc2LDYgKzY1ODIsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAw
MEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNzI5QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJFMTY2QUQzNjAwMDBGNUJBMyAvKiBQ
cm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTkwQ0FEMTg5
RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFk
ZXJzICovLApAQCAtNzcyMiw2ICs3NzI5LDcgQEAKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhE
NDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4
MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMjBDQjkx
ODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgko
cmV2aXNpb24gMTcwNzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDE0IEBACiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2FsbCIsICJsZW5ndGgiIDogMiB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9kaWRfY2FsbCIsICJsZW5ndGgiIDog
MiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5kIiwgImxlbmd0aCIgOiAyIH0sCi0g
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0
eSIsICJsZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwgImxlbmd0aCIgOiAzIH0sCisgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSIsICJsZW5ndGgi
IDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5
IiwgImxlbmd0aCIgOiA1IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc3RydWN0
dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6
IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25leHRfZW51bWVyYXRvcl9wbmFtZSIs
ICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9faW5kZXhfc3Ry
aW5nIiwgImxlbmd0aCIgOiAzIH0KICAgICAgICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlz
aW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDkgQEAgdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQorICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgor
ICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdG9faW5kZXhf
c3RyaW5nOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGNhc2Ugb3Bf
aW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CkBAIC0xNDks
NiArMTUyLDkgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBm
dW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfaGFzX2VudW1l
cmFibGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfaXRlcmFibGVfcHJvcGVydHk6CisgICAg
Y2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgog
ICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbDoKICAgICBjYXNlIG9wX2luOgpAQCAtMTc4
LDYgKzE4NCw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9wX2dldF9nZW5l
cmljX3Byb3BlcnR5X2VudW1lcmF0b3I6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoK
ICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwpAQCAtMjk3
LDYgKzMwNCwxMyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAj
dW5kZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKICAgICAgICAgcmV0dXJuOwogICAgIC8vIFRoZXNl
IGFsbCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCisg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9w
ZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAg
IGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfaXRlcmFi
bGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0
b3I6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CiAgICAgY2FzZSBvcF9uZXh0
X3BuYW1lOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKICAgICBjYXNlIG9wX3N0cmNhdDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNzA3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsxMzk5LDYxIEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX25l
eHRfcG5hbWUpIC0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRb
MV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19pdGVy
YWJsZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIEFycmF5UHJvZmls
ZSogYXJyYXlQcm9maWxlID0gaXRbNF0udS5hcnJheVByb2ZpbGU7CisgICAgICAgICAgICBwcmlu
dExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfaXRlcmFibGVf
cHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVwIiwgcmVn
aXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5
OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1l
ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHkiKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRh
dGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAgICAgaW50IGRzdCA9
IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5k
OworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0
LCAib3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShiYXNlKS5kYXRhKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBp
bnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gaXRbM10udS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHN0cnVjdHVyZUVudW1lcmF0b3IgPSBpdFs0XS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yIik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGxlbmd0aCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
c3RydWN0dXJlRW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOiB7CisgICAgICAgICAg
ICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3Ig
PSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVt
ZXJhdG9yKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7Cisg
ICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlu
ZGV4ID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfdG9faW5kZXhfc3RyaW5nIik7CisgICAgICAgICAg
ICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3Bl
cmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1c2hfd2l0aF9zY29wZSIsIHIwKTsKQEAg
LTE3OTgsNiArMTg1MywxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUub3BlcmFuZCA9IHBjW2pdLnUu
b3BlcmFuZDsKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKHBjWzBdLnUub3Bjb2RlKSB7Cisg
ICAgICAgIGNhc2Ugb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQg
YXJyYXlQcm9maWxlSW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7
CisKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5
UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgICAgIGNhc2Ugb3BfY29uc3Ry
dWN0X3ZhcmFyZ3M6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAxNzA3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxNiwxOSAr
MTQxNiw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXIKIAogUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5KQogewotICAgIGZvciAoc2l6
ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNrLnNpemUoKTsgaSA+IDA7IGktLSkgewotICAgICAg
ICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2kgLSAxXTsKLSAg
ICAgICAgaWYgKGNvbnRleHQucHJvcGVydHlSZWdpc3RlciA9PSBwcm9wZXJ0eSkgewotICAgICAg
ICAgICAgZW1pdE9wY29kZShvcF9nZXRfYnlfcG5hbWUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYmFzZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvcGVydHktPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNv
bnRleHQuZXhwZWN0ZWRTdWJzY3JpcHRSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5pdGVyUmVnaXN0ZXItPmluZGV4KCkpOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuaW5kZXhSZWdpc3Rlci0+aW5k
ZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZHN0OwotICAgICAgICB9Ci0gICAgfQogICAgIFVu
bGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwogICAg
IFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0
X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CkBAIC0yMDIy
LDcgKzIwMDksNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRlCiAg
ICAgICAgIGZpbmFsbHlCbG9jaywKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2Nv
cGVDb250ZXh0U3RhY2suc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
c3dpdGNoQ29udGV4dFN0YWNrLnNpemUoKSksCi0gICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX2ZvckluQ29udGV4dFN0YWNrLnNpemUoKSksCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX3RyeUNvbnRleHRTdGFjay5zaXplKCkpLAogICAgICAgICBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV9sYWJlbFNjb3Blcy5zaXplKCkpLAogICAgICAgICBtX2ZpbmFsbHlEZXB0aCwKQEAg
LTIxNDUsNyArMjEzMSw2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9w
U2MKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxDb250cm9sRmxvd0NvbnRleHQ+IHNhdmVkU2Nv
cGVDb250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxTd2l0Y2hJbmZvPiBzYXZlZFN3aXRjaENv
bnRleHRTdGFjazsKLSAgICAgICAgVmVjdG9yPEZvckluQ29udGV4dD4gc2F2ZWRGb3JJbkNvbnRl
eHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IHBvcHBlZFRyeUNvbnRleHRzOwog
ICAgICAgICBMYWJlbFNjb3BlU3RvcmUgc2F2ZWRMYWJlbFNjb3BlczsKICAgICAgICAgd2hpbGUg
KHRvcFNjb3BlID4gYm90dG9tU2NvcGUgJiYgdG9wU2NvcGUtPmlzRmluYWxseUJsb2NrKSB7CkBA
IC0yMTU2LDcgKzIxNDEsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBv
cFNjCiAgICAgICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dCA9IHRvcFNjb3Bl
LT5maW5hbGx5Q29udGV4dDsKICAgICAgICAgICAgIGJvb2wgZmxpcFNjb3BlcyA9IGZpbmFsbHlD
b250ZXh0LnNjb3BlQ29udGV4dFN0YWNrU2l6ZSAhPSBtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUo
KTsKICAgICAgICAgICAgIGJvb2wgZmxpcFN3aXRjaGVzID0gZmluYWxseUNvbnRleHQuc3dpdGNo
Q29udGV4dFN0YWNrU2l6ZSAhPSBtX3N3aXRjaENvbnRleHRTdGFjay5zaXplKCk7Ci0gICAgICAg
ICAgICBib29sIGZsaXBGb3JJbnMgPSBmaW5hbGx5Q29udGV4dC5mb3JJbkNvbnRleHRTdGFja1Np
emUgIT0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCk7CiAgICAgICAgICAgICBib29sIGZsaXBU
cmllcyA9IGZpbmFsbHlDb250ZXh0LnRyeUNvbnRleHRTdGFja1NpemUgIT0gbV90cnlDb250ZXh0
U3RhY2suc2l6ZSgpOwogICAgICAgICAgICAgYm9vbCBmbGlwTGFiZWxTY29wZXMgPSBmaW5hbGx5
Q29udGV4dC5sYWJlbFNjb3Blc1NpemUgIT0gbV9sYWJlbFNjb3Blcy5zaXplKCk7CiAgICAgICAg
ICAgICBpbnQgdG9wU2NvcGVJbmRleCA9IC0xOwpAQCAtMjE3MSwxMCArMjE1NSw2IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAgICAgICAgICBzYXZl
ZFN3aXRjaENvbnRleHRTdGFjayA9IG1fc3dpdGNoQ29udGV4dFN0YWNrOwogICAgICAgICAgICAg
ICAgIG1fc3dpdGNoQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4dC5zd2l0Y2hDb250
ZXh0U3RhY2tTaXplKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGlwRm9ySW5z
KSB7Ci0gICAgICAgICAgICAgICAgc2F2ZWRGb3JJbkNvbnRleHRTdGFjayA9IG1fZm9ySW5Db250
ZXh0U3RhY2s7Ci0gICAgICAgICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5zaHJpbmsoZmlu
YWxseUNvbnRleHQuZm9ySW5Db250ZXh0U3RhY2tTaXplKTsKLSAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChmbGlwVHJpZXMpIHsKICAgICAgICAgICAgICAgICB3aGlsZSAobV90cnlDb250
ZXh0U3RhY2suc2l6ZSgpICE9IGZpbmFsbHlDb250ZXh0LnRyeUNvbnRleHRTdGFja1NpemUpIHsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdHJ5Q29udGV4dFN0YWNrLnNpemUoKSA+IGZp
bmFsbHlDb250ZXh0LnRyeUNvbnRleHRTdGFja1NpemUpOwpAQCAtMjIxMSw4ICsyMTkxLDYgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGZsaXBTd2l0Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENv
bnRleHRTdGFjayA9IHNhdmVkU3dpdGNoQ29udGV4dFN0YWNrOwotICAgICAgICAgICAgaWYgKGZs
aXBGb3JJbnMpCi0gICAgICAgICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjayA9IHNhdmVkRm9y
SW5Db250ZXh0U3RhY2s7CiAgICAgICAgICAgICBpZiAoZmxpcFRyaWVzKSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fdHJ5Q29udGV4dFN0YWNrLnNpemUoKSA9PSBmaW5hbGx5Q29udGV4dC50
cnlDb250ZXh0U3RhY2tTaXplKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBw
b3BwZWRUcnlDb250ZXh0cy5zaXplKCk7IGktLTspIHsKQEAgLTI1NDUsNCArMjUyMyw2NyBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oCiAgICAgZW1pdExhYmVsKHNj
b3BlLT5icmVha1RhcmdldCgpKTsKIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGJhc2UtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQoreworICAgIGVt
aXRPcGNvZGUob3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5p
bmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHlOYW1lLT5pbmRleCgp
KTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEhhc0l0ZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUg
YXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CisgICAgZW1pdE9wY29kZShvcF9oYXNf
aXRlcmFibGVfcHJvcGVydHkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYXJyYXlQcm9maWxlKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRv
cihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpCit7CisgICAgZW1pdE9wY29kZShv
cF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5p
bmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVy
ZUVudW1lcmF0b3IpCit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9l
bnVtZXJhdG9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGxlbmd0aC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0
cnVjdHVyZUVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRl
eCkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX25leHRfZW51bWVyYXRvcl9wbmFtZSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRl
eC0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
aW5kZXgpCit7CisgICAgZW1pdE9wY29kZShvcF90b19pbmRleF9zdHJpbmcpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChpbmRleC0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNzA3MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDcgKzg1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0YXRlbWVudE5vZGUq
IGZpbmFsbHlCbG9jazsKICAgICAgICAgdW5zaWduZWQgc2NvcGVDb250ZXh0U3RhY2tTaXplOwog
ICAgICAgICB1bnNpZ25lZCBzd2l0Y2hDb250ZXh0U3RhY2tTaXplOwotICAgICAgICB1bnNpZ25l
ZCBmb3JJbkNvbnRleHRTdGFja1NpemU7CiAgICAgICAgIHVuc2lnbmVkIHRyeUNvbnRleHRTdGFj
a1NpemU7CiAgICAgICAgIHVuc2lnbmVkIGxhYmVsU2NvcGVzU2l6ZTsKICAgICAgICAgaW50IGZp
bmFsbHlEZXB0aDsKQEAgLTk3LDEzICs5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBG
aW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dDsKICAgICB9OwogCi0gICAgc3RydWN0IEZvcklu
Q29udGV4dCB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdFJl
Z2lzdGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlclJlZ2lzdGVyOwotICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5kZXhSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3BlcnR5UmVnaXN0ZXI7Ci0gICAgfTsKLQogICAgIHN0cnVjdCBUcnlEYXRhIHsK
ICAgICAgICAgUmVmUHRyPExhYmVsPiB0YXJnZXQ7CiAgICAgICAgIHVuc2lnbmVkIHRhcmdldFNj
b3BlRGVwdGg7CkBAIC00MTMsNiArNDA1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlOYW1lcyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIExhYmVsKiBicmVha1Rh
cmdldCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXh0UHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVnaXN0ZXJJRCogc2l6
ZSwgUmVnaXN0ZXJJRCogaXRlciwgTGFiZWwqIHRhcmdldCk7CiAKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRIYXNJdGVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwg
UmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEVu
dW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0
R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJRCogc3RydWN0dXJlRW51bWVyYXRvcik7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBpbmRleCk7CisKICAgICAgICAgdm9pZCBlbWl0UmVhZE9ubHlFeGNlcHRpb25J
Zk5lZWRlZCgpOwogCiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3Qg
aGF2ZSBiZWVuIGVtaXR0ZWQuCkBAIC00NDIsMTYgKzQ0Miw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udGV4dChTdGF0ZW1lbnROb2RlKiBmaW5hbGx5Qmxv
Y2spOwogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250ZXh0KCk7CiAKLSAgICAgICAgdm9pZCBw
dXNoT3B0aW1pc2VkRm9ySW4oUmVnaXN0ZXJJRCogZXhwZWN0ZWRTdWJzY3JpcHQsIFJlZ2lzdGVy
SUQqIGl0ZXIsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICBGb3JJbkNvbnRleHQgY29udGV4dCA9IHsgZXhwZWN0
ZWRTdWJzY3JpcHQsIGl0ZXIsIGluZGV4LCBwcm9wZXJ0eVJlZ2lzdGVyIH07Ci0gICAgICAgICAg
ICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgcG9wT3B0aW1pc2VkRm9ySW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2Zv
ckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIHB1
c2hJbmRleGVkRm9ySW5TY29wZShjb25zdCBJZGVudGlmaWVyKiBib3VuZExvY2FsLCBSZWdpc3Rl
cklEKiBpbmRleCk7CisgICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoY29uc3QgSWRl
bnRpZmllciogYm91bmRMb2NhbCk7CiAKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1Rhcmdl
dChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVUYXJn
ZXQoY29uc3QgSWRlbnRpZmllciYpOwpAQCAtNjUwLDcgKzY0Miw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIFZlY3RvcjxDb250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiBtX3Njb3BlQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4g
bV9zd2l0Y2hDb250ZXh0U3RhY2s7Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9y
SW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0PiBtX3RyeUNvbnRleHRT
dGFjazsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIGNvbnN0
IERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqPj4gbV9kZWNvbnN0cnVjdGVkUGFyYW1ldGVyczsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNzA3MzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MTEsMTAyICsxODExLDE5MCBAQCB2b2lkIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JJbk5vZGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgRm9ySW5Ob2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQor
dm9pZCBGb3JJbk5vZGU6OmVtaXRMb29wSGVhZGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKIHsKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3Bl
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0KLSAgICBpZiAo
IW1fbGV4cHItPmlzQXNzaWdubWVudExvY2F0aW9uKCkpIHsKLSAgICAgICAgZW1pdFRocm93UmVm
ZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiTGVmdCBzaWRlIG9mIGZvci1pbiBzdGF0ZW1lbnQgaXMg
bm90IGEgcmVmZXJlbmNlLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZ2VuZXJh
dG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFy
dE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7Ci0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
YmFzZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
YmFzZS5nZXQoKSwgbV9leHByKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2l6ZSA9IGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwZWN0ZWRTdWJzY3Jp
cHQ7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXIgPSBnZW5lcmF0b3IuZW1pdEdldFByb3Bl
cnR5TmFtZXMoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBpLmdldCgpLCBz
aXplLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLQotICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3Rh
cnQuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgIFJlZ2lzdGVy
SUQqIHByb3BlcnR5TmFtZTsKLSAgICBib29sIG9wdGltaXplZEZvcmluQWNjZXNzID0gZmFsc2U7
CiAgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50
aWZpZXIoKTsKICAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwot
ICAgICAgICBpZiAoIWxvY2FsLmdldCgpKSB7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cHJvdGVjdCA9IHByb3BlcnR5TmFtZTsKKyAgICAgICAgaWYgKGxvY2FsLmdldCgpKQorICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkpCiAg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAgICAgUmVnaXN0ZXJJRCogc2NvcGUgPSBn
ZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGlkZW50
KTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9T
Y29wZShzY29wZSwgaWRlbnQsIHByb3BlcnR5TmFtZSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgp
ID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBleHBlY3RlZFN1YnNjcmlwdC5nZXQo
KTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlO
YW1lKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wdXNoT3B0aW1pc2VkRm9ySW4oZXhwZWN0ZWRT
dWJzY3JpcHQuZ2V0KCksIGl0ZXIuZ2V0KCksIGkuZ2V0KCksIGxvY2FsLmdldCgpKTsKLSAgICAg
ICAgICAgIG9wdGltaXplZEZvcmluQWNjZXNzID0gdHJ1ZTsKICAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAobV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSkgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmIChtX2xleHByLT5pc0RvdEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIERv
dEFjY2Vzc29yTm9kZSogYXNzaWduTm9kZSA9IHN0YXRpY19jYXN0PERvdEFjY2Vzc29yTm9kZSo+
KG1fbGV4cHIpOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGFzc2lnbk5vZGUt
PmlkZW50aWZpZXIoKTsKLSAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHByb3BlcnR5TmFt
ZTsKICAgICAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShhc3NpZ25O
b2RlLT5iYXNlKCkpOwotCiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oYXNz
aWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgpLCBhc3NpZ25Ob2RlLT5k
aXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UsIGlkZW50LCBw
cm9wZXJ0eU5hbWUpOwotICAgIH0gZWxzZSBpZiAobV9sZXhwci0+aXNCcmFja2V0QWNjZXNzb3JO
b2RlKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9sZXhwci0+aXNCcmFj
a2V0QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgQnJhY2tldEFjY2Vzc29yTm9kZSogYXNzaWdu
Tm9kZSA9IHN0YXRpY19jYXN0PEJyYWNrZXRBY2Nlc3Nvck5vZGUqPihtX2xleHByKTsKLSAgICAg
ICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHByb3BlcnR5TmFtZTsKICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogc3Vic2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2ln
bk5vZGUtPnN1YnNjcmlwdCgpKTsKLSAgICAgICAgCiAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+ZGl2b3RTdGFydCgp
LCBhc3NpZ25Ob2RlLT5kaXZvdEVuZCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZh
bChiYXNlLmdldCgpLCBzdWJzY3JpcHQsIHByb3BlcnR5TmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25Ob2RlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25Ob2RlKCkp
IHsKICAgICAgICAgRGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSogYXNzaWduTm9kZSA9IHN0
YXRpY19jYXN0PERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqPihtX2xleHByKTsKICAgICAg
ICAgYXV0byBiaW5kaW5nID0gYXNzaWduTm9kZS0+YmluZGluZ3MoKTsKLSAgICAgICAgaWYgKGJp
bmRpbmctPmlzQmluZGluZ05vZGUoKSkgewotICAgICAgICAgICAgYXV0byBzaW1wbGVCaW5kaW5n
ID0gc3RhdGljX2Nhc3Q8QmluZGluZ05vZGUqPihiaW5kaW5nKTsKLSAgICAgICAgICAgIElkZW50
aWZpZXIgaWRlbnQgPSBzaW1wbGVCaW5kaW5nLT5ib3VuZFByb3BlcnR5KCk7Ci0gICAgICAgICAg
ICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSBsb2NhbC5nZXQoKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgSSBl
bWl0IGV4cHJlc3Npb24gaW5mbyBoZXJlPwotICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUg
fHwgbG9jYWwuaXNDYXB0dXJlZCgpIHx8IGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKQotICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJpY0JpbmRpbmc7Ci0gICAg
ICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHVz
aE9wdGltaXNlZEZvckluKGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdl
dCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgb3B0aW1pemVkRm9yaW5BY2Nlc3MgPSB0
cnVlOwotICAgICAgICAgICAgZ290byBjb21wbGV0ZWRTaW1wbGVCaW5kaW5nOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICBnZW5lcmljQmluZGluZzoKLSAgICAgICAgICAgIHByb3BlcnR5TmFt
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBwcm90ZWN0KHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmICghYmluZGluZy0+aXNCaW5k
aW5nTm9kZSgpKSB7CiAgICAgICAgICAgICBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpLT5iaW5kVmFs
dWUoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGNvbXBsZXRlZFNpbXBsZUJpbmRpbmc6Ci0gICAgICAgIDsKKworICAgICAg
ICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJpbmRpbmcp
OworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmctPmJvdW5k
UHJvcGVydHkoKTsKKyAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQp
OworICAgICAgICBpZiAoIWxvY2FsLmdldCgpIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSkgeworICAg
ICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3MoKS0+YmluZFZhbHVlKGdlbmVyYXRvciwgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBnZW5l
cmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KIAotICAgIGlmIChvcHRpbWl6ZWRG
b3JpbkFjY2VzcykKLSAgICAgICAgZ2VuZXJhdG9yLnBvcE9wdGltaXNlZEZvckluKCk7Cit2b2lk
IEZvckluTm9kZTo6ZW1pdE11bHRpTG9vcEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBpZiAoIW1fbGV4cHItPmlzQXNzaWdubWVu
dExvY2F0aW9uKCkpIHsKKyAgICAgICAgZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9y
LCAiTGVmdCBzaWRlIG9mIGZvci1pbiBzdGF0ZW1lbnQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPExhYmVsPiBlbmQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKIAotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVl
VGFyZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TmV4dFByb3BlcnR5TmFtZShwcm9wZXJ0eU5h
bWUsIGJhc2UuZ2V0KCksIGkuZ2V0KCksIHNpemUuZ2V0KCksIGl0ZXIuZ2V0KCksIGxvb3BTdGFy
dC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7Ci0gICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CisKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbGVuZ3RoOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzdHJ1Y3R1cmVFbnVt
ZXJhdG9yOworICAgIGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlLmdldCgpLCBtX2V4cHIpOworCisg
ICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0
ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAg
ICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAg
ICAgICBSZWZQdHI8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAg
ICAgICBsZW5ndGggPSBnZW5lcmF0b3IuZW1pdEdldEVudW1lcmFibGVMZW5ndGgoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJl
cigwKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3Rh
cnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcChvcF9s
ZXNzLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGkuZ2V0KCksIGxlbmd0aC5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCBsb29wRW5kLmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNJdGVyYWJsZVByb3BlcnR5KHJlc3VsdC5n
ZXQoKSwgYmFzZS5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
RmFsc2UocmVzdWx0LmdldCgpLCBzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
CisgICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SW5jKGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNj
b3BlLT5icmVha1RhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CisgICAgfQor
CisgICAgLy8gU3RydWN0dXJlIHByb3BlcnR5IGxvb3AuCisgICAgeworICAgICAgICBMYWJlbFNj
b3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7
CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwor
CisgICAgICAgIHN0cnVjdHVyZUVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFN0cnVjdHVy
ZVByb3BlcnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkp
OworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgc3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwg
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihn
ZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgLy8gVE9ETzogT3B0aW1p
emUgZm9yLWluCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsK
KworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1
cmVFbnVtZXJhdG9yLmdldCgpLCBpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRVbmFy
eU9wKG9wX2VxX251bGwsIHJlc3VsdC5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7
CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICAKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExh
YmVsKGxvb3BFbmQuZ2V0KCkpOworICAgIH0KKworICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9v
cC4KKyAgICB7CisgICAgICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFi
ZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3Rh
cnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wRW5k
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGdl
bmVyaWNFbnVtZXJhdG9yID0gZ2VuZXJhdG9yLmVtaXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgbGVuZ3RoLmdldCgpLCBz
dHJ1Y3R1cmVFbnVtZXJhdG9yLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkg
PSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigw
KSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclBy
b3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyaWNFbnVtZXJhdG9yLmdldCgpLCBp
LmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5l
bWl0VW5hcnlPcChvcF9lcV9udWxsLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5
TmFtZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0
KCksIGxvb3BFbmQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOworCisgICAgICAg
IHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKKwor
ICAgICAgICAvLyBUT0RPOiBPcHRpbWl6ZSBmb3ItaW4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRO
b2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhpLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShwcm9w
ZXJ0eU5hbWUuZ2V0KCksIGdlbmVyaWNFbnVtZXJhdG9yLmdldCgpLCBpLmdldCgpKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHJlc3VsdC5nZXQoKSwgcHJvcGVy
dHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5n
ZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNFbnVtZXJh
YmxlUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wU3Rh
cnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFy
Z2V0KCkpOworICAgICAgICAKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJl
YWtUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOworICAgIH0KKworICAgIGdl
bmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwg
c3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0TGFi
ZWwoZW5kLmdldCgpKTsKK30KKwordm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgdGhpcy0+ZW1p
dE11bHRpTG9vcEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0KTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEZvck9mTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3MDcz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAzLDYgKzMwMywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlX3Njb3BlKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2Zyb21fc2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfdG9fc2NvcGUpCisKKyAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCkKKyAgICAgICAgREVGSU5F
X09QKG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfaGFz
X2l0ZXJhYmxlX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3N0cnVjdHVyZV9w
cm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2dlbmVyaWNfcHJv
cGVydHlfZW51bWVyYXRvcikKKyAgICAgICAgREVGSU5FX09QKG9wX25leHRfZW51bWVyYXRvcl9w
bmFtZSkKKyAgICAgICAgREVGSU5FX09QKG9wX3RvX2luZGV4X3N0cmluZykKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IH0KQEAgLTQyMCw2ICs0MjgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfdG9fbnVtYmVyKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfdG9f
cHJpbWl0aXZlKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2l0ZXJhYmxlX3By
b3BlcnR5KQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9yZXNvbHZlX3Njb3BlKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlSGFzSXRlcmFibGVQcm9wZXJ0eShWTSogdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQg
aml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBi
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVI
YXNJdGVyYWJsZVByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsK
KyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBDb2RlUmVmIGNvbXBpbGVDVElOYXRpdmVDYWxs
KFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KCF2bS0+Y2FuVXNlSklUKCkpIHsKQEAgLTI1Niw2ICsyNjMsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRC
eVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogCisgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVIYXNJdGVyYWJsZVByb3BlcnR5KEJ5VmFsSW5mbyosIFJl
dHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNv
bXBpbGVDVElOYXRpdmVDYWxsKFZNKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKICAgICAg
ICAgQ29kZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qLCBOYXRpdmVGdW5jdGlv
bik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CkBAIC0zMzYsNiArMzQ1LDExIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRl
bmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuCiAgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJl
YWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKICAgICAg
ICAgLy8gY2FzZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHBy
b2ZpbGVkLgorICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJMb2FkKEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkgeyByZXR1cm4gZW1pdENvbnRpZ3VvdXNM
b2FkKGluc3RydWN0aW9uLCBiYWRUeXBlLCBJbnQzMlNoYXBlKTsgfQorICAgICAgICBKdW1wTGlz
dCBlbWl0RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwor
ICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNT
aGFwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisKICAgICAgICAgSnVtcExpc3QgZW1pdEludDMy
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KSB7IHJldHVybiBlbWl0Q29udGlndW91c0dldEJ5VmFsKGluc3RydWN0aW9uLCBiYWRUeXBlLCBJ
bnQzMlNoYXBlKTsgfQogICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENv
bnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIElu
ZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlKTsKQEAgLTU0OSw2ICs1
NjMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVk
X2xvYWQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91cnNoaWZ0KEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfaXRlcmFibGVfcHJvcGVydHkoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVy
YXRvcihJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2dlbmVyaWNfcHJv
cGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbmV4
dF9lbnVtZXJhdG9yX3BuYW1lKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90
b19pbmRleF9zdHJpbmcoSW5zdHJ1Y3Rpb24qKTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2FkZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02MDIsNiArNjIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3Vuc2lnbmVkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Vyc2hpZnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFz
X2l0ZXJhYmxlX3Byb3BlcnR5KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE3
MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiwyNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzID0gZW1pdERvdWJsZUxvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgIG1v
dmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlZ1QwKTsKKyAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlZ1QwKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitpbmxpbmUgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBl
Y3RlZFNoYXBlKQoreworICAgIHJldHVybiBlbWl0Q29udGlndW91c0xvYWQoaW5zdHJ1Y3Rpb24s
IGJhZFR5cGUsIGV4cGVjdGVkU2hhcGUpOworfQorCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICByZXR1cm4gZW1pdEFycmF5U3Rv
cmFnZUxvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wg
SklUOjppc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZURvdWJsZShpbnQgc3JjKQogewogICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25z
dGFudE9wZXJhbmQoc3JjKS5pc0RvdWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNzA3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgorI2luY2x1
ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRl
ICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIApAQCAtMTIxMCw2ICsxMjExLDE4OCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FwdHVyZWRfbW92KEluc3RyCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
IH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hh
c19lbnVtZXJhYmxlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSXRlcmFibGVQcm9wZXJ0
eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2Fz
ZSBKSVRJbnQzMjoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyTG9hZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERvdWJsZToK
KyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0xvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRPRE86IEFk
ZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMu
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHJlZ1QwKTsKKworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFs
dWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7Cisg
ICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIo
CisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBo
YXNfaXRlcmFibGVfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJl
bChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9w
ZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHlHZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2hhc19pdGVyYWJsZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1Qx
KTsKKworICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1l
eHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgor
ICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0
aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCisgICAgLy8gbnVt
YmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBp
bnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCisgICAgLy8gc2l6ZSBpcyBhbHdheXMg
bGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29y
cmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKKyAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vz
c2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8g
ZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KKyAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMg
aXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KKyAgICB6ZXJv
RXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spLCByZWdUMik7CisKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworCisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1v
ZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRJbnQzMjoKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERvdWJsZToKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdERvdWJsZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0Q29udGlndW91c0xvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Cisg
ICAgCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZz
ZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pdGVyYWJsZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCisgICAgSnVtcCBub25DZWxsID0g
anVtcCgpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjaworICAg
IEp1bXAgbm90U3RyaW5nID0gYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCAKKyAgICAgICAgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCisgICAgICAgIG1fdm0t
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgYnJlYWtwb2ludCgpOworLyoKKyAgICBUT0RP
OiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gZm9yIHN0cmluZ3MuCisgICAgZW1pdE5ha2VkQ2FsbChD
b2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcikuY29kZSgpKSk7CisgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0NjQoWmVybywgcmVn
VDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgZW1pdEp1
bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKKyAgICBm
YWlsZWQubGluayh0aGlzKTsKKyovCisgICAgbm90U3RyaW5nLmxpbmsodGhpcyk7CisgICAgbm9u
Q2VsbC5saW5rKHRoaXMpOworICAgIAorICAgIEp1bXAgc2tpcFByb2ZpbGluZyA9IGp1bXAoKTsK
KyAgICAKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCisgICAgCisgICAgZW1pdEFycmF5
UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAgc2tpcFBy
b2ZpbGluZy5saW5rKHRoaXMpOworICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsK
KyAgICAKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYXNJdGVyYWJsZVByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdU
MCwgcmVnVDEpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAg
ICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7
CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dl
bmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9lbnVtZXJh
dG9yX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDIsNiArMTUwMiw2NCBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogICAgIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25IYXNJdGVyYWJsZVByb3BlcnR5RGVmYXVsdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkU3Vic2NyaXB0KTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwor
ICAgIEFTU0VSVChzdWJzY3JpcHQuaXNVSW50MzIoKSk7CisKKyAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7CisK
KyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9m
ZnNldCgpOworICAgIEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgQnlWYWxJbmZvJiBieVZh
bEluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0g
MSk7CisgICAgQVNTRVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgIAorICAgIGlmICho
YXNPcHRpbWl6YWJsZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKKyAgICAgICAg
Ly8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4KKyAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9
IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSh2bSkpOworICAgICAg
ICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZUhhc0l0ZXJhYmxlUHJvcGVydHkoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUp
OworICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmICghZGlkT3B0aW1pemUpIHsKKyAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBh
dGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UK
KyAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3ZSBmYWls
ZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QKKyAgICAgICAgLy8gdGhhdCBpbnRl
cmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4g
Rm9yIGNhc2VzCisgICAgICAgIC8vIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5n
IG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZgorICAgICAgICAvLyBv
cHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBw
b2x5bW9ycGhpYy4KKyAgICAgICAgaWYgKCsrYnlWYWxJbmZvLnNsb3dQYXRoQ291bnQgPj0gMTAK
KyAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsK
KyAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICAgICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihSZXR1cm5BZGRyZXNzUHRy
KE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJv
cGVydHlHZW5lcmljKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQu
YXNVSW50MzIoKSkpKTsKK30KKyAgICAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSGFzSXRlcmFibGVQcm9wZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQmFzZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFN1YnNjcmlwdCk7CisgICAgCisgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsK
KyAgICBBU1NFUlQoc3Vic2NyaXB0LmlzVUludDMyKCkpOworCisgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4ob2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQuYXNVSW50MzIoKSkpKTsK
K30KKyAgICAKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3LDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbERlZmF1bHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHlEZWZhdWx0KEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHlHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5U
RVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFjdGl2YXRpb24oRXhl
Y1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlk
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGJhc2UsIGNvbnN0IElkZW50aWZpZXIqKSBXVEZf
SU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTcwNzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9m
ZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIApAQCAtMTYwLDEz
ICsxNjAsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVHZXRCeVZhbChJbgogICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgIGxvYWREb3Vi
bGUoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCksIGZwUmVnVDApOwogICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZw
UmVnVDAsIGZwUmVnVDApKTsKLSAgICBtb3ZlRG91YmxlVG82NChmcFJlZ1QwLCByZWdUMCk7Ci0g
ICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CiAgICAgCiAgICAgcmV0dXJu
IHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhw
ZWN0ZWRTaGFwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFw
ZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCkBAIC0xNzksNyArMTc3LDcgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYQogICAgIHJldHVybiBzbG93
Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE3
MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTIxMCw2ICsxMjEwLDQwIEBAIF9sbGludF9uYXRpdmVf
Y2FsbF90cmFtcG9saW5lOgogX2xsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAg
ICBuYXRpdmVDYWxsVHJhbXBvbGluZShOYXRpdmVFeGVjdXRhYmxlOjptX2NvbnN0cnVjdG9yKQog
CitfbGxpbnRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisgICAg
ZGlzcGF0Y2goMykKKworX2xsaW50X29wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgorICAgIHRy
YWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9oYXNfZW51bWVyYWJs
ZV9wcm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg0KQorCitfbGxpbnRfb3BfaGFzX2l0ZXJhYmxlX3By
b3BlcnR5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0
aF9oYXNfaXRlcmFibGVfcHJvcGVydHkpCisgICAgZGlzcGF0Y2goNSkKKworX2xsaW50X29wX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisg
ICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJh
dG9yKQorICAgIGRpc3BhdGNoKDMpCisKK19sbGludF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9l
bnVtZXJhdG9yOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3df
cGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgIGRpc3BhdGNoKDUpCisK
K19sbGludF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CisgICAgdHJhY2VFeGVjdXRpb24oKQor
ICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSkKKyAgICBk
aXNwYXRjaCg0KQorCitfbGxpbnRfb3BfdG9faW5kZXhfc3RyaW5nOgorICAgIHRyYWNlRXhlY3V0
aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCisgICAg
ZGlzcGF0Y2goMykKIAogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4g
dGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hv
dWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNzA3Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyODAsNiArMTI4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRm9ySW5Ob2Rl
KFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSos
IEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopOwogCiAgICAgcHJpdmF0ZToKKyAgICAg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnRpZmllckZvckJvdW5kTG9jYWwoQnl0ZWNvZGVHZW5l
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0TG9vcEhlYWRlcihCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHZvaWQgZW1pdE11bHRpTG9vcEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogZHN0KTsKKwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBvdmVycmlkZTsKICAgICB9OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miwx
MiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHR5cGVkZWYgdm9pZCAoKkdldFByb3BlcnR5
TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdl
dFByb3BlcnR5TmFtZXM7CiAKKyAgICB0eXBlZGVmIHVpbnQzMl90ICgqR2V0RW51bWVyYWJsZUxl
bmd0aEZ1bmN0aW9uUHRyKShWTSYsIEpTT2JqZWN0Kik7CisgICAgR2V0RW51bWVyYWJsZUxlbmd0
aEZ1bmN0aW9uUHRyIGdldEVudW1lcmFibGVMZW5ndGg7CisKKyAgICBHZXRQcm9wZXJ0eU5hbWVz
RnVuY3Rpb25QdHIgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lczsKKyAgICBHZXRQcm9wZXJ0eU5h
bWVzRnVuY3Rpb25QdHIgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXM7CisKICAgICB0eXBlZGVmIFN0
cmluZyAoKkNsYXNzTmFtZUZ1bmN0aW9uUHRyKShjb25zdCBKU09iamVjdCopOwogICAgIENsYXNz
TmFtZUZ1bmN0aW9uUHRyIGNsYXNzTmFtZTsKIApAQCAtMTM3LDYgKzE0Myw5IEBAIHN0cnVjdCBN
ZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6OmdldE93blByb3BlcnR5TmFtZXMsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAg
ICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6
Z2V0RW51bWVyYWJsZUxlbmd0aCwgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldEdlbmVyaWNQcm9wZXJ0eU5h
bWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNzTmFtZSwgXAogICAgICAgICAmQ2xhc3NO
YW1lOjpjdXN0b21IYXNJbnN0YW5jZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Q
cm9wZXJ0eSwgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzA3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgpAQCAt
NTQyLDYgKzU0Myw5NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW50ZXIpCiAgICAgRU5E
KCk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgp
Cit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUo
KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVS
Tihqc051bWJlcigwKSk7CisKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVj
dChleGVjKTsKKyAgICBSRVRVUk4oanNOdW1iZXIoYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRF
bnVtZXJhYmxlTGVuZ3RoKHZtLCBiYXNlKSkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU09iamVj
dCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBKU1ZhbHVlIHBy
b3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChwcm9w
ZXJ0eS5pc1N0cmluZygpKQorICAgICAgICByZXN1bHQgPSBiYXNlLT5oYXNQcm9wZXJ0eShleGVj
LCBhc1N0cmluZyhwcm9wZXJ0eS5hc0NlbGwoKSktPnRvSWRlbnRpZmllcihleGVjKSk7CisgICAg
ZWxzZSB7CisgICAgICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMigpKTsKKyAgICAgICAgcmVz
dWx0ID0gYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkuYXNVSW50MzIoKSk7CisgICAg
fQorICAgIFJFVFVSTihqc0Jvb2xlYW4ocmVzdWx0KSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9oYXNfaXRlcmFibGVfcHJvcGVydHkpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU09i
amVjdCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBKU1ZhbHVl
IHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIHBjWzRdLnUuYXJyYXlQcm9maWxlLT5v
YnNlcnZlU3RydWN0dXJlKGJhc2UtPnN0cnVjdHVyZSh2bSkpOworICAgIEFTU0VSVChwcm9wZXJ0
eS5pc1VJbnQzMigpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5KGV4
ZWMsIHByb3BlcnR5LmFzVUludDMyKCkpKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZSh2bSkpOworICAgICAgICAKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VW
YWx1ZS50b09iamVjdChleGVjKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0
cnVjdHVyZSh2bSk7CisgICAgaWYgKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRv
ciA9IHN0cnVjdHVyZS0+Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICBS
RVRVUk4oZW51bWVyYXRvcik7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVz
KGV4ZWMpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBpZiAoc3Ry
dWN0dXJlLT5jYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0
dXJlLT5zZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBlbnVtZXJhdG9yKTsKKyAg
ICBSRVRVUk4oZW51bWVyYXRvcik7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRf
Z2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
cmVhdGUodm0pKTsKKyAgICAKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVj
dChleGVjKTsKKyAgICB1aW50MzJfdCBlbnVtZXJhdGVkTGVuZ3RoID0gT1AoMykuanNWYWx1ZSgp
LmFzVUludDMyKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBzdHJ1Y3R1cmVFbnVt
ZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDQpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMp
OworICAgIHByb3BlcnR5TmFtZXMuc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgoZW51bWVy
YXRlZExlbmd0aCk7CisgICAgcHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRlZFBy
b3BlcnRpZXMoc3RydWN0dXJlRW51bWVyYXRvcik7CisgICAgYmFzZS0+bWV0aG9kVGFibGUodm0p
LT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAKKyAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjcmVhdGUodm0sIHByb3BlcnR5TmFtZXMpKTsKK30KKworU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSkKK3sKKyAgICBCRUdJTigpOworICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqPihPUCgyKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIHVpbnQzMl90
IGluZGV4ID0gT1AoMykuanNWYWx1ZSgpLmFzVUludDMyKCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7
CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IGpzU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZS0+
c3RyaW5nKCkpIDoganNOdWxsKCkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9f
aW5kZXhfc3RyaW5nKQoreworICAgIEJFR0lOKCk7CisgICAgUkVUVVJOKGpzU3RyaW5nKGV4ZWMs
IElkZW50aWZpZXI6OmZyb20oZXhlYywgT1AoMikuanNWYWx1ZSgpLmFzVUludDMyKCkpLnN0cmlu
ZygpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkg
fHwgRU5BQkxFKExMSU5UKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTks
NiArMTk5LDEzIEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaW4pOwogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9kZWxfYnlfdmFsKTsKIFNMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfc3RyY2F0KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
dG9fcHJpbWl0aXZlKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGFzX2VudW1l
cmFibGVfcHJvcGVydHkpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9oYXNfaXRl
cmFibGVfcHJvcGVydHkpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfc3Ry
dWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24g
MTcwNzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM2LDQgKzIzNiwxOSBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmll
dz4gSlNDZWxsOjpnZXRUCiAgICAgcmV0dXJuIDA7CiB9CiAKK3VpbnQzMl90IEpTQ2VsbDo6Z2V0
RW51bWVyYWJsZUxlbmd0aChWTSYsIEpTT2JqZWN0KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpTQ2VsbDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSlND
ZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5
LDExIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgc3RhdGljIE5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChWTSYs
IEpTT2JqZWN0Kik7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKICAgICBzdGF0aWMgU3RyaW5n
IGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhy
b3cpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAko
cmV2aXNpb24gMTcwNzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjk1LDYgKzEyOTUsMTIgQEAgYm9vbCBKU09iamVj
dDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3Qo
Y29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCitib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsK
KyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZShleGVj
LT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
dGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKIGJvb2wgSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNl
bGwpOwpAQCAtMTUwMSw3ICsxNTA3LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iagogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZExlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChp
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNTEzLDcgKzE1MTksNyBA
QCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgICAgICBk
b3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTUyNCw3ICsxNTMwLDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iagogICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjpt
aW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKGkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpIHsKQEAg
LTE1MzksNyArMTU0NSw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmoKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5
cy5lbmQoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChr
ZXlzW2ldKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNjczLDQgKzI2
NzksODQgQEAgSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYwogICAgIHJl
dHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBtZXNzYWdlKSk7CiB9CiAKK3VpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3Ro
KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5ob2xlc011c3RGb3J3
YXJkVG9Qcm90b3R5cGUodm0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzd2l0Y2ggKG9iamVj
dC0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoK
KyAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiAw
OworICAgICAgICAKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gb2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0
aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHVzZWRMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9E
T1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBv
YmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICB1bnNpZ25lZCB1c2VkTGVuZ3RoID0gYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVz
ZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVzZWRM
ZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9i
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VN
YXAuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFn
ZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNl
ZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9y
W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB1c2VkVmVjdG9yTGVuZ3RoOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCit2b2lkIEpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2
bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKworICAgIGlm
IChvYmplY3QtPnByb3RvdHlwZSgpLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBK
U09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3Qob2JqZWN0LT5wcm90b3R5cGUoKSk7CisgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKHByb3RvdHlwZS0+c3RydWN0dXJlKHZtKS0+dHlw
ZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpIHsKKyAgICAgICAgICAgIHByb3Rv
dHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90
b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICBKU1ZhbHVlIG5leHRQ
cm90byA9IHByb3RvdHlwZS0+cHJvdG90eXBlKCk7CisgICAgICAgIGlmIChuZXh0UHJvdG8uaXNO
dWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcHJvdG90eXBlID0gYXNPYmplY3Qo
bmV4dFByb3RvKTsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDE3MDczOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3MSw2ICs0NzEsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBo
YXNQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lKSBjb25zdDsKICAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25l
ZCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwpAQCAtNDg0LDYgKzQ4NSwxMCBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdWludDMyX3QgZ2V0RW51
bWVyYWJsZUxlbmd0aChWTSYsIEpTT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKwogICAgIEpTVmFs
dWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJl
ZmVyZW5jZSkgY29uc3Q7CiAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwg
ZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBk
b3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBDbGFzc0luZm8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpzX2luZm8gPSB7
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcikgfTsKKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgaWYgKCF2
bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgUHJvcGVydHlO
YW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0pOworICAgICAgICB2bS5lbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IgPSBTdHJvbmc8SlNDZWxsPih2bSwgY3JlYXRlKHZtLCBwcm9wZXJ0eU5hbWVz
KSk7CisgICAgfQorICAgIHJldHVybiBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
dm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpKTsKK30KKworSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0sIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQoreworICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcj4odm0uaGVhcCkpIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwg
cHJvcGVydHlOYW1lcy5kYXRhKCkpOworICAgIGVudW1lcmF0b3ItPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZXR1cm4gZW51bWVyYXRvcjsKK30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBQYXNzUmVmUHRyPFByb3BlcnR5TmFt
ZUFycmF5RGF0YT4gaWRlbnRpZmllcnMpCisgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFt
ZUVudW1lcmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2lkZW50aWZpZXJzKGlkZW50aWZp
ZXJzKQoreworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwp
LT5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6On5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9oCisjZGVmaW5lIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVB
cnJheS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSWRlbnRpZmllcjsKKworY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIDogcHVibGlj
IEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRp
YyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNyZWF0ZShWTSYpOworICAgIHN0YXRpYyBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqIGNyZWF0ZShWTSYsIFByb3BlcnR5TmFtZUFycmF5Jik7CisK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgY29uc3QgSWRl
bnRpZmllciogcHJvcGVydHlOYW1lQXRJbmRleCh1aW50MzJfdCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA+PSBtX2lkZW50aWZpZXJzLT5wcm9wZXJ0eU5hbWVWZWN0b3Io
KS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZt
X2lkZW50aWZpZXJzLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpbmRleF07CisgICAgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcihWTSYsIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPik7CisgICAg
UmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9pZGVudGlmaWVyczsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAx
NzA3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMiBAQCB2b2lkIEpTUHJveHk6OmdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqCiAgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAordm9pZCBKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU1Byb3h5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOworICAgIHRoaXNPYmplY3Qt
PnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFt
ZXModGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQor
CiB2b2lkIEpTUHJveHk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5
Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJ
KHJldmlzaW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1l
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TmFtZUFycmF5LmNwcAkocmV2aXNpb24gMTcwNzM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywzMyArMjMsMzQgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdGF0aWMgY29uc3Qgc2l6ZV90IHNldFRocmVzaG9sZCA9IDIwOwotCiB2b2lkIFBy
b3BlcnR5TmFtZUFycmF5OjphZGQoU3RyaW5nSW1wbCogaWRlbnRpZmllcikKIHsKICAgICBBU1NF
UlQoIWlkZW50aWZpZXIgfHwgaWRlbnRpZmllciA9PSBTdHJpbmdJbXBsOjplbXB0eSgpIHx8IGlk
ZW50aWZpZXItPmlzQXRvbWljKCkpOwotCi0gICAgc2l6ZV90IHNpemUgPSBtX2RhdGEtPnByb3Bl
cnR5TmFtZVZlY3RvcigpLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA8IHNldFRocmVzaG9sZCkgewot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAg
aWYgKGlkZW50aWZpZXIgPT0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXS5pbXBsKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKG1fc2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgbV9zZXQuYWRkKG1fZGF0YS0+cHJvcGVy
dHlOYW1lVmVjdG9yKClbaV0uaW1wbCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fc2V0
LmFkZChpZGVudGlmaWVyKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gUHJvcGVydHlO
YW1lKElkZW50aWZpZXIobV92bSwgaWRlbnRpZmllcikpLmFzSW5kZXgoKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChpbmRleCwgaW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4IHx8IGlu
ZGV4ID49IG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpOwogICAgIH0KIAorICAgIGlmICgh
bV9zZXQuYWRkKGlkZW50aWZpZXIpLmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGFkZEtub3duVW5pcXVlKGlkZW50aWZpZXIpOwogfQogCit2b2lkIFByb3BlcnR5TmFtZUFycmF5
OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IDsgKytp
KSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBlbnVtZXJhdG9yLT5w
cm9wZXJ0eU5hbWVBdEluZGV4KGkpOworICAgICAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgbV9zZXQuYWRkKGlkZW50aWZpZXItPmltcGwoKSk7CisgICAg
fQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24gMTcwNzM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKKyAgICBj
bGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAgICAgY2xhc3MgU3RydWN0dXJlOwogICAg
IGNsYXNzIFN0cnVjdHVyZUNoYWluOwogCkBAIC01Niw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAgICAgLCBtX251bUNhY2hlYWJsZVNs
b3RzKDApCiAgICAgICAgICAgICAsIG1fYmFzZU9iamVjdCgwKQorICAgICAgICAgICAgLCBtX3By
ZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC02
NCwxMSArNjYsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1fdm0oJmV4ZWMt
PnZtKCkpCiAgICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAg
ICwgbV9iYXNlT2JqZWN0KDApCisgICAgICAgICAgICAsIG1fcHJldmlvdXNseUVudW1lcmF0ZWRM
ZW5ndGgoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVk0qIHZtKCkgeyByZXR1
cm4gbV92bTsgfQogCisgICAgICAgIHZvaWQgYWRkKHVpbnQzMl90IGluZGV4KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoaW5kZXggPCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGFkZChJZGVudGlmaWVyOjpmcm9t
KG1fdm0sIGluZGV4KSk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGFkZChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVyLmltcGwoKSk7IH0KICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoU3RyaW5nSW1wbCopOwogICAgICAgICB2b2lkIGFk
ZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5wcm9wZXJ0eU5h
bWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVyKSk7IH0KQEAgLTgx
LDYgKzkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFBhc3NSZWZQdHI8UHJvcGVydHlO
YW1lQXJyYXlEYXRhPiByZWxlYXNlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5yZWxlYXNlKCk7IH0K
IAogICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgYm9v
bCBjYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuICFtX3NldC5z
aXplKCk7IH0KICAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5
TmFtZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXpl
KCk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmJlZ2luKCk7IH0KQEAgLTEwMCw2ICsxMTEsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fYmFzZU9iamVjdCA9IG9iamVjdDsKICAgICAg
ICAgfQogCisgICAgICAgIHZvaWQgc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgodWludDMy
X3QgbGVuZ3RoKSB7IG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGggPSBsZW5ndGg7IH0KKyAg
ICAgICAgdm9pZCBzZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEhh
c2hTZXQ8U3RyaW5nSW1wbCosIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBJZGVudGlmaWVyU2V0Owog
CkBAIC0xMDgsNiArMTIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNKiBtX3ZtOwog
ICAgICAgICBzaXplX3QgbV9udW1DYWNoZWFibGVTbG90czsKICAgICAgICAgSlNPYmplY3QqIG1f
YmFzZU9iamVjdDsKKyAgICAgICAgdWludDMyX3QgbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0
aDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwNzM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIxLDYgKzEyMSwxMyBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlO
YW1lcyhKU09iCiAgICAgQmFzZTo6Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7CisgICAgQmFzZTo6Z2V0R2VuZXJp
Y1Byb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwog
c3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwg
Y29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24g
MTcwNzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MDczOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNp
bmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2lu
Y2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCkBAIC0xMDAxLDcgKzEwMDEsNyBAQCB2b2lkIFN0
cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wga25vd25VbmlxdWUgPSAhcHJvcGVydHlO
YW1lcy5zaXplKCk7CisgICAgYm9vbCBrbm93blVuaXF1ZSA9IHByb3BlcnR5TmFtZXMuY2FuQWRk
S25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKTsKIAogICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9y
IGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7CkBAIC0xMjgwLDQgKzEyODAsMzAgQEAgYm9vbCBDbGFzc0luZm86Omhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnNl
dENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBh
bGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICByYXJlRGF0YSgpLT5zZXRDYWNoZWRQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKHZtLCBlbnVtZXJhdG9yKTsKK30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBTdHJ1Y3R1cmU6OmNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAorewor
ICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIHJhcmVEYXRhKCktPmNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKworYm9v
bCBTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBU
T0RPOiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgc2luY2Ugb3ZlcnJpZGVuIHByb3BlcnR5
IG5hbWVzIGFyZSBwYXJ0IG9mIHRoZSBnZW5lcmljIHByb3BlcnR5IGxvb3AuCisgICAgaWYgKHR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3
MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODgsNiArMjg4LDExIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RW51
bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2Fj
aGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KICAgICBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7IC8vIERlZmluZWQgaW4gSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oLgorCisgICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAg
Ym9vbCBjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKwogICAgIHZvaWQg
Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAKICAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuY3BwCShyZXZpc2lvbiAxNzA3MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgog
CisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgpAQCAtNjUsNCArNjYsMTQgQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlz
aXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2VudW1lcmF0
aW9uQ2FjaGUpOwogfQogCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIFN0cnVjdHVyZVJhcmVE
YXRhOjpjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpOworfQorCit2b2lkIFN0cnVjdHVy
ZVJhcmVEYXRhOjpzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIG1fY2FjaGVkUHJvcGVydHlO
YW1lRW51bWVyYXRvci5zZXQodm0sIHRoaXMsIGVudW1lcmF0b3IpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJh
cmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMTcwNzM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOwogY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKIGNsYXNzIFN0cnVjdHVyZTsKIApA
QCAtNTYsNiArNTcsOSBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCisg
ICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisKIHByaXZhdGU6CiAgICAgU3RydWN0dXJlUmFy
ZURhdGEoVk0mLCBTdHJ1Y3R1cmUqKTsKIApAQCAtNjQsNiArNjgsNyBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7CiAgICAgV3JpdGVCYXJyaWVyPEpT
U3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yPiBtX2NhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3I7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAJKHJldmlzaW9uIDE3MDczOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkpTTm90
QW5PYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZVJlYWN0aW9uLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
CiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTV2l0aFNj
b3BlLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTI1OCw2ICsyNTksNyBAQCBWTTo6Vk0oVk1U
eXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgq
dGhpcywgSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBub3RBbk9iamVjdFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0
cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0
dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZ2V0dGVyU2V0dGVyU3RydWN0dXJlLnNldCgqdGhp
cywgR2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgYXBpV3JhcHBlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgSlNTY29wZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcwNzM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjY2
LDYgKzI2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBz
dHJpbmdTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3Ry
dWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0
cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlOYW1lRW51bWVyYXRv
clN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZ2V0dGVyU2V0dGVyU3RydWN0
dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBhcGlXcmFwcGVyU3RydWN0dXJlOwogICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBKU1Njb3BlU3RydWN0dXJlOwpAQCAtMjkxLDYgKzI5Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlUmVh
Y3Rpb25TdHJ1Y3R1cmU7CiAjZW5kaWYKICAgICAgICAgU3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9u
VGVybWluYXRvcjsKKyAgICAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOwogCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2F0b21pY1N0cmluZ1RhYmxl
OwogICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234531</attachid>
            <date>2014-07-07 18:30:31 -0700</date>
            <delta_ts>2014-07-08 16:06:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140707183013.patch</filename>
            <type>text/plain</type>
            <size>129389</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OSBA
QAorMjAxNC0wNy0wNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorCisgICAgICAgIEl0IGRvZXMgdGhpcyBieSBlbWl0dGluZyB0
aGVzZSBleHBsaWNpdCBsb29wcyBpbiBieXRlY29kZSwgdXNpbmcgYSBuZXcgc2V0IG9mIGJ5dGVj
b2RlcyB0byAKKyAgICAgICAgc3VwcG9ydCB0aGUgdmFyaW91cyBvcGVyYXRpb25zIHJlcXVpcmVk
IGZvciBlYWNoIGxvb3AuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uOgorICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6CisgICAgICAgIChKU0M6OmNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udGV4dCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjb3Blcyk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJdGVyYWJsZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OnB1c2hPcHRpbWlzZWRGb3JJbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwb3BPcHRpbWlzZWRGb3JJbik6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdExvb3BI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAg
ICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAg
ICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBo
YXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzQXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRv
RXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0l0
ZXJhYmxlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV4dEVudW1lcmF0b3JQbmFt
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4U3Ry
aW5nKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVIYXNJdGVyYWJsZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50MzJMb2Fk
KToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRE
b3VibGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1l
cmFibGVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSXRl
cmFibGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfaXRlcmFibGVf
cHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pdGVyYWJsZV9w
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc3RydWN0dXJlX3Byb3Bl
cnR5X2VudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2dlbmVyaWNf
cHJvcGVydHlfZW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXh0X2Vu
dW1lcmF0b3JfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3Ry
aW5nKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJ
VE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
Q29udGlndW91c0xvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2Fk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RG91YmxlR2V0QnlWYWwpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcGFyc2VyL05vZGVz
Lmg6CisgICAgICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAg
ICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxs
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAg
ICAgKEpTQzo6SlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpT
Qzo6SlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6Omhhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxl
bmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6ZGVzdHJveSk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpwcm9wZXJ0eU5hbWVBdEluZGV4KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHku
Y3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgICogcnVudGltZS9KU1Byb3h5Lmg6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5h
bWVBcnJheS5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg6CisgICAgICAg
IChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5hbWVBcnJheSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheTo6Y2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpOgorICAgICAgICAq
IHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0Ojpn
ZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3Qu
aDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNw
cDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRv
cik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6Cisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAg
ICogcnVudGltZS9WTS5oOgorCiAyMDE0LTA3LTA3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVu
YmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgTWVyZ2UgcjE3MDAxMSBmcm9tIHRydW5rLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDggQEAKIAkJMUNBQTlBMjMxOEY0QTIyMDAw
MEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNBQTlBMjExOEY0QTIyMDAwMEEzNjlEIC8q
IEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICovOyB9OwogCQkyNjAwQjVBNjE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsKKwkJMkEw
NUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTA1QUJEMzE5NjFE
RjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCAqLzsgfTsKKwkJMkEw
NUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFCRDQxOTYxREYy
NDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovOyB9OwogCQkyQTI4MjVE
MDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5
IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsKIAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1
QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBFMkEyMyAvKiBBUElDYWxsYmFj
a0Z1bmN0aW9uLmggKi87IH07CiAJCTJBNEJCN0YzMThBNDExNzkwMDhBMEZDRCAvKiBKU01hbmFn
ZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5h
bC5oICovOyB9OwpAQCAtMjk0OSw2ICsyOTUxLDggQEAKIAkJMUNBQTlBMjExOEY0QTIyMDAwMEEz
NjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9p
bmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9p
bmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAw
OTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBMDVB
QkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkEwNUFCRDQxOTYxREYyNDAwMzQx
NzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsYXllZFJlbGVhc2VTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIw
ODUgLyogR0NTZWdtZW50ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHQ1NlZ21lbnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMzQz
Rjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk2Myw2ICs0OTY3LDggQEAKIAkJCQkxNDIwQkU3
QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCUE3RENCNzc5MTJFM0Q5
MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlDMkI2RDc1MjE4QTMzNzkzMDA0
QTkzMDEgLyogV3JpdGVCYXJyaWVySW5saW5lcy5oICovLAorCQkJCTJBMDVBQkQzMTk2MURGMjQw
MDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwICovLAorCQkJCTJBMDVBQkQ0
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02NTc2
LDYgKzY1ODIsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNv
bXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1
QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJFMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9m
aWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTkwQ0FEMTg5RDgy
RjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLApAQCAtNzcyMiw2ICs3NzI5LDcgQEAKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIg
LyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0
RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMjBDQjkxODU1
NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2
aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDE0IEBACiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9kaWRfY2FsbCIsICJsZW5ndGgiIDogMiB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5kIiwgImxlbmd0aCIgOiAyIH0sCi0gICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIs
ICJsZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVz
X3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwgImxlbmd0aCIgOiAzIH0sCisgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSIsICJsZW5ndGgiIDog
NCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5Iiwg
Imxlbmd0aCIgOiA1IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc3RydWN0dXJl
X3Byb3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6IDUg
fSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25leHRfZW51bWVyYXRvcl9wbmFtZSIsICJs
ZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9faW5kZXhfc3RyaW5n
IiwgImxlbmd0aCIgOiAzIH0KICAgICAgICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9u
IDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24s
IG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAg
IGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdG9faW5kZXhfc3Ry
aW5nOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5p
dF9nbG9iYWxfY29uc3Q6CiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CkBAIC0xNTAsNiAr
MTUzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFi
bGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfaXRlcmFibGVfcHJvcGVydHk6CisgICAgY2Fz
ZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgogICAg
IGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbDoKICAgICBjYXNlIG9wX2luOgpAQCAtMTc5LDYg
KzE4NSw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9wX2dldF9nZW5lcmlj
X3Byb3BlcnR5X2VudW1lcmF0b3I6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwpAQCAtMjk4LDYg
KzMwNSwxMyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAjdW5k
ZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKICAgICAgICAgcmV0dXJuOwogICAgIC8vIFRoZXNlIGFs
bCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAg
Y2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0
eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIGNh
c2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfaXRlcmFibGVf
cHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6
CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CiAgICAgY2FzZSBvcF9uZXh0X3Bu
YW1lOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKICAgICBjYXNlIG9wX3N0cmNhdDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsxMzk5LDY4IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX25leHRf
cG5hbWUpIC0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCkg
LSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNf
aXRlcmFibGVfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICAgICAg
cHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2l0ZXJh
YmxlX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcCIs
IHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCBhcnJheVByb2ZpbGUpOworICAgICAgICAg
ICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfaXRlcmFibGVfcHJvcGVydHkpIC0gMTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFi
bGVfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBw
cm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9u
QW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0
eSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShk
c3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3Bl
cnR5TmFtZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFz
X2VudW1lcmFibGVfcHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7Cisg
ICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJh
c2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0
LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0
b3IiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBP
UENPREVfTEVOR1RIKG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikgLSAxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZ2VuZXJp
Y19wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgbGVuZ3RoID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHN0cnVj
dHVyZUVudW1lcmF0b3IgPSBpdFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0
eV9lbnVtZXJhdG9yIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGxlbmd0aCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc3RydWN0dXJlRW51bWVyYXRv
cikuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2dlbmVy
aWNfcHJvcGVydHlfZW51bWVyYXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6IHsKKyAgICAgICAgICAg
IGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9
IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBp
dCwgIm9wX25leHRfZW51bWVyYXRvcl9wbmFtZSIpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
JXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1l
cmF0b3IpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOworICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpIC0gMTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5n
OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGluZGV4ID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfdG9faW5kZXhfc3RyaW5nIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5H
VEgob3BfdG9faW5kZXhfc3RyaW5nKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZTogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdp
c3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJwdXNoX3dpdGhfc2NvcGUiLCBy
MCk7CkBAIC0xNzk5LDYgKzE4NjEsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51Lm9wZXJhbmQgPSBw
Y1tqXS51Lm9wZXJhbmQ7CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChwY1swXS51Lm9wY29k
ZSkgeworICAgICAgICBjYXNlIG9wX2hhc19pdGVyYWJsZV9wcm9wZXJ0eTogeworICAgICAgICAg
ICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9m
aWxlKGkpOworCisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAm
bV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgogICAgICAgICBjYXNlIG9w
X2NvbnN0cnVjdF92YXJhcmdzOgogICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
MzUsMTkgKzE0MzUsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEFy
CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCk7IGkgPiAwOyBpLS0pIHsK
LSAgICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRTdGFja1tpIC0g
MV07Ci0gICAgICAgIGlmIChjb250ZXh0LnByb3BlcnR5UmVnaXN0ZXIgPT0gcHJvcGVydHkpIHsK
LSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfZ2V0X2J5X3BuYW1lKTsKLSAgICAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChjb250ZXh0LmV4cGVjdGVkU3Vic2NyaXB0UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuaXRlclJlZ2lzdGVyLT5pbmRleCgp
KTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LmluZGV4UmVnaXN0
ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotICAgIH0K
ICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUo
KTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2Rl
KG9wX2dldF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwpA
QCAtMjAzOCw3ICsyMDI1LDYgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlD
b250ZQogICAgICAgICBmaW5hbGx5QmxvY2ssCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihtX3Njb3BlQ29udGV4dFN0YWNrLnNpemUoKSksCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX3N3aXRjaENvbnRleHRTdGFjay5zaXplKCkpLAotICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCkpLAogICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV90cnlDb250ZXh0U3RhY2suc2l6ZSgpKSwKICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fbGFiZWxTY29wZXMuc2l6ZSgpKSwKICAgICAgICAgbV9maW5hbGx5RGVw
dGgsCkBAIC0yMTYxLDcgKzIxNDcsNiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29t
cGxleFBvcFNjCiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0PiBz
YXZlZFNjb3BlQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gc2F2ZWRT
d2l0Y2hDb250ZXh0U3RhY2s7Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IHNhdmVkRm9y
SW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0PiBwb3BwZWRUcnlDb250
ZXh0czsKICAgICAgICAgTGFiZWxTY29wZVN0b3JlIHNhdmVkTGFiZWxTY29wZXM7CiAgICAgICAg
IHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3BlICYmIHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9j
aykgewpAQCAtMjE3Miw3ICsyMTU3LDYgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENv
bXBsZXhQb3BTYwogICAgICAgICAgICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQgPSB0
b3BTY29wZS0+ZmluYWxseUNvbnRleHQ7CiAgICAgICAgICAgICBib29sIGZsaXBTY29wZXMgPSBm
aW5hbGx5Q29udGV4dC5zY29wZUNvbnRleHRTdGFja1NpemUgIT0gbV9zY29wZUNvbnRleHRTdGFj
ay5zaXplKCk7CiAgICAgICAgICAgICBib29sIGZsaXBTd2l0Y2hlcyA9IGZpbmFsbHlDb250ZXh0
LnN3aXRjaENvbnRleHRTdGFja1NpemUgIT0gbV9zd2l0Y2hDb250ZXh0U3RhY2suc2l6ZSgpOwot
ICAgICAgICAgICAgYm9vbCBmbGlwRm9ySW5zID0gZmluYWxseUNvbnRleHQuZm9ySW5Db250ZXh0
U3RhY2tTaXplICE9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOwogICAgICAgICAgICAgYm9v
bCBmbGlwVHJpZXMgPSBmaW5hbGx5Q29udGV4dC50cnlDb250ZXh0U3RhY2tTaXplICE9IG1fdHJ5
Q29udGV4dFN0YWNrLnNpemUoKTsKICAgICAgICAgICAgIGJvb2wgZmxpcExhYmVsU2NvcGVzID0g
ZmluYWxseUNvbnRleHQubGFiZWxTY29wZXNTaXplICE9IG1fbGFiZWxTY29wZXMuc2l6ZSgpOwog
ICAgICAgICAgICAgaW50IHRvcFNjb3BlSW5kZXggPSAtMTsKQEAgLTIxODcsMTAgKzIxNzEsNiBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjCiAgICAgICAgICAgICAg
ICAgc2F2ZWRTd2l0Y2hDb250ZXh0U3RhY2sgPSBtX3N3aXRjaENvbnRleHRTdGFjazsKICAgICAg
ICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuc3dp
dGNoQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmxp
cEZvcklucykgewotICAgICAgICAgICAgICAgIHNhdmVkRm9ySW5Db250ZXh0U3RhY2sgPSBtX2Zv
ckluQ29udGV4dFN0YWNrOwotICAgICAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2suc2hy
aW5rKGZpbmFsbHlDb250ZXh0LmZvckluQ29udGV4dFN0YWNrU2l6ZSk7Ci0gICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoZmxpcFRyaWVzKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG1f
dHJ5Q29udGV4dFN0YWNrLnNpemUoKSAhPSBmaW5hbGx5Q29udGV4dC50cnlDb250ZXh0U3RhY2tT
aXplKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3RyeUNvbnRleHRTdGFjay5zaXpl
KCkgPiBmaW5hbGx5Q29udGV4dC50cnlDb250ZXh0U3RhY2tTaXplKTsKQEAgLTIyMjcsOCArMjIw
Nyw2IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAgICAgbV9z
d2l0Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKLSAgICAgICAgICAg
IGlmIChmbGlwRm9ySW5zKQotICAgICAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2sgPSBz
YXZlZEZvckluQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgaWYgKGZsaXBUcmllcykgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChtX3RyeUNvbnRleHRTdGFjay5zaXplKCkgPT0gZmluYWxseUNv
bnRleHQudHJ5Q29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gcG9wcGVkVHJ5Q29udGV4dHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0yNTYxLDQgKzI1Mzks
NjcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgIGVtaXRM
YWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiB9CiAKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UpCit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK3sK
KyAgICBlbWl0T3Bjb2RlKG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFtZS0+
aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRIYXNJdGVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQoreworICAgIFVubGlua2VkQXJyYXlQ
cm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOworICAgIGVtaXRPcGNvZGUo
b3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFtZS0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGFycmF5UHJvZmlsZSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVu
dW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQoreworICAgIGVtaXRP
cGNvZGUob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YmFzZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoLCBSZWdpc3RlcklEKiBz
dHJ1Y3R1cmVFbnVtZXJhdG9yKQoreworICAgIGVtaXRPcGNvZGUob3BfZ2V0X2dlbmVyaWNfcHJv
cGVydHlfZW51bWVyYXRvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChsZW5ndGgtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChzdHJ1Y3R1cmVFbnVtZXJhdG9yLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQor
CitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVy
dHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJ
RCogaW5kZXgpCit7CisgICAgZW1pdE9wY29kZShvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChlbnVtZXJhdG9yLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoaW5kZXgtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGluZGV4KQoreworICAgIGVtaXRPcGNvZGUob3BfdG9faW5kZXhfc3RyaW5nKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoaW5kZXgtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw3ICs4NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdGF0ZW1l
bnROb2RlKiBmaW5hbGx5QmxvY2s7CiAgICAgICAgIHVuc2lnbmVkIHNjb3BlQ29udGV4dFN0YWNr
U2l6ZTsKICAgICAgICAgdW5zaWduZWQgc3dpdGNoQ29udGV4dFN0YWNrU2l6ZTsKLSAgICAgICAg
dW5zaWduZWQgZm9ySW5Db250ZXh0U3RhY2tTaXplOwogICAgICAgICB1bnNpZ25lZCB0cnlDb250
ZXh0U3RhY2tTaXplOwogICAgICAgICB1bnNpZ25lZCBsYWJlbFNjb3Blc1NpemU7CiAgICAgICAg
IGludCBmaW5hbGx5RGVwdGg7CkBAIC05NywxMyArOTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgRmluYWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CiAgICAgfTsKIAotICAgIHN0cnVj
dCBGb3JJbkNvbnRleHQgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwZWN0ZWRTdWJz
Y3JpcHRSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJSZWdpc3RlcjsK
LSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluZGV4UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcm9wZXJ0eVJlZ2lzdGVyOwotICAgIH07Ci0KICAgICBzdHJ1Y3QgVHJ5
RGF0YSB7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gdGFyZ2V0OwogICAgICAgICB1bnNpZ25lZCB0
YXJnZXRTY29wZURlcHRoOwpAQCAtNDMxLDYgKzQyMywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFByb3BlcnR5TmFtZXMoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBMYWJlbCog
YnJlYWtUYXJnZXQpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dFByb3BlcnR5TmFtZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVy
SUQqIHNpemUsIFJlZ2lzdGVySUQqIGl0ZXIsIExhYmVsKiB0YXJnZXQpOwogCisgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzSXRlcmFibGVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3Io
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1l
cmF0b3IpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5h
bWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBp
bmRleCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhj
ZXB0aW9uSWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0
JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgpAQCAtNDYwLDE2ICs0NjAsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBwdXNoRmluYWxseUNvbnRleHQoU3RhdGVtZW50Tm9kZSogZmlu
YWxseUJsb2NrKTsKICAgICAgICAgdm9pZCBwb3BGaW5hbGx5Q29udGV4dCgpOwogCi0gICAgICAg
IHZvaWQgcHVzaE9wdGltaXNlZEZvckluKFJlZ2lzdGVySUQqIGV4cGVjdGVkU3Vic2NyaXB0LCBS
ZWdpc3RlcklEKiBpdGVyLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHlS
ZWdpc3RlcikKLSAgICAgICAgewotICAgICAgICAgICAgRm9ySW5Db250ZXh0IGNvbnRleHQgPSB7
IGV4cGVjdGVkU3Vic2NyaXB0LCBpdGVyLCBpbmRleCwgcHJvcGVydHlSZWdpc3RlciB9OwotICAg
ICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoY29udGV4dCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHBvcE9wdGltaXNlZEZvckluKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KKyAgICAgICAg
dm9pZCBwdXNoSW5kZXhlZEZvckluU2NvcGUoY29uc3QgSWRlbnRpZmllciogYm91bmRMb2NhbCwg
UmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKGNv
bnN0IElkZW50aWZpZXIqIGJvdW5kTG9jYWwpOwogCiAgICAgICAgIExhYmVsU2NvcGVQdHIgYnJl
YWtUYXJnZXQoY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBMYWJlbFNjb3BlUHRyIGNvbnRp
bnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKQEAgLTY2OCw3ICs2NjAsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0LCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV9zY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFN3aXRj
aEluZm8+IG1fc3dpdGNoQ29udGV4dFN0YWNrOwotICAgICAgICBWZWN0b3I8Rm9ySW5Db250ZXh0
PiBtX2ZvckluQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8VHJ5Q29udGV4dD4gbV90cnlD
b250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8UmVmUHRyPFJlZ2lzdGVySUQ+
LCBjb25zdCBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKj4+IG1fZGVjb25zdHJ1Y3RlZFBhcmFt
ZXRlcnM7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTIwLDEwMiArMTkyMCwxOTAgQEAgdm9pZCBGb3JOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9ySW5O
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIEZvckluTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcihCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgTGFiZWxTY29wZVB0
ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwotCi0g
ICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1lbnRMb2NhdGlvbigpKSB7Ci0gICAgICAgIGVtaXRU
aHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVt
ZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUo
KSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwotCi0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNpemUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4cGVjdGVk
U3Vic2NyaXB0OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyID0gZ2VuZXJhdG9yLmVtaXRH
ZXRQcm9wZXJ0eU5hbWVzKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgaS5n
ZXQoKSwgc2l6ZS5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgIGdlbmVyYXRvci5l
bWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICBSZWZQdHI8TGFiZWw+IGxv
b3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICBS
ZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWU7Ci0gICAgYm9vbCBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9
IGZhbHNlOwogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIp
LT5pZGVudGlmaWVyKCk7CiAgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlk
ZW50KTsKLSAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSkgewotICAgICAgICAgICAgcHJvcGVydHlO
YW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAgIGlmIChsb2NhbC5nZXQoKSkK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9k
ZSgpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNj
b3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBpZGVudCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dFB1dFRvU2NvcGUoc2NvcGUsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIGdlbmVyYXRvci5pc1N0cmlj
dE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZXhwZWN0ZWRTdWJzY3Jp
cHQuZ2V0KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGltaXNlZEZvckluKGV4
cGVjdGVkU3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdldCgpLCBsb2NhbC5nZXQoKSk7
Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7CiAgICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAobV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSkgewogICAg
ICAgICBEb3RBY2Nlc3Nvck5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nv
ck5vZGUqPihtX2xleHByKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBhc3Np
Z25Ob2RlLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9w
ZXJ0eU5hbWU7CiAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
YXNzaWduTm9kZS0+YmFzZSgpKTsKLQogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWdu
Tm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBp
ZGVudCwgcHJvcGVydHlOYW1lKTsKLSAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzQnJhY2tldEFj
Y2Vzc29yTm9kZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHIt
PmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUq
IGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7
Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CiAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJh
c2UoKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShhc3NpZ25Ob2RlLT5zdWJzY3JpcHQoKSk7Ci0gICAgICAgIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90
U3RhcnQoKSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlWYWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9u
Tm9kZSgpKSB7CiAgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqIGFzc2lnbk5v
ZGUgPSBzdGF0aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKj4obV9sZXhwcik7
CiAgICAgICAgIGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJpbmRpbmdzKCk7Ci0gICAgICAg
IGlmIChiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2ltcGxl
QmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7Ci0gICAgICAgICAg
ICBJZGVudGlmaWVyIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAg
ICAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICAg
ICAgcHJvcGVydHlOYW1lID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIEkgZW1pdCBleHByZXNzaW9uIGluZm8gaGVyZT8KLSAgICAgICAgICAgIGlmICghcHJvcGVy
dHlOYW1lIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSB8fCBnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNCaW5kaW5n
OwotICAgICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2VuZXJh
dG9yLnB1c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQo
KSwgaS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZvcmluQWNj
ZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gY29tcGxldGVkU2ltcGxlQmluZGluZzsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2VuZXJpY0JpbmRpbmc6Ci0gICAgICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvdGVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIWJpbmRpbmct
PmlzQmluZGluZ05vZGUoKSkgewogICAgICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3MoKS0+
YmluZFZhbHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBjb21wbGV0ZWRTaW1wbGVCaW5kaW5nOgotICAgICAgICA7CisK
KyAgICAgICAgYXV0byBzaW1wbGVCaW5kaW5nID0gc3RhdGljX2Nhc3Q8QmluZGluZ05vZGUqPihi
aW5kaW5nKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzaW1wbGVCaW5kaW5n
LT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2Fs
KGlkZW50KTsKKyAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSB8fCBsb2NhbC5pc0NhcHR1cmVkKCkp
IHsKKyAgICAgICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1ZShnZW5lcmF0
b3IsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1l
bnQpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBpZiAob3B0
aW1pemVkRm9yaW5BY2Nlc3MpCi0gICAgICAgIGdlbmVyYXRvci5wb3BPcHRpbWlzZWRGb3JJbigp
Owordm9pZCBGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKCFtX2xleHByLT5pc0Fz
c2lnbm1lbnRMb2NhdGlvbigpKSB7CisgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdl
bmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5j
ZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxMYWJlbD4gZW5kID0g
Z2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5leHRQcm9wZXJ0eU5hbWUocHJv
cGVydHlOYW1lLCBiYXNlLmdldCgpLCBpLmdldCgpLCBzaXplLmdldCgpLCBpdGVyLmdldCgpLCBs
b29wU3RhcnQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkp
OwotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworCisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGxlbmd0aDsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RydWN0
dXJlRW51bWVyYXRvcjsKKyAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9leHBy
KTsKKworICAgIC8vIEluZGV4ZWQgcHJvcGVydHkgbG9vcC4KKyAgICB7CisgICAgICAgIExhYmVs
U2NvcGVQdHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29w
KTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CisKKyAgICAgICAgbGVuZ3RoID0gZ2VuZXJhdG9yLmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
anNOdW1iZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOworCisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdEVxdWFsaXR5
T3Aob3BfbGVzcywgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpLmdldCgpLCBsZW5ndGguZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgbG9v
cEVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzSXRlcmFibGVQcm9wZXJ0eShy
ZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCksIGku
Z2V0KCkpOworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5
TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1l
bnQpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChl
bmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOwor
ICAgIH0KKworICAgIC8vIFN0cnVjdHVyZSBwcm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAg
TGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6
Okxvb3ApOworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKKworICAgICAgICBzdHJ1Y3R1cmVFbnVtZXJhdG9yID0gZ2VuZXJhdG9yLmVtaXRHZXRT
dHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNl
LmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExv
YWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShwcm9wZXJ0
eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2Vx
X251bGwsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQo
KSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BI
ZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIC8vIFRPRE86
IE9wdGltaXplIGZvci1pbgorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRl
bWVudCk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJn
ZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SW5jKGkuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwg
c3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0VW5hcnlPcChvcF9lcV9udWxsLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQu
Z2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KHJl
c3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAg
ICAgCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBHZW5lcmljIHByb3Bl
cnR5IGxvb3AuCisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4g
bG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4g
bG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBnZW5lcmljRW51bWVyYXRvciA9IGdlbmVyYXRvci5lbWl0R2V0R2VuZXJpY1Byb3BlcnR5
RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGxlbmd0aC5n
ZXQoKSwgc3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1l
cmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmljRW51bWVyYXRvci5n
ZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5l
cmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVz
dWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKwor
ICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQo
KSk7CisKKyAgICAgICAgLy8gVE9ETzogT3B0aW1pemUgZm9yLWluCisgICAgICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExh
YmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMo
aS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmljRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9lcV9udWxsLCByZXN1bHQuZ2V0KCks
IHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShy
ZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFz
RW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1l
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwg
bG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHNjb3BlLT5jb250
aW51ZVRhcmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2Nv
cGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKKyAgICB9CisK
KyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RM
aW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGVuZC5nZXQoKSk7Cit9CisKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIHRo
aXMtPmVtaXRNdWx0aUxvb3BCeXRlY29kZShnZW5lcmF0b3IsIGRzdCk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JPZk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzA4NjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NTMsMTMgKzE3NTMsNDMgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAotICAgIGNhc2UgSW46CisgICAgY2FzZSBJbjogewogICAgICAgICAvLyBGSVhNRTogV2Ug
Y2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBv
biBhYnN0cmFjdAogICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KICAgICAgICAgY2xvYmJl
cldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgICAgICAgICAgCisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFz
SXRlcmFibGVQcm9wZXJ0eTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51
bWVyYXRvcjogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTgzLDYgKzMxODMsNTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW4pOwogICAgICAgICB9CiAKKyAgICAgICAg
Y2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0
RW51bWVyYWJsZUxlbmd0aCwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEhhc0Vu
dW1lcmFibGVQcm9wZXJ0eSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpKTsKKyAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2Ugb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5OiB7CisgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlN
b2RlQ29uc2lkZXJpbmdTbG93UGF0aChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAg
ICBOb2RlKiBoYXNJdGVyYWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChIYXNJdGVyYWJsZVByb3Bl
cnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSwgaGFzSXRlcmFibGVQcm9wZXJ0eSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNf
aXRlcmFibGVfcHJvcGVydHkpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfc3Ry
dWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0U3Ry
dWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjog
eworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yLCAKKyAg
ICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZTogeworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
YWRkVG9HcmFwaChOZXh0RW51bWVyYXRvclBuYW1lLCAKKyAgICAgICAgICAgICAgICBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAg
ICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1l
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7CisgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLCBhZGRUb0dyYXBoKFRvSW5kZXhTdHJpbmcsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CisgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworICAgICAgICB9CisKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBzaG91bGQgbm90
IGhhcHBlbiBiZWNhdXNlIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tlcgogICAgICAgICAgICAgLy8g
c2hvdWxkIGhhdmUgY2F1Z2h0IGl0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMs
NiArMTkzLDEzIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAg
ICBjYXNlIG9wX3N3aXRjaF9jaGFyOgogICAgIGNhc2Ugb3BfaW46CiAgICAgY2FzZSBvcF9nZXRf
ZnJvbV9zY29wZToKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNl
IG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX2l0ZXJhYmxlX3By
b3BlcnR5OgorICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgor
ICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9w
X25leHRfZW51bWVyYXRvcl9wbmFtZToKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAg
ICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX3B1dF90b19z
Y29wZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDgxIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIE1ha2VSb3BlOgogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNl
IEhhc0VudW1lcmFibGVQcm9wZXJ0eToKKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51
bWVyYXRvcjoKKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2Fz
ZSBOZXh0RW51bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAg
ICAvLyBUT0RPOiBEbyB0aGUgcmlnaHQgdGhpbmcgZm9yIGVhY2ggb2YgdGhlc2Ugb3BzLgorICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FzZSBIYXNJdGVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIHJlYWQo
SlNDZWxsX2luZGV4aW5nVHlwZSk7CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsK
KyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjogeworICAgICAg
ICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0
b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsK
KyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJl
YWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9w
ZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4
ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3Js
ZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgewor
ICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAg
ICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFk
KEFycmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29y
bGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDog
eworICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2Fz
ZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFVwc2lsb246CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzA4NjAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4Nyw2ICsxODcsOSBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zm
c2V0OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3Ro
OgorICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgorICAgIGNhc2UgSGFzSXRlcmFibGVQ
cm9wZXJ0eToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0
aW9uOgpAQCAtMjA5LDYgKzIxMiwxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdUeXBl
ZEFycmF5OgogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICBjYXNlIEdldFN0cnVj
dHVyZVByb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3I6CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0
cmluZzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzMCw2ICsxMDMwLDQ3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgb2JzZXJ2ZVVzZUtpbmRPbk5vZGU8U3RyaW5nVXNlPihub2Rl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR2V0
RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eTogeworICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgSGFzSXRlcmFibGVQcm9wZXJ0eTogeworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2Rl
KAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnBy
ZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5j
aGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGZp
eEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAg
ICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6
IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAg
ICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9k
eSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNDcsNiArMTI0Nyw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAg
ICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2Fz
ZSBIYXNJdGVyYWJsZVByb3BlcnR5OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OCw2ICsy
ODgsMTUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIFdyaXRlIGJh
cnJpZXJzICEgKi9cCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIFwKKyAgICAvKiBGb3ItaW4gZW51bWVyYXRpb24gb3Bjb2RlcyAqL1wKKyAgICBtYWNy
byhHZXRFbnVtZXJhYmxlTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBc
CisgICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhIYXNJdGVyYWJsZVByb3BlcnR5LCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKKyAg
ICBtYWNybyhHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oTmV4dEVudW1lcmF0b3JQbmFtZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBt
b25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlz
IHVzZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vz
c2VkIHZpYSB0aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MCw2ICs1NTAsMzUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVh
bik7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5n
dGg6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
UHJvcGVydHk6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9v
bGVhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0l0
ZXJhYmxlUHJvcGVydHk6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzog
eworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8g
VGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KICAg
ICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw2
ICsyNTQsMTMgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAg
IGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBHZXRHZXR0ZXI6CiAgICAgY2FzZSBHZXRTZXR0ZXI6
CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2UgSGFzRW51bWVyYWJsZVBy
b3BlcnR5OgorICAgIGNhc2UgSGFzSXRlcmFibGVQcm9wZXJ0eToKKyAgICBjYXNlIEdldFN0cnVj
dHVyZVByb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3I6CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0
cmluZzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIE5hdGl2ZUNhbGw6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1ODIsNiArNDU4MiwzNSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICBjb21waWxl
R2V0RW51bWVyYWJsZUxlbmd0aChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxl
UHJvcGVydHkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0l0ZXJh
YmxlUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUhhc0l0ZXJhYmxlUHJvcGVydHkobm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51
bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9y
KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVy
dHlFbnVtZXJhdG9yOiB7CisgICAgICAgIGNvbXBpbGVHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOZXh0RW51bWVyYXRv
clBuYW1lOiB7CisgICAgICAgIGNvbXBpbGVOZXh0RW51bWVyYXRvclBuYW1lKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgIGNv
bXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICNpZiBF
TkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTMwLDYgKzU1MzAsMTM3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKIH0KICNlbmRpZiAvLyBFTkFCTEUo
R0dDKQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChO
b2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVuZ3RoLCByZXN1bHRHUFIsIGJhc2UuZ3By
KCkpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNJbnQz
Mik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVy
dHkoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0R1BSLCBiYXNlLmdw
cigpLCBwcm9wZXJ0eS5ncHIoKSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUs
IERhdGFGb3JtYXRKU0Jvb2xlYW4pOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SGFzSXRlcmFibGVQcm9wZXJ0eShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKworICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgaW5kZXhH
UFIgPSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBBcnJheU1vZGUg
bW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAg
ICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7
CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdEdQUik7Cisg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJy
YXk6OkRvdWJsZTogeworICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBG
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBz
Y3JhdGNoLmZwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7
CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRjaEZQUik7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkLCBzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQVNT
RVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdl
LmdwcigpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGlu
ZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgbW92ZVRydWVU
byhyZXN1bHRHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CisKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25IYXNJdGVyYWJsZVByb3BlcnR5LCByZXN1bHRHUFIsIGJhc2VHUFIsIGlu
ZGV4R1BSKSk7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5v
ZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvciwgcmVzdWx0R1BSLCBiYXNl
LmdwcigpKTsKKyAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5v
ZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGls
ZDMoKSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgYmFz
ZS5ncHIoKSwgbGVuZ3RoLmdwcigpLCBlbnVtZXJhdG9yLmdwcigpKTsKKyAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXh0
RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
ZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlSW50MzJPcGVy
YW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRo
aXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBmbHVzaFJl
Z2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFt
ZSwgcmVzdWx0R1BSLCBlbnVtZXJhdG9yLmdwcigpLCBpbmRleC5ncHIoKSk7CisgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVG9JbmRleFN0cmluZyhOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHJlc3Vs
dEdQUiwgaW5kZXguZ3ByKCkpOworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE3MDg2MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAxLDYgKzMwMSwxNCBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2b2lkIGNv
bXBpbGVTdG9yZUJhcnJpZXIoTm9kZSopOwogCisgICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJs
ZUxlbmd0aChOb2RlKik7CisgICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVIYXNJdGVyYWJsZVByb3BlcnR5KE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZU5leHRFbnVtZXJhdG9yUG5hbWUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVRvSW5k
ZXhTdHJpbmcoTm9kZSopOworCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQ
UlJlZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxp
ZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2
ZTQgPSBJbnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIEFzc2VtYmx5SGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUihwcmVzZXJ2ZTEsIHByZXNlcnZlMiwgcHJlc2VydmUzLCBwcmVz
ZXJ2ZTQpOwpAQCAtMTI0OCw2ICsxMjU2LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUNaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgYXJnMSwgY29uc3Qg
U3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBhcmcxLCBUcnVzdGVkSW1tUHRyKHVp
ZCkpOwpAQCAtMTI2Myw2ICsxMjc2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpD
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTMx
MSw2ICsxMzM0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKQyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgewor
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJn
Myk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSlpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklU
T3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNiArMzAzLDE0IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX3Jlc29sdmVf
c2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICAgICAgICAgREVG
SU5FX09QKG9wX3B1dF90b19zY29wZSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoKQorICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfaXRlcmFibGVfcHJvcGVydHkpCisgICAgICAg
IERFRklORV9PUChvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgICAg
IERFRklORV9PUChvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgICAgICBE
RUZJTkVfT1Aob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKQorICAgICAgICBERUZJTkVfT1Aob3Bf
dG9faW5kZXhfc3RyaW5nKQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtNDIwLDYgKzQyOCw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9zdWIpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF90b19udW1iZXIpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF90b19wcmltaXRpdmUpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9oYXNfaXRlcmFibGVfcHJvcGVydHkpCiAKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX3Jlc29sdmVfc2NvcGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9nZXRfZnJvbV9zY29wZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
MTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjI3LDYgKzIyNywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZVB1dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2Rl
KTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJdGVyYWJsZVBy
b3BlcnR5KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAgICAg
ICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAg
ICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0l0ZXJhYmxlUHJvcGVydHkoYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGlj
IENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5j
KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewpAQCAtMjU2
LDYgKzI2Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
R2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJl
c3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUhhc0l0
ZXJhYmxlUHJvcGVydHkoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2Rl
KTsKKwogICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qLCBib29s
IGlzQ29uc3RydWN0ID0gZmFsc2UpOwogICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJ
TmF0aXZlQ2FsbChWTSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsK
QEAgLTMzNiw2ICszNDUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFByb3BlcnR5
IGlzIGludC1jaGVja2VkIGFuZCB6ZXJvIGV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4K
ICAgICAgICAgLy8gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuIFJldHVybnMgdGhlIHNs
b3cgY2FzZXMuIEZhbGwtdGhyb3VnaAogICAgICAgICAvLyBjYXNlIGNvbnRhaW5zIHJlc3VsdCBp
biByZWdUMCwgYW5kIGl0IGlzIG5vdCB5ZXQgcHJvZmlsZWQuCisgICAgICAgIEp1bXBMaXN0IGVt
aXRJbnQzMkxvYWQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKSB7IHJldHVybiBlbWl0Q29udGlndW91c0xvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIElu
dDMyU2hhcGUpOyB9CisgICAgICAgIEp1bXBMaXN0IGVtaXREb3VibGVMb2FkKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1
b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlw
ZSBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1p
dEFycmF5U3RvcmFnZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsK
KwogICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpIHsgcmV0dXJuIGVtaXRDb250aWd1b3VzR2V0
QnlWYWwoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIEludDMyU2hhcGUpOyB9CiAgICAgICAgIEp1bXBM
aXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBD
b250aWd1b3VzU2hhcGUpOwpAQCAtNTQ5LDYgKzU2MywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3VuZXhwZWN0ZWRfbG9hZChJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX3Vyc2hpZnQoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX2Vu
dW1lcmFibGVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2hh
c19pdGVyYWJsZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3Bf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiop
OwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2JpdGFu
ZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYw
Miw2ICs2MjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dXJzaGlmdChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaXRlcmFibGVfcHJvcGVydHkoSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAgdm9pZCBl
bWl0X29wX3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDI0IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6
ZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9hZChp
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVnVDAp
OworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgIHJldHVybiBz
bG93Q2FzZXM7Cit9CisKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0
Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCit7CisgICAgcmV0dXJuIGVt
aXRDb250aWd1b3VzTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgZXhwZWN0ZWRTaGFwZSk7Cit9
CisKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KQoreworICAgIHJldHVybiBlbWl0QXJyYXlTdG9yYWdlTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlRG91YmxlKGludCBzcmMpCiB7CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1
ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCkBAIC0x
MjEwLDYgKzEyMTEsMTg4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJlZF9tb3YoSW5z
dHIKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHkoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2hhc19lbnVtZXJhYmxl
X3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVIYXNJdGVyYWJsZVByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7Cisg
ICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVEludDMyOgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50MzJMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSklURG91YmxlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91
YmxlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3Vz
TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFn
ZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxp
a2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworCisgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwg
dGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwg
Q29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93
Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJv
bUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQo
YnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGhhc19pdGVyYWJsZV9wcm9wZXJ0eSBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCBy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24o
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSXRlcmFibGVQcm9wZXJ0eUdl
bmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOworCisgICAgLy8gVGhpcyBpcyB0ZWNobmlj
YWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhv
dCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCisgICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFz
IGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdp
bGwgYWx3YXlzIGZhaWwgaWYKKyAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rv
ckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9j
YXRpb24KKyAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJv
IGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1
ZQorICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUg
YWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgorICAg
IC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1
ZSBpbiB0aGUgc2xvdyBjYXNlLgorICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7
CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKKworICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEpJVEludDMyOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJM
b2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSklURG91YmxlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9hZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVENvbnRp
Z3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzTG9hZChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3Rv
cmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUxvYWQoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworCisgICAg
YWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAK
KyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwor
ICAgIAorICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNl
bGwgY2hlY2sKKyAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CisgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCisgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hTdHJ1
Y3R1cmUoTm90RXF1YWwsIAorICAgICAgICBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCAKKyAgICAgICAgbV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAg
ICBicmVha3BvaW50KCk7CisvKgorICAgIFRPRE86IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBmb3Ig
c3RyaW5ncy4KKyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsKG1fdm0tPmdldENU
SVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAgICBKdW1wIGZh
aWxlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2J5X3ZhbCkpOworICAgIGZhaWxlZC5saW5rKHRoaXMpOworKi8KKyAgICBu
b3RTdHJpbmcubGluayh0aGlzKTsKKyAgICBub25DZWxsLmxpbmsodGhpcyk7CisgICAgCisgICAg
SnVtcCBza2lwUHJvZmlsaW5nID0ganVtcCgpOworICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1w
dHkgdmFsdWUKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2Fz
ZShwcm9maWxlKTsKKyAgICAKKyAgICBza2lwUHJvZmlsaW5nLmxpbmsodGhpcyk7CisgICAgCisg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAgIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0l0ZXJh
YmxlUHJvcGVydHlEZWZhdWx0LCBkc3QsIHJlZ1QwLCByZWdUMSk7CisKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNs
b3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRv
cihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2Fs
bCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X3N0
cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZ2VuZXJp
Y19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSk7Cisg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhf
c3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90
b19pbmRleF9zdHJpbmcpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJKU05hbWVTY29wZS5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0YWNrSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCkBAIC0xNTAyLDYgKzE1MDMsNjQgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KICAgICAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSGFzSXRlcmFibGVQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgCisgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVj
dCgpKTsKKyAgICBBU1NFUlQoc3Vic2NyaXB0LmlzVUludDMyKCkpOworCisgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZh
bHNlOworCisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGVjLT5sb2NhdGlvbkFzQnl0
ZWNvZGVPZmZzZXQoKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgIEJ5VmFsSW5m
byYgYnlWYWxJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhieXRlY29kZU9m
ZnNldCAtIDEpOworICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAKKyAg
ICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7Cisg
ICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsK
KyAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAg
ICAgICBKSVQ6OmNvbXBpbGVIYXNJdGVyYWJsZVByb3BlcnR5KCZ2bSwgZXhlYy0+Y29kZUJsb2Nr
KCksICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJy
YXlNb2RlKTsKKyAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBpZiAoIWRpZE9wdGltaXplKSB7CisgICAgICAgIC8vIElmIHdlIHRha2Ug
c2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBz
dXJlIHdlCisgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBPciwgaWYg
d2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0CisgICAgICAgIC8vIHRo
YXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAg
dGltZXMuIEZvciBjYXNlcworICAgICAgICAvLyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVy
Y2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29ydGggb2YKKyAgICAg
ICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBt
YXkgYmUgcG9seW1vcnBoaWMuCisgICAgICAgIGlmICgrK2J5VmFsSW5mby5zbG93UGF0aENvdW50
ID49IDEwCisgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCku
aW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVy
bygpKSB7CisgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAg
ICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihleGVjLT5jb2RlQmxvY2soKSk7Cisg
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24oUmV0dXJuQWRk
cmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJdGVy
YWJsZVByb3BlcnR5R2VuZXJpYykpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgc3Vi
c2NyaXB0LmFzVUludDMyKCkpKSk7Cit9CisgICAgCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHlHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIAorICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSk7CisgICAgQVNTRVJUKHN1YnNjcmlwdC5pc1VJbnQzMigpKTsKKworICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LmFzVUludDMy
KCkpKSk7Cit9CisgICAgCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKQEAgLTE4MDIsNiArMTg2MSw5NSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Vk1IYW5kbGVFeGNlCiAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgdm0tPmV4Y2VwdGlvbigp
KTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRFbnVtZXJh
YmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpOworCisg
ICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcihiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEVudW1l
cmFibGVMZW5ndGgodm0sIGJhc2UpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSGFzRW51bWVyYWJsZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgYmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBKU09iamVjdCogYmFzZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLnRvT2Jq
ZWN0KGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UtPmhh
c1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5TmFtZSktPnRvSWRlbnRpZmllcihleGVj
KSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJdGVy
YWJsZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IGludDMyX3Qgc3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICAKKyAgICBBU1NFUlQoYmFz
ZVZhbHVlLmlzT2JqZWN0KCkpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQpKSk7Cit9CisgICAgCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVl
KTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVy
biBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisgICAgICAgIAorICAgIEpT
T2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5jYWNoZWRQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKCkpCisgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOworCisgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdl
dFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVk
ZURvbnRFbnVtUHJvcGVydGllcyk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgcHJvcGVydHlO
YW1lcyk7CisgICAgaWYgKHN0cnVjdHVyZS0+Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KCkpCisgICAgICAgIHN0cnVjdHVyZS0+c2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcih2
bSwgZW51bWVyYXRvcik7CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgaW50MzJfdCBsZW5ndGgs
IEpTQ2VsbCogZW51bWVyYXRvcikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBpZiAoYmFzZVZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFs
dWUudG9PYmplY3QoZXhlYyk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBzdHJ1Y3R1
cmVFbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGVudW1lcmF0
b3IpOworCisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKKyAgICBw
cm9wZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKGxlbmd0aCk7CisgICAg
cHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoc3RydWN0dXJl
RW51bWVyYXRvcik7CisgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRHZW5lcmljUHJvcGVy
dHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKTsKKyAgICAKKyAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUo
dm0sIHByb3BlcnR5TmFtZXMpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5leHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGVudW1l
cmF0b3JDZWxsLCBpbnQzMl90IGluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqPihlbnVtZXJhdG9yQ2VsbCk7CisgICAgY29uc3QgSWRlbnRpZmllciogcHJvcGVydHlO
YW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShwcm9wZXJ0eU5hbWUgPyBqc1N0cmluZyhleGVjLCBwcm9wZXJ0eU5h
bWUtPnN0cmluZygpKSA6IGpzTnVsbCgpKTsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGluZGV4KQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9t
KGV4ZWMsIGluZGV4KS5zdHJpbmcoKSk7Cit9CisKIH0gLy8gZXh0ZXJuICJDIgogCiAvLyBOb3Rl
OiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJlIHBsYWNl
ZCBiZWZvcmUgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMyBAQCB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpT
Q2VsbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRUNJKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0opKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50
MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUUpKEV4ZWNTdGF0ZSosIEV4
ZWNTdGF0ZSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJ
VE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5
cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKQyko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwogdHlwZWRlZiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgSlNBcnJheSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUpJZGMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBj
b25zdCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSk7CkBAIC0xMjEsNiArMTI0LDggQEAgdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gKCpDX0pJVE9wZQogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxpbmVD
YWxsRnJhbWUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRp
b25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpaQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIGludDMyX3QsIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpD
X0pJVE9wZXJhdGlvbl9FSkpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUsIEpTQ2VsbCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZXJhdGlvbl9FSnNzU3QpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CiB0eXBl
ZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3MpKEV4ZWNT
dGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc0pzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBK
U1N0cmluZyosIEpTU3RyaW5nKik7CkBAIC0yNzcsNiArMjgyLDggQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeVZhbERlZmF1bHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHlEZWZh
dWx0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHlHZW5lcmljKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
KSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFjdGl2
YXRpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25E
ZWxldGVCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGJhc2UsIGNvbnN0IElkZW50aWZp
ZXIqKSBXVEZfSU5URVJOQUw7CkBAIC0zMDAsNiArMzA3LDE0IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbklu
aXRHbG9iYWxDb25zdChFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiopOwogCitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUpOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25I
YXNFbnVtZXJhYmxlUHJvcGVydHkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCop
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJdGVyYWJsZVByb3Bl
cnR5KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEdl
bmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QsIEpTQ2VsbCopOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXh0
RW51bWVyYXRvclBuYW1lKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7
CisKIH0gLy8gZXh0ZXJuICJDIgogCiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRp
b25MaW5rRm9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVP
ZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCitK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAgLTE2MCwx
MyArMTYwLDExIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW4KICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICBsb2FkRG91
YmxlKEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBm
cFJlZ1QwLCBmcFJlZ1QwKSk7Ci0gICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVnVDApOwot
ICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOwogICAgIAogICAgIHJldHVy
biBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4
cGVjdGVkU2hhcGUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hh
cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIApAQCAtMTc5LDcgKzE3Nyw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmEKICAgICByZXR1cm4gc2xv
d0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAx
NzA4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEyMTAsNiArMTIxMCw0MCBAQCBfbGxpbnRfbmF0aXZl
X2NhbGxfdHJhbXBvbGluZToKIF9sbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAg
ICAgbmF0aXZlQ2FsbFRyYW1wb2xpbmUoTmF0aXZlRXhlY3V0YWJsZTo6bV9jb25zdHJ1Y3RvcikK
IAorX2xsaW50X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICB0cmFjZUV4ZWN1dGlvbigp
CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorICAg
IGRpc3BhdGNoKDMpCisKK19sbGludF9vcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eToKKyAgICB0
cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfaGFzX2VudW1lcmFi
bGVfcHJvcGVydHkpCisgICAgZGlzcGF0Y2goNCkKKworX2xsaW50X29wX2hhc19pdGVyYWJsZV9w
cm9wZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3Bh
dGhfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KQorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9vcF9n
ZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgdHJhY2VFeGVjdXRpb24oKQor
ICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVy
YXRvcikKKyAgICBkaXNwYXRjaCgzKQorCitfbGxpbnRfb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlf
ZW51bWVyYXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcikKKyAgICBkaXNwYXRjaCg1KQor
CitfbGxpbnRfb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpCisgICAg
ZGlzcGF0Y2goNCkKKworX2xsaW50X29wX3RvX2luZGV4X3N0cmluZzoKKyAgICB0cmFjZUV4ZWN1
dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQorICAg
IGRpc3BhdGNoKDMpCiAKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVu
IHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNo
b3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2Vy
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTcwODYw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjgwLDYgKzEyODAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZvckluTm9k
ZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUq
LCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUqKTsKIAogICAgIHByaXZhdGU6CisgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXJGb3JCb3VuZExvY2FsKEJ5dGVjb2RlR2Vu
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdExvb3BIZWFkZXIoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOworICAgICAgICB2b2lkIGVtaXRNdWx0aUxvb3BC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIGRzdCk7CisKICAgICAgICAg
dmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
MTIgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0
eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBn
ZXRQcm9wZXJ0eU5hbWVzOwogCisgICAgdHlwZWRlZiB1aW50MzJfdCAoKkdldEVudW1lcmFibGVM
ZW5ndGhGdW5jdGlvblB0cikoVk0mLCBKU09iamVjdCopOworICAgIEdldEVudW1lcmFibGVMZW5n
dGhGdW5jdGlvblB0ciBnZXRFbnVtZXJhYmxlTGVuZ3RoOworCisgICAgR2V0UHJvcGVydHlOYW1l
c0Z1bmN0aW9uUHRyIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXM7CisgICAgR2V0UHJvcGVydHlO
YW1lc0Z1bmN0aW9uUHRyIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzOworCiAgICAgdHlwZWRlZiBT
dHJpbmcgKCpDbGFzc05hbWVGdW5jdGlvblB0cikoY29uc3QgSlNPYmplY3QqKTsKICAgICBDbGFz
c05hbWVGdW5jdGlvblB0ciBjbGFzc05hbWU7CiAKQEAgLTEzNyw2ICsxNDMsOSBAQCBzdHJ1Y3Qg
TWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBc
CiAgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgXAogICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6
OmdldEVudW1lcmFibGVMZW5ndGgsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0U3RydWN0dXJl
UHJvcGVydHlOYW1lcywgXAorICAgICAgICAmQ2xhc3NOYW1lOjpnZXRHZW5lcmljUHJvcGVydHlO
YW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNz
TmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3du
UHJvcGVydHksIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NiArNDQsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKQEAg
LTU0Miw2ICs1NDMsOTcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVyKQogICAgIEVO
RCgpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVl
KCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBSRVRV
Uk4oanNOdW1iZXIoMCkpOworCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmpl
Y3QoZXhlYyk7CisgICAgUkVUVVJOKGpzTnVtYmVyKGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
RW51bWVyYWJsZUxlbmd0aCh2bSwgYmFzZSkpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQoreworICAgIEJFR0lOKCk7CisgICAgSlNPYmpl
Y3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNWYWx1ZSBw
cm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBib29sIHJlc3VsdDsKKyAgICBpZiAocHJv
cGVydHkuaXNTdHJpbmcoKSkKKyAgICAgICAgcmVzdWx0ID0gYmFzZS0+aGFzUHJvcGVydHkoZXhl
YywgYXNTdHJpbmcocHJvcGVydHkuYXNDZWxsKCkpLT50b0lkZW50aWZpZXIoZXhlYykpOworICAg
IGVsc2UgeworICAgICAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzIoKSk7CisgICAgICAgIHJl
c3VsdCA9IGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5LmFzVUludDMyKCkpOworICAg
IH0KKyAgICBSRVRVUk4oanNCb29sZWFuKHJlc3VsdCkpOworfQorCitTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KQoreworICAgIEJFR0lOKCk7CisgICAgSlNP
YmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNWYWx1
ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBwY1s0XS51LmFycmF5UHJvZmlsZS0+
b2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5zdHJ1Y3R1cmUodm0pKTsKKyAgICBBU1NFUlQocHJvcGVy
dHkuaXNVSW50MzIoKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eShl
eGVjLCBwcm9wZXJ0eS5hc1VJbnQzMigpKSkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKQoreworICAgIEJFR0lOKCk7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjcmVhdGUodm0pKTsKKyAgICAgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNl
VmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5z
dHJ1Y3R1cmUodm0pOworICAgIGlmIChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0
b3IgPSBzdHJ1Y3R1cmUtPmNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAg
UkVUVVJOKGVudW1lcmF0b3IpOworCisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cyhleGVjKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
cyk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgcHJvcGVydHlOYW1lcyk7CisgICAgaWYgKHN0
cnVjdHVyZS0+Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHN0cnVj
dHVyZS0+c2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7Cisg
ICAgUkVUVVJOKGVudW1lcmF0b3IpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0
X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcikKK3sKKyAgICBCRUdJTigpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y3JlYXRlKHZtKSk7CisgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmpl
Y3QoZXhlYyk7CisgICAgdWludDMyX3QgZW51bWVyYXRlZExlbmd0aCA9IE9QKDMpLmpzVmFsdWUo
KS5hc1VJbnQzMigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogc3RydWN0dXJlRW51
bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihPUCg0KS5qc1ZhbHVl
KCkuYXNDZWxsKCkpOworCisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVj
KTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKGVudW1l
cmF0ZWRMZW5ndGgpOworICAgIHByb3BlcnR5TmFtZXMuc2V0UHJldmlvdXNseUVudW1lcmF0ZWRQ
cm9wZXJ0aWVzKHN0cnVjdHVyZUVudW1lcmF0b3IpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhj
bHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgCisgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBwcm9wZXJ0eU5hbWVzKSk7Cit9CisKK1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpCit7CisgICAgQkVHSU4oKTsKKyAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oT1AoMikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICB1aW50MzJf
dCBpbmRleCA9IE9QKDMpLmpzVmFsdWUoKS5hc1VJbnQzMigpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIHByb3BlcnR5TmFtZSA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgp
OworICAgIFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBqc1N0cmluZyhleGVjLCBwcm9wZXJ0eU5hbWUt
PnN0cmluZygpKSA6IGpzTnVsbCgpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rv
X2luZGV4X3N0cmluZykKK3sKKyAgICBCRUdJTigpOworICAgIFJFVFVSTihqc1N0cmluZyhleGVj
LCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIE9QKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJp
bmcoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
IHx8IEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2
LDYgKzIyNiwxMyBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKIFNMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3RvX3ByaW1pdGl2ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19lbnVt
ZXJhYmxlX3Byb3BlcnR5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGFzX2l0
ZXJhYmxlX3Byb3BlcnR5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X3N0
cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CitTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSk7CitTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9u
IDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw0ICsyMzYsMTkgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IEpTQ2VsbDo6Z2V0VAogICAgIHJldHVybiAwOwogfQogCit1aW50MzJfdCBKU0NlbGw6Omdl
dEVudW1lcmFibGVMZW5ndGgoVk0mLCBKU09iamVjdCopCit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpT
Q2VsbDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIw
OSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoVk0m
LCBKU09iamVjdCopOworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0
U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCiAgICAgc3RhdGljIFN0cmlu
ZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBjdXN0b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUp
OwogICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4NCw2ICsxMjg0LDEyIEBAIGJvb2wgSlNPYmpl
Y3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09i
amVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90
KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAorYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7
CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoY29uc3RfY2FzdDxKU09iamVjdCo+
KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCiBib29sIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGkpCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKQEAgLTE0ODAsNyArMTQ4Niw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmoKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7
ICsraSkgewogICAgICAgICAgICAgaWYgKCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
aSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ5Miw3ICsxNDk4LDcg
QEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICAgICAg
ZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAg
ICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTE1MDMsNyArMTUwOSw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmoKICAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6
bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3RvcltpXSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFNw
YXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CkBA
IC0xNTE4LDcgKzE1MjQsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqCiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtl
eXMuZW5kKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
a2V5c1tpXSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjY1Miw0ICsy
NjU4LDg0IEBAIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMKICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgbWVzc2FnZSkpOwogfQogCit1aW50MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0
aChWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKHN0cnVjdHVyZS0+aG9sZXNNdXN0Rm9y
d2FyZFRvUHJvdG90eXBlKHZtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3dpdGNoIChvYmpl
Y3QtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CisgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgCisgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG9iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5n
dGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB1c2VkTGVuZ3RoOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
b2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1c2Vk
TGVuZ3RoOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNl
TWFwLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3Rv
cltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdXNlZFZlY3Rvckxlbmd0aDsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKwordm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUo
dm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmlj
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisKKyAgICBp
ZiAob2JqZWN0LT5wcm90b3R5cGUoKS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KG9iamVjdC0+cHJvdG90eXBlKCkpOworICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKSB7CisgICAgICAgICAgICBwcm90
b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJv
dG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgSlNWYWx1ZSBuZXh0
UHJvdG8gPSBwcm90b3R5cGUtPnByb3RvdHlwZSgpOworICAgICAgICBpZiAobmV4dFByb3RvLmlz
TnVsbCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHByb3RvdHlwZSA9IGFzT2JqZWN0
KG5leHRQcm90byk7CisgICAgfQorfQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzA4NjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NjIsNiArNDYyLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
aGFzUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpIGNvbnN0OworICAgIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKQEAgLTQ3NSw2ICs0NzYsMTAgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVy
YXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVu
dW1lcmFibGVMZW5ndGgoVk0mLCBKU09iamVjdCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKICAgICBKU1Zh
bHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1By
ZWZlcmVuY2UpIGNvbnN0OwogICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSos
IGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
ZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cm9u
Z0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OnNfaW5mbyA9IHsgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvciIs
IDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKSB9
OworCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBpZiAoIXZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRv
ci5nZXQoKSkgeworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSk7
CisgICAgICAgIHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvciA9IFN0cm9uZzxKU0NlbGw+
KHZtLCBjcmVhdGUodm0sIHByb3BlcnR5TmFtZXMpKTsKKyAgICB9CisgICAgcmV0dXJuIGpzQ2Fz
dDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPih2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0
b3IuZ2V0KCkpOworfQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y3JlYXRlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMpCit7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yPih2bS5oZWFwKSkg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSk7CisgICAg
ZW51bWVyYXRvci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJldHVybiBlbnVtZXJhdG9yOwor
fQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihW
TSYgdm0sIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBpZGVudGlmaWVycykKKyAg
ICA6IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5nZXQoKSkK
KyAgICAsIG1faWRlbnRpZmllcnMoaWRlbnRpZmllcnMpCit7Cit9CisKK3ZvaWQgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCktPkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
fkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
X2gKKyNkZWZpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKKworI2luY2x1ZGUgIkpTQ2Vs
bC5oIgorI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiU3RydWN0dXJl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJZGVudGlmaWVyOworCitjbGFzcyBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
Y3JlYXRlKFZNJik7CisgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY3JlYXRl
KFZNJiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRz
RGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3Ry
dWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CisKKyAgICBjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWVBdEluZGV4
KHVpbnQzMl90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IG1faWRl
bnRpZmllcnMtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gJm1faWRlbnRpZmllcnMtPnByb3BlcnR5TmFtZVZl
Y3RvcigpW2luZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgUGFzc1JlZlB0cjxQ
cm9wZXJ0eU5hbWVBcnJheURhdGE+KTsKKyAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRh
PiBtX2lkZW50aWZpZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDEy
IEBAIHZvaWQgSlNQcm94eTo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCoKICAgICB0aGlzT2Jq
ZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCit2
b2lkIEpTUHJveHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQoreworICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94
eSo+KG9iamVjdCk7CisgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMt
PnZtKCkpLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKIHZvaWQgSlNQcm94eTo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU1Byb3h5
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2
ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCShyZXZpc2lv
biAxNzA4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDMzICsyMywzNCBAQAogCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlQ2hhaW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBzaXplX3Qg
c2V0VGhyZXNob2xkID0gMjA7Ci0KIHZvaWQgUHJvcGVydHlOYW1lQXJyYXk6OmFkZChTdHJpbmdJ
bXBsKiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaWRlbnRpZmllciB8fCBpZGVudGlmaWVy
ID09IFN0cmluZ0ltcGw6OmVtcHR5KCkgfHwgaWRlbnRpZmllci0+aXNBdG9taWMoKSk7Ci0KLSAg
ICBzaXplX3Qgc2l6ZSA9IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpOwotICAg
IGlmIChzaXplIDwgc2V0VGhyZXNob2xkKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2RhdGEtPnBy
b3BlcnR5TmFtZVZlY3RvcigpW2ldLmltcGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9zZXQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAg
ICAgICBtX3NldC5hZGQobV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXS5pbXBsKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICghbV9zZXQuYWRkKGlkZW50aWZpZXIpLmlzTmV3RW50cnkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAg
ICAgdWludDMyX3QgaW5kZXggPSBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlm
aWVyKSkuYXNJbmRleCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCBpbmRleCA9PSBQ
cm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXggfHwgaW5kZXggPj0gbV9wcmV2aW91c2x5RW51bWVyYXRl
ZExlbmd0aCk7CiAgICAgfQogCisgICAgaWYgKCFtX3NldC5hZGQoaWRlbnRpZmllcikuaXNOZXdF
bnRyeSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYWRkS25vd25VbmlxdWUoaWRlbnRpZmllcik7
CiB9CiAKK3ZvaWQgUHJvcGVydHlOYW1lQXJyYXk6OnNldFByZXZpb3VzbHlFbnVtZXJhdGVkUHJv
cGVydGllcyhjb25zdCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7Cisg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgOyArK2kpIHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnRpZmllciA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaSk7CisgICAg
ICAgIGlmICghaWRlbnRpZmllcikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3NldC5h
ZGQoaWRlbnRpZmllci0+aW1wbCgpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVB
cnJheS5oCShyZXZpc2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogICAgIAorICAgIGNsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjsKICAgICBjbGFzcyBTdHJ1Y3R1cmU7CiAgICAgY2xhc3MgU3RydWN0dXJlQ2hhaW47CiAKQEAg
LTU2LDYgKzU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1fdm0odm0pCiAg
ICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAgICwgbV9iYXNl
T2JqZWN0KDApCisgICAgICAgICAgICAsIG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgoMCkK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTY0LDExICs2NiwxOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgICwgbV92bSgmZXhlYy0+dm0oKSkKICAgICAgICAgICAgICwgbV9udW1D
YWNoZWFibGVTbG90cygwKQogICAgICAgICAgICAgLCBtX2Jhc2VPYmplY3QoMCkKKyAgICAgICAg
ICAgICwgbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCgwKQogICAgICAgICB7CiAgICAgICAg
IH0KIAogICAgICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKKyAgICAgICAgdm9pZCBh
ZGQodWludDMyX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IG1f
cHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgYWRkKElkZW50aWZpZXI6OmZyb20obV92bSwgaW5kZXgpKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHZvaWQgYWRkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpIHsgYWRkKGlk
ZW50aWZpZXIuaW1wbCgpKTsgfQogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZChT
dHJpbmdJbXBsKik7CiAgICAgICAgIHZvaWQgYWRkS25vd25VbmlxdWUoU3RyaW5nSW1wbCogaWRl
bnRpZmllcikgeyBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmFwcGVuZChJZGVudGlmaWVy
KG1fdm0sIGlkZW50aWZpZXIpKTsgfQpAQCAtODEsNiArOTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgUGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IHJlbGVhc2VEYXRhKCkg
eyByZXR1cm4gbV9kYXRhLnJlbGVhc2UoKTsgfQogCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlc2UgZnVuY3Rpb25zLgorICAgICAgICBib29sIGNhbkFkZEtub3duVW5pcXVlRm9yU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gIW1fc2V0LnNpemUoKTsgfQogICAgICAgICB0eXBlZGVmIFBy
b3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNpemUoKTsgfQogICAgICAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYmVn
aW4oKTsgfQpAQCAtMTAwLDYgKzExMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
bV9iYXNlT2JqZWN0ID0gb2JqZWN0OwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBzZXRQcmV2
aW91c2x5RW51bWVyYXRlZExlbmd0aCh1aW50MzJfdCBsZW5ndGgpIHsgbV9wcmV2aW91c2x5RW51
bWVyYXRlZExlbmd0aCA9IGxlbmd0aDsgfQorICAgICAgICB2b2lkIHNldFByZXZpb3VzbHlFbnVt
ZXJhdGVkUHJvcGVydGllcyhjb25zdCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsKKwogICAg
IHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmdJbXBsKiwgUHRySGFzaDxT
dHJpbmdJbXBsKj4+IElkZW50aWZpZXJTZXQ7CiAKQEAgLTEwOCw2ICsxMjIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgVk0qIG1fdm07CiAgICAgICAgIHNpemVfdCBtX251bUNhY2hlYWJs
ZVNsb3RzOwogICAgICAgICBKU09iamVjdCogbV9iYXNlT2JqZWN0OworICAgICAgICB1aW50MzJf
dCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDEzIEBAIHZv
aWQgUmVnRXhwT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2IKICAgICBCYXNlOjpnZXRQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK3ZvaWQg
UmVnRXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFz
dEluZGV4KTsKKyAgICBCYXNlOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCiBzdGF0aWMgYm9vbCByZWplY3QoRXhlY1N0YXRl
KiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAg
IGlmICh0aHJvd0V4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxNzA4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRH
ZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAg
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUg
IkR1bXBDb250ZXh0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIK
QEAgLTk1Niw3ICs5NTYsNyBAQCB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21T
dHJ1CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJv
b2wga25vd25VbmlxdWUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7CisgICAgYm9vbCBrbm93blVu
aXF1ZSA9IHByb3BlcnR5TmFtZXMuY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKTsKIAog
ICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7
CiAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgp
LT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC0xMjIzLDQgKzEyMjMsMzAgQEAg
Ym9vbCBDbGFzc0luZm86Omhhc1N0YXRpY1NldHRlck9yUmVhZG9ubAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3Io
Vk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgaWYg
KCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICByYXJl
RGF0YSgpLT5zZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBlbnVtZXJhdG9yKTsK
K30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmU6OmNhY2hlZFByb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPmNhY2hlZFByb3BlcnR5
TmFtZUVudW1lcmF0b3IoKTsKK30KKworYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlUHJvcGVydHlO
YW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzRGljdGlvbmFyeSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUT0RPOiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRo
aXMgc2luY2Ugb3ZlcnJpZGVuIHByb3BlcnR5IG5hbWVzIGFyZSBwYXJ0IG9mIHRoZSBnZW5lcmlj
IHByb3BlcnR5IGxvb3AuCisgICAgaWYgKHR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MDg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNiArMjgzLDExIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNh
Y2hlKCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgorCisgICAgdm9p
ZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKik7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgYm9vbCBjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1l
cmF0b3IoKSBjb25zdDsKKwogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUo
Vk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBKU1N0cmlu
Zyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAxNzA4NjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgogCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNjgsNiArNjksMTcgQEAg
dm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3ByZXZpb3VzKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9vYmplY3RUb1N0cmluZ1ZhbHVlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9lbnVtZXJhdGlvbkNhY2hlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKK30KKworSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvci5n
ZXQoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0Q2FjaGVkUHJvcGVydHlOYW1l
RW51bWVyYXRvcihWTSYgdm0sIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikK
K3sKKyAgICBtX2NhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3Iuc2V0KHZtLCB0aGlzLCBlbnVt
ZXJhdG9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDE3MDg2
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CiAKQEAgLTYxLDYgKzYyLDkgQEAgcHVibGljOgogICAgIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKyAgICB2b2lkIHNldENhY2hl
ZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsK
KwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlOwogICAgIApAQCAtNzEsNiAr
NzUsNyBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7
CiAgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAg
V3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsK
KyAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yPiBtX2NhY2hlZFByb3Bl
cnR5TmFtZUVudW1lcmF0b3I7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zm
c2V0LCBSZWZQdHI8V2F0Y2hwb2ludFNldD4sIFdURjo6SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9w
ZXJ0eVdhdGNocG9pbnRNYXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFByb3BlcnR5V2F0Y2hwb2lu
dE1hcD4gbV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTcwODYwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5j
bHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAj
aW5jbHVkZSAiSlNQcm9taXNlUmVhY3Rpb24uaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMZXhlci5oIgpAQCAtMjU4LDYgKzI1OSw3IEBA
IFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBzdHJpbmdTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIG5vdEFuT2JqZWN0U3RydWN0dXJlLnNldCgqdGhpcywgSlNOb3RBbk9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5TmFt
ZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5TmFtZUVudW1l
cmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBhcGlXcmFwcGVyU3RydWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdy
YXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBKU1Njb3Bl
U3RydWN0dXJlLnNldCgqdGhpcywgSlNTY29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAx
NzA4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjYsNiArMjY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90
QW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFt
ZUl0ZXJhdG9yU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJT
ZXR0ZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1
Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IEpTU2NvcGVTdHJ1Y3R1cmU7CkBAIC0y
OTEsNiArMjkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKICNlbmRpZgogICAgICAgICBTdHJvbmc8SlNDZWxs
PiBpdGVyYXRpb25UZXJtaW5hdG9yOworICAgICAgICBTdHJvbmc8SlNDZWxsPiBlbXB0eVByb3Bl
cnR5TmFtZUVudW1lcmF0b3I7CiAKICAgICAgICAgQXRvbWljU3RyaW5nVGFibGUqIG1fYXRvbWlj
U3RyaW5nVGFibGU7CiAgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234604</attachid>
            <date>2014-07-08 16:06:47 -0700</date>
            <delta_ts>2014-07-09 20:43:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140708160629.patch</filename>
            <type>text/plain</type>
            <size>130542</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwOTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MyBA
QAorMjAxNC0wNy0wOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbjoKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRl
Y29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJdGVyYWJsZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6cHVzaE9wdGltaXNlZEZvckluKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGltaXNlZEZvckluKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25SZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjp0cnlHZXRC
b3VuZExvY2FsKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcik6Cisg
ICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdE11bHRpTG9vcEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJl
cml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9E
RkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSXRlcmFibGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTdHJ1
Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXh0RW51bWVyYXRvclBuYW1lKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUhhc0l0ZXJh
YmxlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnQzMkxvYWQpOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9wcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJdGVyYWJsZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pdGVyYWJsZV9wcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9l
bnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9w
bmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdERvdWJsZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3Vz
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnBy
b3BlcnR5TmFtZUF0SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5jcHA6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFkZCk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5TmFtZUFycmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlOYW1lQXJyYXk6OlByb3BlcnR5TmFtZUFycmF5KToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXk6OmFkZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpjYW5B
ZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFy
cmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQ
cm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0
Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisKIDIwMTQtMDctMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbZnRsb3B0XSBHZXQgcmlkIG9mIE5vZGU6Om1pc2MgYnkgbW92aW5nIHRoZSBmaWVs
ZHMgb3V0IG9mIHRoZSB1bmlvbiBzbyB0aGF0IHlvdSBjYW4gdXNlIHJlcGxhY2VtZW50IGFuZCBv
d25lciBzaW11bHRhbmVvdXNseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDgg
QEAKIAkJMUNBQTlBMjMxOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJB
Z2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNB
QTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICov
OyB9OwogCQkyNjAwQjVBNjE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuaCAqLzsgfTsKKwkJMkEwNUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcCAqLzsgfTsKKwkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oICovOyB9OwogCQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVh
c2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsK
IAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIy
NEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi87IH07CiAJCTJBNEJCN0YzMThB
NDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovOyB9OwpAQCAtMjk0OSw2ICsyOTUxLDggQEAK
IAkJMUNBQTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2Vu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdFByb2Zp
bGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFB
NzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEyODI1Q0YxODM0MUYyRDAwODdG
QkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVsYXllZFJlbGVhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIwODUgLyogR0NTZWdtZW50ZWRBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJBMzQzRjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRl
ZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21l
bnRlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk2Myw2
ICs0OTY3LDggQEAKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5o
ICovLAogCQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywK
IAkJCQlDMkI2RDc1MjE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJyaWVySW5saW5lcy5oICov
LAorCQkJCTJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwICovLAorCQkJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC02NTc2LDYgKzY1ODIsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAv
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJF
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJv
ZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNzcyMiw2ICs3NzI5LDcgQEAKIAkJCQk4
Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDgg
LyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDMjBDQjkxODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQx
QzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
NyArMTI1LDE0IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2Fs
bCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9k
aWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5k
IiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDog
NCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwg
Imxlbmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfZW51bWVyYWJs
ZV9wcm9wZXJ0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
aGFzX2l0ZXJhYmxlX3Byb3BlcnR5IiwgImxlbmd0aCIgOiA1IH0sCisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6
IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX25l
eHRfZW51bWVyYXRvcl9wbmFtZSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfdG9faW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0KICAgICAgICAgXQogICAg
IH0sCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
VXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4
LDkgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBmdW5jdG9y
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9w
cm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgor
ICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29u
c3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgY2FzZSBvcF9wdXNo
X25hbWVfc2NvcGU6CkBAIC0xNTAsNiArMTUzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVj
b2RlT2Zmc2V0KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29k
ZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQor
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfaXRl
cmFibGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CiAgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbDoKICAg
ICBjYXNlIG9wX2luOgpAQCAtMTc5LDYgKzE4NSw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRl
Y29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KyAgICBjYXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6CiAgICAgY2FzZSBv
cF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewogICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwpAQCAtMjk4LDYgKzMwNSwxMyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVPZmZzZXQoQ29kZUJsCiAjdW5kZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIFRoZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGZvciB0
aGUgZmlyc3QgYXJndW1lbnQuCisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CisgICAgY2Fz
ZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9oYXNfaXRlcmFibGVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0
dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5h
bWU6CiAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToK
ICAgICBjYXNlIG9wX3N0cmNhdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsx
Mzk5LDY4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpdCAr
PSBPUENPREVfTEVOR1RIKG9wX25leHRfcG5hbWUpIC0gMTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2Ug
PSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aCkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9oYXNfaXRlcmFibGVfcHJvcGVydHk6IHsKKyAgICAgICAgICAg
IGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGl0WzRdLnUuYXJy
YXlQcm9maWxlOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAib3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcCIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCBh
cnJheVByb2ZpbGUpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfaXRl
cmFibGVfcHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBk
c3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJv
cF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMs
ICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0
ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpIC0gMTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9w
cm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfc3Ry
dWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEo
KSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9zdHJ1Y3R1cmVfcHJv
cGVydHlfZW51bWVyYXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAg
ICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBp
dFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gaXRbM10udS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHN0cnVjdHVyZUVudW1lcmF0b3IgPSBpdFs0XS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yIik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGxlbmd0aCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoc3RydWN0dXJlRW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9Q
Q09ERV9MRU5HVEgob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcikgLSAxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0
b3JfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCBpbmRleCA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRP
cChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX25leHRfZW51bWVyYXRvcl9wbmFtZSIpOwor
ICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4
KS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9uZXh0X2VudW1l
cmF0b3JfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbMl0udS5vcGVyYW5kOworICAg
ICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3Bf
dG9faW5kZXhfc3RyaW5nIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdp
c3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfdG9faW5kZXhfc3RyaW5nKSAtIDE7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29w
ZTogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJwdXNoX3dpdGhfc2NvcGUiLCByMCk7CkBAIC0xNzk5LDYgKzE4NjEsMTMgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyBqXS51Lm9wZXJhbmQgPSBwY1tqXS51Lm9wZXJhbmQ7CiAgICAgICAgIH0KICAgICAg
ICAgc3dpdGNoIChwY1swXS51Lm9wY29kZSkgeworICAgICAgICBjYXNlIG9wX2hhc19pdGVyYWJs
ZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BM
ZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQ
cm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworCisgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4
XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbF92
YXJhcmdzOgogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgICAgICBjYXNl
IG9wX2dldF9ieV92YWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTcwODk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzcsMTYgKzE0MzcsMTIgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeQogewogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Zvcklu
Q29udGV4dFN0YWNrLnNpemUoKTsgaSA+IDA7IGktLSkgewogICAgICAgICBGb3JJbkNvbnRleHQm
IGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2kgLSAxXTsKLSAgICAgICAgaWYgKGNvbnRl
eHQucHJvcGVydHlSZWdpc3RlciA9PSBwcm9wZXJ0eSkgewotICAgICAgICAgICAgZW1pdE9wY29k
ZShvcF9nZXRfYnlfcG5hbWUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5k
ZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4
KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuZXhwZWN0ZWRT
dWJzY3JpcHRSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoY29udGV4dC5pdGVyUmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuaW5kZXhSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gZHN0OwotICAgICAgICB9CisgICAgICAgIGlmIChjb250ZXh0LmxvY2FsUmVn
aXN0ZXIgIT0gcHJvcGVydHkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFj
b250ZXh0LmlzVmFsaWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcHJvcGVydHkgPSBj
b250ZXh0LmluZGV4UmVnaXN0ZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBV
bmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKICAg
ICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dl
dF9ieV92YWwpOwpAQCAtMjU2MSw0ICsyNTU3LDk3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRFbnVtZXJhdGlvbigKICAgICBlbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwog
fQogCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5n
dGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQoreworICAgIGVtaXRPcGNvZGUo
b3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7Cisg
ICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRI
YXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBS
ZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgZW1pdE9wY29kZShvcF9oYXNfZW51bWVy
YWJsZV9wcm9wZXJ0eSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9wZXJ0eU5hbWUtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9
CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSXRlcmFibGVQcm9wZXJ0
eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5
TmFtZSkKK3sKKyAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJh
eVByb2ZpbGUoKTsKKyAgICBlbWl0T3Bjb2RlKG9wX2hhc19pdGVyYWJsZV9wcm9wZXJ0eSk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9w
ZXJ0eU5hbWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcnJheVByb2Zp
bGUpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVy
dHlfZW51bWVyYXRvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIHJldHVybiBk
c3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0R2VuZXJpY1By
b3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJRCogc3RydWN0dXJlRW51bWVyYXRvcikKK3sKKyAgICBl
bWl0T3Bjb2RlKG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobGVuZ3RoLT5pbmRl
eCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RydWN0dXJlRW51bWVyYXRvci0+aW5k
ZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQoreworICAgIGVtaXRPcGNvZGUo
b3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvci0+aW5kZXgo
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4LT5pbmRleCgpKTsKKyAgICByZXR1
cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhT
dHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKK3sKKyAgICBlbWl0T3Bj
b2RlKG9wX3RvX2luZGV4X3N0cmluZyk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4LT5pbmRleCgpKTsKKyAg
ICByZXR1cm4gZHN0OworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBG
b3JJbkNvbnRleHQgbmV3Q29udGV4dCA9IHsgbG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3Rlciwg
dHJ1ZSB9OworICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKG5ld0NvbnRleHQpOworfQor
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyKQoreworICAgIGlmICghbG9jYWxSZWdpc3RlcikKKyAgICAgICAgcmV0
dXJuOworICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlcikKK3sKKyAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvcklu
Q29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQncyBzdWZmaWNpZW50bHkgCisg
ICAgLy8gcmFyZSB0byBlaXRoZXIgKDEpIHJlLWFzc2lnbiB0aGUgbG9vcCBpdGVyYXRpb24gdmFy
aWFibGUgaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AKKyAgICAvLyBvciAoMikgY2FwdHVyZSB0aGUg
bG9vcCB0aGUgaXRlcmF0aW9uIHZhcmlhYmxlLiBCZWNhdXNlIG9mIHRoZSByYXJpdHkgb2YgZWl0
aGVyIG9mIAorICAgIC8vIHRoZXNlIHNpdHVhdGlvbnMsIGl0J3Mgb2theSB0byBwb2lzb24gdGhl
IHJlbWFpbmRlciBvZiB0aGUgbG9vcCBib2R5IHdoZW5ldmVyIHdlIGVuY291bnRlciB0aGVtLgor
ICAgIGZvciAoc2l6ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNrLnNpemUoKTsgaSA+IDA7IGkt
LSkgeworICAgICAgICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNr
W2kgLSAxXTsKKyAgICAgICAgaWYgKGNvbnRleHQubG9jYWxSZWdpc3RlciAhPSBsb2NhbFJlZ2lz
dGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnRleHQuaXNWYWxpZCA9IGZh
bHNlOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCwx
MCArOTgsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgc3RydWN0IEZvckluQ29u
dGV4dCB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdFJlZ2lz
dGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlclJlZ2lzdGVyOworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWxSZWdpc3RlcjsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGluZGV4UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eVJl
Z2lzdGVyOworICAgICAgICBib29sIGlzVmFsaWQ7CiAgICAgfTsKIAogICAgIHN0cnVjdCBUcnlE
YXRhIHsKQEAgLTQzMSw2ICs0MzAsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRHZXRQcm9wZXJ0eU5hbWVzKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVnaXN0ZXJJRCogc2l6ZSwgTGFiZWwqIGJyZWFrVGFyZ2V0
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBS
ZWdpc3RlcklEKiBpdGVyLCBMYWJlbCogdGFyZ2V0KTsKIAorICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhh
c0l0ZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdp
c3RlcklEKiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RW51bWVy
YWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOworICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRHZW5l
cmljUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwg
UmVnaXN0ZXJJRCogbGVuZ3RoLCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGluZGV4KTsKKwogICAgICAgICB2b2lkIGVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVl
ZGVkKCk7CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcgbXVzdCBoYXZl
IGJlZW4gZW1pdHRlZC4KQEAgLTQ2MCwxNiArNDY3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgcHVzaEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7
CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRleHQoKTsKIAotICAgICAgICB2b2lkIHB1c2hP
cHRpbWlzZWRGb3JJbihSZWdpc3RlcklEKiBleHBlY3RlZFN1YnNjcmlwdCwgUmVnaXN0ZXJJRCog
aXRlciwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0ID0geyBleHBlY3RlZFN1
YnNjcmlwdCwgaXRlciwgaW5kZXgsIHByb3BlcnR5UmVnaXN0ZXIgfTsKLSAgICAgICAgICAgIG1f
Zm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBwb3BPcHRpbWlzZWRGb3JJbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgcHVzaElu
ZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGlu
ZGV4UmVnaXN0ZXIpOworICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVy
SUQqIGxvY2FsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGludmFsaWRhdGVGb3JJbkNvbnRleHRG
b3JMb2NhbChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKTsKIAogICAgICAgICBMYWJlbFNjb3Bl
UHRyIGJyZWFrVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTGFiZWxTY29wZVB0
ciBjb250aW51ZVRhcmdldChjb25zdCBJZGVudGlmaWVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lv
biAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDUsMTIgKzE1MDUsMTQgQEAgUmVnaXN0ZXJJ
RCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0QgogICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRNb3ZlKHJlc3VsdC5nZXQoKSwgbG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgZW1pdFJlYWRN
b2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgcmVzdWx0LmdldCgpLCByZXN1bHQuZ2V0KCksIG1f
cmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgp
LCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0TW92ZShsb2NhbC5nZXQoKSwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICAg
ICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJl
c3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQuZ2V0KCkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVh
ZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBsb2NhbC5nZXQoKSwgbG9jYWwuZ2V0KCksIG1f
cmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgp
LCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmludmFs
aWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CiAgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQog
CkBAIC0xNTQwLDExICsxNTQyLDEzIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjpl
bWl0Qnl0ZWMKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KHRlbXBEc3QuZ2V0KCksIG1fcmlnaHQpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGxvY2FsLmdldCgpLCB0ZW1wRHN0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZh
bGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgaWYg
KGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wRHN0LmdldCgpKTsKICAgICAg
ICAgfQogICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobG9j
YWwuZ2V0KCksIG1fcmlnaHQpOworICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29u
dGV4dEZvckxvY2FsKGxvY2FsLmdldCgpKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3Zl
VG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE5MjAsMTAy
ICsxOTI0LDIyMCBAQCB2b2lkIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JJbk5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJ
RCogRm9ySW5Ob2RlOjp0cnlHZXRCb3VuZExvY2FsKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IpCiB7Ci0gICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3Bl
KExhYmVsU2NvcGU6Okxvb3ApOwotCi0gICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1lbnRMb2Nh
dGlvbigpKSB7Ci0gICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkxl
ZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4
cHIpLT5pZGVudGlmaWVyKCk7CisgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2Fs
KGlkZW50KTsKKyAgICAgICAgaWYgKGxvY2FsLmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbG9jYWwuZ2V0KCk7CiAgICAgfQogCi0gICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgp
LCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgaWYgKG1fbGV4cHItPmlz
RGVjb25zdHJ1Y3Rpb25Ob2RlKCkpIHsKKyAgICAgICAgRGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50
Tm9kZSogYXNzaWduTm9kZSA9IHN0YXRpY19jYXN0PERlY29uc3RydWN0aW5nQXNzaWdubWVudE5v
ZGUqPihtX2xleHByKTsKKyAgICAgICAgYXV0byBiaW5kaW5nID0gYXNzaWduTm9kZS0+YmluZGlu
Z3MoKTsKKyAgICAgICAgaWYgKCFiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlLmdldCgpLCBt
X2V4cHIpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzaXplID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdDsKLSAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gaXRlciA9IGdlbmVyYXRvci5lbWl0R2V0UHJvcGVydHlOYW1lcyhnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCksIHNpemUuZ2V0KCksIHNj
b3BlLT5icmVha1RhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXAoc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOworICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxC
aW5kaW5nTm9kZSo+KGJpbmRpbmcpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IHNpbXBsZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAgTG9jYWwgbG9jYWwgPSBn
ZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAobG9jYWwuaXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBsb2NhbC5nZXQoKTsK
KyAgICB9CiAKLSAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOwotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAgICBSZWdp
c3RlcklEKiBwcm9wZXJ0eU5hbWU7Ci0gICAgYm9vbCBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IGZh
bHNlOwordm9pZCBGb3JJbk5vZGU6OmVtaXRMb29wSGVhZGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK3sKICAgICBpZiAobV9sZXhwci0+
aXNSZXNvbHZlTm9kZSgpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2xleHByKS0+aWRlbnRpZmllcigpOwogICAgICAgICBM
b2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmICghbG9jYWwu
Z2V0KCkpIHsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlO
YW1lOworICAgICAgICBpZiAobG9jYWwuZ2V0KCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE1vdmUobG9jYWwuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgaWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CiAgICAgICAgICAgICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2
ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOwogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCBpZGVudCwg
cHJvcGVydHlOYW1lLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQg
OiBEb05vdFRocm93SWZOb3RGb3VuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBl
eHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgICAg
IHByb3BlcnR5TmFtZSA9IGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpOwotICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAg
Z2VuZXJhdG9yLnB1c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRl
ci5nZXQoKSwgaS5nZXQoKSwgbG9jYWwuZ2V0KCkpOwotICAgICAgICAgICAgb3B0aW1pemVkRm9y
aW5BY2Nlc3MgPSB0cnVlOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2xleHByLT5pc0Rv
dEFjY2Vzc29yTm9kZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4
cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBhc3Np
Z25Ob2RlID0gc3RhdGljX2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7CiAgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gYXNzaWduTm9kZS0+aWRlbnRpZmllcigpOwotICAg
ICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAgICBSZWdpc3Rl
cklEKiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7Ci0KICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZvdCgpLCBh
c3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kKCkpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3BlcnR5TmFtZSk7Ci0gICAg
fSBlbHNlIGlmIChtX2xleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChtX2xleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkg
ewogICAgICAgICBCcmFja2V0QWNjZXNzb3JOb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8
QnJhY2tldEFjY2Vzc29yTm9kZSo+KG1fbGV4cHIpOwotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90
ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShhc3NpZ25Ob2RlLT5iYXNlKCkpOwogICAgICAgICBSZWdpc3RlcklE
KiBzdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+c3Vic2NyaXB0KCkp
OwotICAgICAgICAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25O
b2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90
RW5kKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHN1YnNj
cmlwdCwgcHJvcGVydHlOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9sZXhw
ci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgewogICAgICAgICBEZWNvbnN0
cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVjb25zdHJ1
Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIpOwogICAgICAgICBhdXRvIGJpbmRpbmcgPSBh
c3NpZ25Ob2RlLT5iaW5kaW5ncygpOwotICAgICAgICBpZiAoYmluZGluZy0+aXNCaW5kaW5nTm9k
ZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5k
aW5nTm9kZSo+KGJpbmRpbmcpOwotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IHNpbXBs
ZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsKLSAgICAgICAgICAgIExvY2FsIGxvY2FsID0gZ2Vu
ZXJhdG9yLmxvY2FsKGlkZW50KTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGxvY2FsLmdl
dCgpOwotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBJIGVtaXQgZXhwcmVzc2lvbiBpbmZv
IGhlcmU/Ci0gICAgICAgICAgICBpZiAoIXByb3BlcnR5TmFtZSB8fCBsb2NhbC5pc0NhcHR1cmVk
KCkgfHwgZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAg
ICAgICAgICAgICAgZ290byBnZW5lcmljQmluZGluZzsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vi
c2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJv
cGVydHlOYW1lKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5wdXNoT3B0aW1pc2VkRm9ySW4oZXhw
ZWN0ZWRTdWJzY3JpcHQuZ2V0KCksIGl0ZXIuZ2V0KCksIGkuZ2V0KCksIHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBn
b3RvIGNvbXBsZXRlZFNpbXBsZUJpbmRpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdl
bmVyaWNCaW5kaW5nOgotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QocHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgaWYgKCFiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKICAgICAg
ICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgY29tcGxl
dGVkU2ltcGxlQmluZGluZzoKLSAgICAgICAgOworCisgICAgICAgIGF1dG8gc2ltcGxlQmluZGlu
ZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAg
ICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmICghbG9j
YWwuZ2V0KCkgfHwgbG9jYWwuaXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBhc3NpZ25Ob2Rl
LT5iaW5kaW5ncygpLT5iaW5kVmFsdWUoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2Nh
bC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGdl
bmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQogCi0gICAgaWYgKG9wdGltaXplZEZvcmluQWNjZXNzKQotICAgICAg
ICBnZW5lcmF0b3IucG9wT3B0aW1pc2VkRm9ySW4oKTsKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0TXVs
dGlMb29wQnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQoreworICAgIGlmICghbV9sZXhwci0+aXNBc3NpZ25tZW50TG9jYXRpb24oKSkgeworICAg
ICAgICBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJMZWZ0IHNpZGUgb2YgZm9y
LWluIHN0YXRlbWVudCBpcyBub3QgYSByZWZlcmVuY2UuIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSZWZQdHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0g
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXROZXh0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgYmFzZS5nZXQoKSwgaS5n
ZXQoKSwgc2l6ZS5nZXQoKSwgaXRlci5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0
YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KHNjb3BlLT5icmVha1RhcmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsZW5ndGg7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHN0cnVjdHVyZUVudW1lcmF0b3I7CisgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGxvY2FsID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOworCisgICAgLy8gSW5k
ZXhlZCBwcm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9
IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAgICAgICBSZWZQ
dHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWZQ
dHI8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAgICAgICBsZW5n
dGggPSBnZW5lcmF0b3IuZW1pdEdldEVudW1lcmFibGVMZW5ndGgoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBiYXNlLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5l
cmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7Cisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcChvcF9sZXNzLCBnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGkuZ2V0KCksIGxlbmd0aC5nZXQoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNJdGVyYWJsZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFz
ZS5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVz
dWx0LmdldCgpLCBzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAg
IHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKKwor
ICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3BlKGxvY2FsLmdldCgpLCBpLmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworICAg
ICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0KCkpOworCisgICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdEluYyhpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KGxvb3BTdGFydC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+
YnJlYWtUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOworICAgIH0KKworICAg
IC8vIFN0cnVjdHVyZSBwcm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0
ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAg
ICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAg
ICAgICBSZWZQdHI8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAg
ICAgICBzdHJ1Y3R1cmVFbnVtZXJhdG9yID0gZ2VuZXJhdG9yLmVtaXRHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpKTsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCks
IHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJh
dG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIC8vIFRPRE86IE9wdGltaXplIGZv
ci1pbgorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0SW5jKGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5l
eHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlRW51
bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VW5hcnlPcChv
cF9lcV9udWxsLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwg
YmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgCisgICAgICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChs
b29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBHZW5lcmljIHByb3BlcnR5IGxvb3AuCisg
ICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2Nv
cGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0g
Z2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBnZW5lcmlj
RW51bWVyYXRvciA9IGdlbmVyYXRvci5lbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGxlbmd0aC5nZXQoKSwgc3RydWN0
dXJlRW51bWVyYXRvci5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2Vu
ZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOwor
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0
eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmljRW51bWVyYXRvci5nZXQoKSwgaS5nZXQo
KSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFVu
YXJ5T3Aob3BfZXFfbnVsbCwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUu
Z2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBs
b29wRW5kLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5n
ZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICB0aGlz
LT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAg
ICAgLy8gVE9ETzogT3B0aW1pemUgZm9yLWluCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShk
c3QsIG1fc3RhdGVtZW50KTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlO
YW1lLmdldCgpLCBnZW5lcmljRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0VW5hcnlPcChvcF9lcV9udWxsLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5TmFt
ZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzRW51bWVyYWJsZVBy
b3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcFN0YXJ0Lmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgp
KTsKKyAgICAgICAgCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFy
Z2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICBnZW5lcmF0
b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0
T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVu
ZC5nZXQoKSk7Cit9CisKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIHRoaXMtPmVtaXRNdWx0
aUxvb3BCeXRlY29kZShnZW5lcmF0b3IsIGRzdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGb3JPZk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3NTMsMTMgKzE3NTMsNDMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNh
c2UgSW46CisgICAgY2FzZSBJbjogewogICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWlu
ZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAog
ICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAg
CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjSW50MzIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNF
bnVtZXJhYmxlUHJvcGVydHk6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzSXRlcmFibGVQcm9w
ZXJ0eTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0
b3I6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNDZWxsKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogewor
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgR2V0
R2xvYmFsVmFyOgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgzLDYgKzMxODMs
NTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfaW4pOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxl
bmd0aCwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2hhc19lbnVt
ZXJhYmxlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEhhc0VudW1lcmFibGVQcm9w
ZXJ0eSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2Ugb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7
CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQ29uc2lkZXJp
bmdTbG93UGF0aChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpS
ZWFkKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBoYXNJ
dGVyYWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChIYXNJdGVyYWJsZVByb3BlcnR5LCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgaGFzSXRlcmFi
bGVQcm9wZXJ0eSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfaXRlcmFibGVfcHJv
cGVydHkpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3Bl
cnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0U3RydWN0dXJlUHJvcGVy
dHlFbnVtZXJhdG9yLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
YWRkVG9HcmFwaChHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yLCAKKyAgICAgICAgICAgICAg
ICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwK
KyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZTogeworICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChO
ZXh0RW51bWVyYXRvclBuYW1lLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7CisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dy
YXBoKFRvSW5kZXhTdHJpbmcsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF90b19pbmRleF9zdHJpbmcpOworICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBzaG91bGQgbm90IGhhcHBlbiBiZWNh
dXNlIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tlcgogICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUg
Y2F1Z2h0IGl0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDEzIEBA
IENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3N3
aXRjaF9jaGFyOgogICAgIGNhc2Ugb3BfaW46CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToK
KyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNlIG9wX2hhc19lbnVt
ZXJhYmxlX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5OgorICAg
IGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3Bf
Z2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9wX25leHRfZW51bWVy
YXRvcl9wbmFtZToKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAgICAgICAgcmV0dXJu
IENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3
MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDgxIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIE1ha2VSb3BlOgogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNlIEhhc0VudW1lcmFi
bGVQcm9wZXJ0eToKKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjoKKyAg
ICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2FzZSBOZXh0RW51bWVy
YXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICAvLyBUT0RPOiBE
byB0aGUgcmlnaHQgdGhpbmcgZm9yIGVhY2ggb2YgdGhlc2Ugb3BzLgorICAgICAgICByZWFkKFdv
cmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FzZSBIYXNJdGVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIHJlYWQoSlNDZWxsX2luZGV4
aW5nVHlwZSk7CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgQXJy
YXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5
cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjogeworICAgICAgICAgICAgaWYgKG1v
ZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGlj
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7Cisg
ICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgICAg
IGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdv
cmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsK
KyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJl
YWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3Vz
UHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAg
ICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEFycmF5U3RvcmFn
ZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAg
ICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBNb3ZIaW50Ogog
ICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFVwc2lsb246CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2
ICsxODcsOSBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNh
c2UgUHV0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OgorICAgIGNhc2UgSGFzSXRlcmFibGVQcm9wZXJ0eToKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpAQCAtMjA5
LDYgKzIxMiwxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgogICAg
IGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5
RW51bWVyYXRvcjoKKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAg
Y2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNp
b24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzMCw2ICsxMDMwLDQ3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgb2JzZXJ2ZVVzZUtpbmRPbk5vZGU8U3RyaW5nVXNlPihub2RlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxl
bmd0aDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQ
cm9wZXJ0eTogeworICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzSXRlcmFi
bGVQcm9wZXJ0eTogeworICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAg
ICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKKyAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rp
b24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwK
KyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5vZGUtPmZsYWdzKCkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJhdGlvbihub2RlLT5jaGlsZDEoKSwgbm9k
ZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVz
ZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAg
ICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgICAgICBmaXhF
ZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxL
bm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICAgICAgICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2
ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRv
IGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNTQsNiArMTI1NCw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIEFy
cmF5UHVzaDoKICAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2FzZSBIYXNJdGVyYWJs
ZVByb3BlcnR5OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OCw2ICsyODgsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9c
CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
U3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIFwKKyAg
ICAvKiBGb3ItaW4gZW51bWVyYXRpb24gb3Bjb2RlcyAqL1wKKyAgICBtYWNybyhHZXRFbnVtZXJh
YmxlTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8o
SGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKKyAgICBtYWNybyhIYXNJdGVyYWJsZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhHZXRH
ZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpT
KSBcCisgICAgbWFjcm8oTmV4dEVudW1lcmF0b3JQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKIAog
Ly8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3Ig
YWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRv
IGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUwLDYgKzU1MCwzNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAg
ICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eTogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgSGFzSXRlcmFibGVQcm9wZXJ0eTogeworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9y
OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGwpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVy
dHlFbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOZXh0
RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
U3BlY0NlbGwgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAj
aWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkg
ZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCwxMyBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNlIEdldEdl
dHRlcjoKICAgICBjYXNlIEdldFNldHRlcjoKKyAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6
CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6CisgICAgY2FzZSBIYXNJdGVyYWJsZVBy
b3BlcnR5OgorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNh
c2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIE5leHRFbnVtZXJhdG9y
UG5hbWU6CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDU4Miw2ICs0NTgyLDM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBHZXRFbnVtZXJhYmxl
TGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKKyAg
ICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgSGFzSXRlcmFibGVQcm9wZXJ0eTogeworICAgICAgICBjb21waWxl
SGFzSXRlcmFibGVQcm9wZXJ0eShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgIGNvbXBpbGVHZXRT
dHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgY29tcGls
ZUdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgY29tcGlsZU5leHRF
bnVtZXJhdG9yUG5hbWUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6IHsKKyAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmcobm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKwogI2lmIEVOQUJMRShGVExfSklUKSAgICAgICAgCiAgICAgY2Fz
ZSBDaGVja1RpZXJVcEluTG9vcDogewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuYnJhbmNoQWRkMzIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1MzAsNiArNTUzMCwxMzcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFy
cmllcgogfQogI2VuZGlmIC8vIEVOQUJMRShHR0MpCiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEVudW1lcmFibGVM
ZW5ndGgsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUsIERhdGFGb3JtYXRKU0ludDMyKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzRW51bWVyYWJsZVBy
b3BlcnR5LCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpKTsKKyAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJdGVyYWJsZVByb3BlcnR5KE5vZGUqIG5vZGUp
Cit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsK
KyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAg
c3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
aW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgIEFTU0VSVCgh
IW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAg
ICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7CisgICAgICAgIEdQUlJlZyBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKSk7CisgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCBzY3JhdGNoRlBSKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIs
IHNjcmF0Y2hGUFIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZTogeworICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBH
UFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJlc3VsdEdQUikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDogeworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICB9CisKKyAgICBtb3ZlVHJ1ZVRvKHJlc3VsdEdQUik7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVy
dHksIHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKKyAgICAKKyAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0U3RydWN0dXJlUHJvcGVydHlF
bnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCkpOworICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEdlbmVyaWNQ
cm9wZXJ0eUVudW1lcmF0b3IoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQg
bGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBl
bnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRo
aXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBmbHVzaFJl
Z2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0R2VuZXJpY1Byb3BlcnR5
RW51bWVyYXRvciwgcmVzdWx0R1BSLCBiYXNlLmdwcigpLCBsZW5ndGguZ3ByKCksIGVudW1lcmF0
b3IuZ3ByKCkpOworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5leHRFbnVtZXJhdG9yUG5hbWUoTm9kZSogbm9kZSkKK3sK
KyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXh0RW51bWVyYXRvclBuYW1lLCByZXN1bHRHUFIsIGVudW1lcmF0b3IuZ3ByKCks
IGluZGV4LmdwcigpKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUqIG5vZGUpCit7
CisgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVG9JbmRleFN0cmluZywgcmVzdWx0R1BSLCBpbmRleC5ncHIoKSk7CisgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsNiArMzAxLDE0IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKKyAg
ICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUhhc0l0ZXJh
YmxlUHJvcGVydHkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldFN0cnVjdHVyZVByb3BlcnR5
RW51bWVyYXRvcihOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0R2VuZXJpY1Byb3BlcnR5RW51
bWVyYXRvcihOb2RlKik7CisgICAgdm9pZCBjb21waWxlTmV4dEVudW1lcmF0b3JQbmFtZShOb2Rl
Kik7CisgICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisKICAgICBzdGF0aWMg
R1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcs
IEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52
YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCiAgICAgewogICAg
ICAgICByZXR1cm4gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKHByZXNlcnZlMSwg
cHJlc2VydmUyLCBwcmVzZXJ2ZTMsIHByZXNlcnZlNCk7CkBAIC0xMjQ4LDYgKzEyNTYsMTEgQEAg
cHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FU3NpQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihzdHViSW5m
byksIGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CkBAIC0xMjYzLDYgKzEyNzYsMTYgQEAgcHVi
bGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSlogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0pJVE9wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CkBAIC0xMzExLDYgKzEzMzQsMTYgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FSkpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKWkMgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMo
YXJnMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNzA4OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwMyw2ICszMDMsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX2dl
dF9mcm9tX3Njb3BlKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX3Njb3BlKQorCisgICAg
ICAgIERFRklORV9PUChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisgICAgICAgIERFRklORV9P
UChvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2hhc19p
dGVyYWJsZV9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2dldF9zdHJ1Y3R1cmVfcHJv
cGVydHlfZW51bWVyYXRvcikKKyAgICAgICAgREVGSU5FX09QKG9wX2dldF9nZW5lcmljX3Byb3Bl
cnR5X2VudW1lcmF0b3IpCisgICAgICAgIERFRklORV9PUChvcF9uZXh0X2VudW1lcmF0b3JfcG5h
bWUpCisgICAgICAgIERFRklORV9PUChvcF90b19pbmRleF9zdHJpbmcpCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9
CkBAIC00MjAsNiArNDI4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX3RvX251bWJlcikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3RvX3By
aW1pdGl2ZSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19pdGVyYWJsZV9wcm9w
ZXJ0eSkKIAogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcmVzb2x2ZV9zY29wZSkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZUhhc0l0ZXJhYmxlUHJvcGVydHkoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgSklUIGpp
dCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlSGFz
SXRlcmFibGVQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Cisg
ICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChW
TSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgh
dm0tPmNhblVzZUpJVCgpKSB7CkBAIC0yNTYsNiArMjYzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRy
ZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlW
YWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAorICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlSGFzSXRlcmFibGVQcm9wZXJ0eShCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworCiAgICAgICAgIExhYmVsIHByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChWTSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CiAgICAgICAg
IENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rpb24p
OwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwpAQCAtMzM2LDYgKzM0NSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5k
ZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLgogICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFk
eSBwcm9maWxlZC4gUmV0dXJucyB0aGUgc2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCiAgICAgICAg
IC8vIGNhc2UgY29udGFpbnMgcmVzdWx0IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9m
aWxlZC4KKyAgICAgICAgSnVtcExpc3QgZW1pdEludDMyTG9hZChJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpIHsgcmV0dXJuIGVtaXRDb250aWd1b3VzTG9h
ZChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgSW50MzJTaGFwZSk7IH0KKyAgICAgICAgSnVtcExpc3Qg
ZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAg
ICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hh
cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlTG9hZChJbnN0cnVjdGlvbios
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworCiAgICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMkdl
dEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkg
eyByZXR1cm4gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgSW50
MzJTaGFwZSk7IH0KICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250
aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRl
eGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CkBAIC01NDksNiArNTYz
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9s
b2FkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiop
OworICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0
b3IoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9nZW5lcmljX3Byb3Bl
cnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX25leHRf
ZW51bWVyYXRvcl9wbmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfdG9f
aW5kZXhfc3RyaW5nKEluc3RydWN0aW9uKik7CiAKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9h
ZGQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYml0YW5kKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjAyLDYgKzYyMyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF91
bnNpZ25lZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF91cnNoaWZ0KEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19p
dGVyYWJsZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNzA4
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsMjQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNs
b3dDYXNlcyA9IGVtaXREb3VibGVMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICBtb3Zl
RG91YmxlVG82NChmcFJlZ1QwLCByZWdUMCk7CisgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWdUMCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworaW5saW5lIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0
ZWRTaGFwZSkKK3sKKyAgICByZXR1cm4gZW1pdENvbnRpZ3VvdXNMb2FkKGluc3RydWN0aW9uLCBi
YWRUeXBlLCBleHBlY3RlZFNoYXBlKTsKK30KKworaW5saW5lIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgcmV0dXJuIGVtaXRBcnJheVN0b3Jh
Z2VMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlKTsKK30KKwogQUxXQVlTX0lOTElORSBib29sIEpJ
VDo6aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVEb3VibGUoaW50IHNyYykKIHsKICAgICByZXR1
cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCiAjaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAi
VmlydHVhbFJlZ2lzdGVyLmgiCiAKQEAgLTEyMTAsNiArMTIxMSwxODggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhcHR1cmVkX21vdihJbnN0cgogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9
CiAKK3ZvaWQgSklUOjplbWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpOworICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0l0ZXJhYmxlUHJvcGVydHko
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2Ug
SklUSW50MzI6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMkxvYWQoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVREb3VibGU6Cisg
ICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBUT0RPOiBBZGQg
c3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAg
cGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQ
YXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5
cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAg
IAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAor
ICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgaGFz
X2l0ZXJhYmxlX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJp
bmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAor
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwo
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihvcGVy
YXRpb25IYXNJdGVyYWJsZVByb3BlcnR5R2VuZXJpYykpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9oYXNfaXRlcmFibGVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3Bl
cnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7
CisKKyAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0
ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vzbid0IG1hdHRlci4KKyAg
ICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWluc3QgdGhl
IG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBpZgorICAgIC8vIG51bWJl
ciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4gaW50
bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgorICAgIC8vIHNpemUgaXMgYWx3YXlzIGxl
c3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNvcnJl
Y3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCisgICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nh
cnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uLiBXZSB6ZXJvIGV4
dGVuZCByYXRoZXIgdGhhbiBzaWduCisgICAgLy8gZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2VzIGl0
IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNhc2UuCisgICAgemVyb0V4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hh
cGVNYXNrKSwgcmVnVDIpOworCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2Rl
KHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUSW50MzI6CisgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMkxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVREb3VibGU6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXREb3VibGVMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dENvbnRpZ3VvdXNMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
QXJyYXlTdG9yYWdlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7CisKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAg
IAorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0
LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNf
aXRlcmFibGVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIEp1bXAgbm9uQ2VsbCA9IGp1
bXAoKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKKyAgICBK
dW1wIG5vdFN0cmluZyA9IGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgCisgICAgICAgIEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAorICAgICAgICBtX3ZtLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIGJyZWFrcG9pbnQoKTsKKy8qCisgICAgVE9ETzog
RmlndXJlIG91dCB3aGF0IHRvIGRvIGZvciBzdHJpbmdzLgorICAgIGVtaXROYWtlZENhbGwoQ29k
ZUxvY2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0
b3IpLmNvZGUoKSkpOworICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1Qw
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CisgICAgZmFp
bGVkLmxpbmsodGhpcyk7CisqLworICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOworICAgIG5vbkNl
bGwubGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wIHNraXBQcm9maWxpbmcgPSBqdW1wKCk7Cisg
ICAgCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgIAorICAgIGVtaXRBcnJheVBy
b2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIHNraXBQcm9m
aWxpbmcubGluayh0aGlzKTsKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Cisg
ICAgCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSGFzSXRlcmFibGVQcm9wZXJ0eURlZmF1bHQsIGRzdCwgcmVnVDAs
IHJlZ1QxKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAg
bV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3N0
cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOwor
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9nZW5l
cmljX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25leHRfZW51bWVyYXRv
cl9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
bmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CisgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTU3RhY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUu
aCIKQEAgLTE1MDIsNiArMTUwMyw2NCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogICAgIAor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJdGVyYWJsZVByb3BlcnR5
RGVmYXVsdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICAKKyAg
ICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOworICAgIEFTU0VSVChzdWJzY3JpcHQuaXNV
SW50MzIoKSk7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsK
KyAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworICAgIEFTU0VSVChieXRl
Y29kZU9mZnNldCk7CisgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBleGVjLT5jb2RlQmxvY2so
KS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgQVNTRVJUKCFieVZhbElu
Zm8uc3R1YlJvdXRpbmUpOworICAgIAorICAgIGlmIChoYXNPcHRpbWl6YWJsZUluZGV4aW5nKG9i
amVjdC0+c3RydWN0dXJlKHZtKSkpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBvcHRpbWl6ZS4K
KyAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVy
ZShvYmplY3QtPnN0cnVjdHVyZSh2bSkpOworICAgICAgICBpZiAoYXJyYXlNb2RlICE9IGJ5VmFs
SW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgIEpJVDo6Y29tcGlsZUhhc0l0ZXJhYmxlUHJv
cGVydHkoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOworICAgICAgICAgICAgZGlkT3B0aW1p
emUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghZGlkT3B0aW1pemUp
IHsKKyAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdp
dGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAgLy8gbmV2ZXIgbWFrZSB0
aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUg
c29tZSBvYmplY3QKKyAgICAgICAgLy8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVu
IGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2VzCisgICAgICAgIC8vIHdo
ZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAg
aXRlcmF0aW9ucyB3b3J0aCBvZgorICAgICAgICAvLyBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2Jz
ZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4KKyAgICAgICAgaWYg
KCsrYnlWYWxJbmZvLnNsb3dQYXRoQ291bnQgPj0gMTAKKyAgICAgICAgICAgIHx8IG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGV2
ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
Q2FsbGVyVG9GdW5jdGlvbihSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1
bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHlHZW5lcmljKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2Jq
ZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQuYXNVSW50MzIoKSkpKTsKK30KKyAgICAK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSXRlcmFibGVQcm9wZXJ0
eUdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgCisg
ICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoc3Vic2NyaXB0Lmlz
VUludDMyKCkpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQcm9wZXJ0
eShleGVjLCBzdWJzY3JpcHQuYXNVSW50MzIoKSkpKTsKK30KKyAgICAKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTgwMiw2ICsxODYxLDk1IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKICAgICBnZW5lcmljVW53aW5k
KHZtLCBleGVjLCB2bS0+ZXhjZXB0aW9uKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIGlm
IChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcigwKSk7CisKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50
b09iamVjdChleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGJhc2Ut
Pm1ldGhvZFRhYmxlKHZtKS0+Z2V0RW51bWVyYWJsZUxlbmd0aCh2bSwgYmFzZSkpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVy
dHkoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIEpTQ2VsbCogcHJv
cGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1
ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9PYmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgYXNTdHJpbmcocHJvcGVy
dHlOYW1lKS0+dG9JZGVudGlmaWVyKGV4ZWMpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgaW50MzJfdCBzdWJzY3JpcHQpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2UpOworICAgIAorICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdCkpKTsK
K30KKyAgICAKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZVZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3Jl
YXRlKHZtKTsKKyAgICAgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmpl
Y3QoZXhlYyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0p
OworICAgIGlmIChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBzdHJ1Y3R1
cmUtPmNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIGVudW1l
cmF0b3I7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOworICAg
IGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKworICAgIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y3JlYXRlKHZtLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBpZiAoc3RydWN0dXJlLT5jYW5D
YWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJlLT5zZXRDYWNo
ZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBlbnVtZXJhdG9yKTsKKyAgICByZXR1cm4gZW51
bWVyYXRvcjsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEdlbmVyaWNQ
cm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBpbnQzMl90IGxlbmd0aCwgSlNDZWxsKiBlbnVtZXJhdG9yKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlVmFsdWUpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtKTsKKyAgICAKKyAg
ICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIHN0cnVjdHVyZUVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oZW51bWVyYXRvcik7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0eU5hbWVzKGV4ZWMpOworICAgIHByb3BlcnR5TmFtZXMuc2V0UHJldmlvdXNseUVudW1l
cmF0ZWRMZW5ndGgobGVuZ3RoKTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVt
ZXJhdGVkUHJvcGVydGllcyhzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKKyAgICBiYXNlLT5tZXRob2RU
YWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorICAgIHJldHVybiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgcHJvcGVydHlOYW1lcyk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogZW51bWVyYXRvckNlbGwsIGludDMyX3QgaW5kZXgpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
anNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGVudW1lcmF0b3JDZWxsKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVB
dEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb3BlcnR5TmFtZSA/
IGpzU3RyaW5nKGV4ZWMsIHByb3BlcnR5TmFtZS0+c3RyaW5nKCkpIDoganNOdWxsKCkpOworfQor
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIGludDMyX3QgaW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLnN0cmluZygpKTsKK30KKwog
fSAvLyBleHRlcm4gIkMiCiAKIC8vIE5vdGU6IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhl
Y1N0YXRlKCkgbmVlZHMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTYsMTAgKzk2LDEzIEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkoK
IHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VD
QykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpf
SklUT3BlcmF0aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNa
KShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VEQSkoRXhlY1N0YXRlKiwgZG91YmxlLCBK
U0FycmF5Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FRSkoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKik7CiB0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSSkoRXhlY1N0YXRlKiwgU3RyaW5n
SW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSklkYykoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIqKTsKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTEyMSw2ICsxMjQsOCBAQCB0
eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlCiB0eXBlZGVmIEpTQ2VsbCog
SklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
SlNDZWxsKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9u
X0VJY2YpKEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSlpD
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgSlNDZWxsKik7Cit0eXBlZGVm
IEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKSkMpKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7CiB0eXBlZGVmIEpTQ2Vs
bCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqLCBTdHJ1Y3R1cmUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwog
dHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNz
KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKQEAgLTI3Nyw2
ICsyODIsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSGFzSXRlcmFibGVQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5B
TDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSXRlcmFibGVQcm9w
ZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgYmFzZSwgY29uc3QgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTMwMCw2ICsz
MDcsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycgogCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvbnN0KEV4ZWNTdGF0ZSosIEluc3Ry
dWN0aW9uKik7CiAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RW51
bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkhhc0l0ZXJhYmxlUHJvcGVydHkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldFN0cnVjdHVyZVBy
b3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CitKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgSlNDZWxsKik7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5leHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0
cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKKwogfSAvLyBleHRlcm4gIkMiCiAKIGlubGluZSBQ
X0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtGb3IoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTcwODk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
dmFsKEluc3RydWN0aW9uCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwog
fQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlTG9h
ZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzOwogICAgIApAQCAtMTYwLDEzICsxNjAsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXREb3VibGVHZXRCeVZhbChJbgogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwogICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGlt
ZXNFaWdodCksIGZwUmVnVDApOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERv
dWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKLSAgICBtb3ZlRG91
YmxlVG82NChmcFJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWdUMCk7CiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgCkBAIC0xNzksNyArMTc3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1
b3VzR2V0QnlWYQogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklU
OjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTIxMCw2
ICsxMjEwLDQwIEBAIF9sbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgogX2xsaW50X25hdGl2
ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBuYXRpdmVDYWxsVHJhbXBvbGluZShOYXRpdmVF
eGVjdXRhYmxlOjptX2NvbnN0cnVjdG9yKQogCitfbGxpbnRfb3BfZ2V0X2VudW1lcmFibGVfbGVu
Z3RoOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgpCisgICAgZGlzcGF0Y2goMykKKworX2xsaW50X29wX2hhc19l
bnVtZXJhYmxlX3Byb3BlcnR5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg0KQor
CitfbGxpbnRfb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9oYXNfaXRlcmFibGVfcHJvcGVydHkpCisgICAg
ZGlzcGF0Y2goNSkKKworX2xsaW50X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRv
cjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0
X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgIGRpc3BhdGNoKDMpCisKK19sbGlu
dF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIHRyYWNlRXhlY3V0aW9u
KCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVt
ZXJhdG9yKQorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9vcF9uZXh0X2VudW1lcmF0b3JfcG5h
bWU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX25l
eHRfZW51bWVyYXRvcl9wbmFtZSkKKyAgICBkaXNwYXRjaCg0KQorCitfbGxpbnRfb3BfdG9faW5k
ZXhfc3RyaW5nOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3df
cGF0aF90b19pbmRleF9zdHJpbmcpCisgICAgZGlzcGF0Y2goMykKIAogIyBMYXN0bHksIG1ha2Ug
c3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgYWxsIG9w
Y29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNpbmcgTExJ
bnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODAsNiArMTI4MCwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgRm9ySW5Ob2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVtZW50Tm9k
ZSopOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUmVnaXN0ZXJJRCogdHJ5R2V0Qm91bmRMb2Nh
bChCeXRlY29kZUdlbmVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRMb29wSGVhZGVyKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKKyAgICAgICAgdm9pZCBl
bWl0TXVsdGlMb29wQnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBkc3Qp
OworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAgIH07CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTcwODk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDYgKzgyLDEyIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdHlwZWRlZiB2b2lk
ICgqR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBHZXRQcm9wZXJ0eU5hbWVz
RnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIAorICAgIHR5cGVkZWYgdWludDMyX3QgKCpH
ZXRFbnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIpKFZNJiwgSlNPYmplY3QqKTsKKyAgICBHZXRF
bnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIgZ2V0RW51bWVyYWJsZUxlbmd0aDsKKworICAgIEdl
dFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzOworICAg
IEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRHZW5lcmljUHJvcGVydHlOYW1lczsKKwog
ICAgIHR5cGVkZWYgU3RyaW5nICgqQ2xhc3NOYW1lRnVuY3Rpb25QdHIpKGNvbnN0IEpTT2JqZWN0
Kik7CiAgICAgQ2xhc3NOYW1lRnVuY3Rpb25QdHIgY2xhc3NOYW1lOwogCkBAIC0xMzcsNiArMTQz
LDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJv
cGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAorICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRFbnVtZXJhYmxlTGVuZ3RoLCBcCisgICAgICAgICZDbGFzc05hbWU6
OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAg
ICAgICAgICZDbGFzc05hbWU6OmN1c3RvbUhhc0luc3RhbmNlLCBcCiAgICAgICAgICZDbGFzc05h
bWU6OmRlZmluZU93blByb3BlcnR5LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgor
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTV2l0
aFNjb3BlLmgiCkBAIC01NDIsNiArNTQzLDk3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9l
bnRlcikKICAgICBFTkQoKTsKIH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCkKK3sKKyAgICBCRUdJTigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
T1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgUkVUVVJOKGpzTnVtYmVyKDApKTsKKworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFz
ZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFJFVFVSTihqc051bWJlcihiYXNlLT5tZXRob2RU
YWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgodm0sIGJhc2UpKSk7Cit9CisKK1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKK3sKKyAgICBCRUdJTigp
OworICAgIEpTT2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOwor
ICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgYm9vbCByZXN1bHQ7
CisgICAgaWYgKHByb3BlcnR5LmlzU3RyaW5nKCkpCisgICAgICAgIHJlc3VsdCA9IGJhc2UtPmhh
c1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5LmFzQ2VsbCgpKS0+dG9JZGVudGlmaWVy
KGV4ZWMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMyKCkp
OworICAgICAgICByZXN1bHQgPSBiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eS5hc1VJ
bnQzMigpKTsKKyAgICB9CisgICAgUkVUVVJOKGpzQm9vbGVhbihyZXN1bHQpKTsKK30KKworU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2hhc19pdGVyYWJsZV9wcm9wZXJ0eSkKK3sKKyAgICBCRUdJ
TigpOworICAgIEpTT2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMp
OworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgcGNbNF0udS5h
cnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0dXJlKHZtKSk7CisgICAg
QVNTRVJUKHByb3BlcnR5LmlzVUludDMyKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+
aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkuYXNVSW50MzIoKSkpKTsKK30KKworU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikKK3sKKyAg
ICBCRUdJTigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAg
IGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtKSk7CisgICAgICAgIAorICAgIEpTT2JqZWN0
KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KCkpCisgICAgICAgIFJFVFVSTihlbnVtZXJhdG9yKTsKKworICAgIFByb3BlcnR5TmFtZUFycmF5
IHByb3BlcnR5TmFtZXMoZXhlYyk7CisgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRTdHJ1
Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXMpOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHByb3BlcnR5TmFtZXMp
OworICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQor
ICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVu
dW1lcmF0b3IpOworICAgIFJFVFVSTihlbnVtZXJhdG9yKTsKK30KKworU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4o
KTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFz
ZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSkpOworICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFz
ZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIHVpbnQzMl90IGVudW1lcmF0ZWRMZW5ndGggPSBP
UCgzKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IHN0cnVjdHVyZUVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
T1AoNCkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3Bl
cnR5TmFtZXMoZXhlYyk7CisgICAgcHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRl
ZExlbmd0aChlbnVtZXJhdGVkTGVuZ3RoKTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNldFByZXZpb3Vz
bHlFbnVtZXJhdGVkUHJvcGVydGllcyhzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKKyAgICBiYXNlLT5t
ZXRob2RUYWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorICAgIFJFVFVSTihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgcHJvcGVydHlOYW1lcykpOworfQor
CitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKQoreworICAg
IEJFR0lOKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganND
YXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDIpLmpzVmFsdWUoKS5hc0NlbGwoKSk7
CisgICAgdWludDMyX3QgaW5kZXggPSBPUCgzKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVB
dEluZGV4KGluZGV4KTsKKyAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8ganNTdHJpbmcoZXhlYywg
cHJvcGVydHlOYW1lLT5zdHJpbmcoKSkgOiBqc051bGwoKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCit7CisgICAgQkVHSU4oKTsKKyAgICBSRVRVUk4o
anNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBPUCgyKS5qc1ZhbHVlKCkuYXNV
SW50MzIoKSkuc3RyaW5nKCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTcwODk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNiw2ICsyMjYsMTMgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9pbik7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpOwogU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2hhc19pdGVyYWJsZV9wcm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7CitTTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOworU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
Y3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNCArMjM2LDE5IEBAIFBhc3NSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PiBKU0NlbGw6OmdldFQKICAgICByZXR1cm4gMDsKIH0KIAordWludDMy
X3QgSlNDZWxsOjpnZXRFbnVtZXJhYmxlTGVuZ3RoKFZNJiwgSlNPYmplY3QqKQoreworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSlNDZWxsOjpnZXRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBKU0NlbGw6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTcwODk5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwOSw2ICsyMDksMTEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAg
ICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CisKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB1aW50MzJfdCBnZXRFbnVtZXJh
YmxlTGVuZ3RoKFZNJiwgSlNPYmplY3QqKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIE5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKwogICAg
IHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgY3VzdG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwg
Ym9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODQsNiArMTI4NCwxMiBA
QCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93
blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIFByb3BlcnR5U2xv
dCBzbG90KHRoaXMpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1l
dGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwogYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBleGVjLCB1bnNpZ25lZCBpKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC0xNDgwLDcgKzE0ODYsNyBAQCB2b2lkIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB1c2VkTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5jb250aWd1
b3VzKClbaV0pCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKGkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0
OTIsNyArMTQ5OCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoK
ICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldOwogICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBpKSk7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpKTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNTAzLDcgKzE1MDksNyBAQCB2b2lkIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JM
ZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3Ro
KCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCi0gICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAg
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1h
cC5nZXQoKSkgewpAQCAtMTUxOCw3ICsxNTI0LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iagogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdGQ6OnNvcnQoa2V5
cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOworICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKGtleXNbaV0pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTI2NTIsNCArMjY1OCw4NCBAQCBKU09iamVjdCogdGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
KiBleGVjCiAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKIH0KIAordWludDMyX3QgSlNPYmplY3Q6OmdldEVu
dW1lcmFibGVMZW5ndGgoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQoreworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1Y3R1cmUt
PmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCisgICAgICAgIHJldHVybiAwOworICAg
IHN3aXRjaCAob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lO
REVYSU5HX1RZUEVTOgorICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICB1bnNp
Z25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYg
KCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXNlZExlbmd0aDsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG9iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRM
ZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBkb3VibGUgdmFsdWUg
PSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdXNlZExlbmd0aDsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9y
YWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxl
bmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3Rv
cmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHVzZWRWZWN0b3JMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU09iamVj
dDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworCisgICAgaWYgKG9iamVjdC0+cHJvdG90eXBlKCkuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChvYmplY3QtPnByb3Rv
dHlwZSgpKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAocHJvdG90eXBlLT5zdHJ1
Y3R1cmUodm0pLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkgeworICAg
ICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMocHJv
dG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAg
IEpTVmFsdWUgbmV4dFByb3RvID0gcHJvdG90eXBlLT5wcm90b3R5cGUoKTsKKyAgICAgICAgaWYg
KG5leHRQcm90by5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcm90b3R5
cGUgPSBhc09iamVjdChuZXh0UHJvdG8pOworICAgIH0KK30KKworCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNp
b24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYyLDYgKzQ2Miw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNT
dGF0ZSosIHVuc2lnbmVkKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CkBAIC00NzUsNiArNDc2
LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB1
aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKFZNJiwgSlNPYmplY3QqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OworCiAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICBib29sIGdldFByaW1pdGl2ZU51bWJl
cihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNvbnN0OwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFz
c0luZm8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpzX2luZm8gPSB7ICJKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcikgfTsKKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgaWYgKCF2bS5lbXB0eVByb3BlcnR5
TmFtZUVudW1lcmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVy
dHlOYW1lcygmdm0pOworICAgICAgICB2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IgPSBT
dHJvbmc8SlNDZWxsPih2bSwgY3JlYXRlKHZtLCBwcm9wZXJ0eU5hbWVzKSk7CisgICAgfQorICAg
IHJldHVybiBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4odm0uZW1wdHlQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmdldCgpKTsKK30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzKQoreworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVy
YXRvciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cj4odm0uaGVhcCkpIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgcHJvcGVydHlOYW1lcy5k
YXRhKCkpOworICAgIGVudW1lcmF0b3ItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4g
ZW51bWVyYXRvcjsKK30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IoVk0mIHZtLCBQYXNzUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gaWRl
bnRpZmllcnMpCisgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1
Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2lkZW50aWZpZXJzKGlkZW50aWZpZXJzKQoreworfQorCit2
b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7Cisg
ICAganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpLT5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6On5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9oCisjZGVmaW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9oCisKKyNp
bmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSWRlbnRpZmllcjsK
KworY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIDogcHVibGljIEpTQ2VsbCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIGNyZWF0ZShWTSYpOworICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIGNyZWF0ZShWTSYsIFByb3BlcnR5TmFtZUFycmF5Jik7CisKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
KyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgY29uc3QgSWRlbnRpZmllciogcHJvcGVy
dHlOYW1lQXRJbmRleCh1aW50MzJfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChp
bmRleCA+PSBtX2lkZW50aWZpZXJzLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZtX2lkZW50aWZpZXJzLT5w
cm9wZXJ0eU5hbWVWZWN0b3IoKVtpbmRleF07CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYs
IFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPik7CisgICAgUmVmUHRyPFByb3BlcnR5
TmFtZUFycmF5RGF0YT4gbV9pZGVudGlmaWVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4LDYgKzExOCwxMiBAQCB2b2lkIEpTUHJveHk6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
CiAgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRQ
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKIH0KIAordm9pZCBKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTUHJveHkqPihvYmplY3QpOworICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRo
b2RUYWJsZShleGVjLT52bSgpKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXModGhpc09iamVjdC0+
dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCiB2b2lkIEpTUHJveHk6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDE3MDg5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1By
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMyArMjMsMzQgQEAK
IAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMg
Y29uc3Qgc2l6ZV90IHNldFRocmVzaG9sZCA9IDIwOwotCiB2b2lkIFByb3BlcnR5TmFtZUFycmF5
OjphZGQoU3RyaW5nSW1wbCogaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlkZW50aWZpZXIg
fHwgaWRlbnRpZmllciA9PSBTdHJpbmdJbXBsOjplbXB0eSgpIHx8IGlkZW50aWZpZXItPmlzQXRv
bWljKCkpOwotCi0gICAgc2l6ZV90IHNpemUgPSBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3Rvcigp
LnNpemUoKTsKLSAgICBpZiAoc2l6ZSA8IHNldFRocmVzaG9sZCkgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIg
PT0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXS5pbXBsKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc2V0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgICAgICAgICAgbV9zZXQuYWRkKG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClb
aV0uaW1wbCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fc2V0LmFkZChpZGVudGlmaWVy
KS5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghQVNTRVJUX0RJU0FC
TEVEKSB7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gUHJvcGVydHlOYW1lKElkZW50aWZpZXIo
bV92bSwgaWRlbnRpZmllcikpLmFzSW5kZXgoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpbmRl
eCwgaW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4IHx8IGluZGV4ID49IG1fcHJldmlv
dXNseUVudW1lcmF0ZWRMZW5ndGgpOwogICAgIH0KIAorICAgIGlmICghbV9zZXQuYWRkKGlkZW50
aWZpZXIpLmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybjsKKwogICAgIGFkZEtub3duVW5pcXVl
KGlkZW50aWZpZXIpOwogfQogCit2b2lkIFByb3BlcnR5TmFtZUFycmF5OjpzZXRQcmV2aW91c2x5
RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVt
ZXJhdG9yKQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IDsgKytpKSB7CisgICAgICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdElu
ZGV4KGkpOworICAgICAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgbV9zZXQuYWRkKGlkZW50aWZpZXItPmltcGwoKSk7CisgICAgfQorfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
TmFtZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKKyAgICBjbGFzcyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I7CiAgICAgY2xhc3MgU3RydWN0dXJlOwogICAgIGNsYXNzIFN0cnVjdHVy
ZUNoYWluOwogCkBAIC01Niw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
LCBtX3ZtKHZtKQogICAgICAgICAgICAgLCBtX251bUNhY2hlYWJsZVNsb3RzKDApCiAgICAgICAg
ICAgICAsIG1fYmFzZU9iamVjdCgwKQorICAgICAgICAgICAgLCBtX3ByZXZpb3VzbHlFbnVtZXJh
dGVkTGVuZ3RoKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC02NCwxMSArNjYsMTkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1fdm0oJmV4ZWMtPnZtKCkpCiAgICAgICAg
ICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAgICwgbV9iYXNlT2JqZWN0
KDApCisgICAgICAgICAgICAsIG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgoMCkKICAgICAg
ICAgewogICAgICAgICB9CiAKICAgICAgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92bTsgfQogCisg
ICAgICAgIHZvaWQgYWRkKHVpbnQzMl90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoaW5kZXggPCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGFkZChJZGVudGlmaWVyOjpmcm9tKG1fdm0sIGluZGV4KSk7
CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGFkZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKSB7IGFkZChpZGVudGlmaWVyLmltcGwoKSk7IH0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhZGQoU3RyaW5nSW1wbCopOwogICAgICAgICB2b2lkIGFkZEtub3duVW5pcXVlKFN0
cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBl
bmQoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVyKSk7IH0KQEAgLTgxLDYgKzkxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBy
ZWxlYXNlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5yZWxlYXNlKCk7IH0KIAogICAgICAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgYm9vbCBjYW5BZGRLbm93blVu
aXF1ZUZvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuICFtX3NldC5zaXplKCk7IH0KICAgICAg
ICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7IH0KICAgICAgICAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFt
ZVZlY3RvcigpLmJlZ2luKCk7IH0KQEAgLTEwMCw2ICsxMTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIG1fYmFzZU9iamVjdCA9IG9iamVjdDsKICAgICAgICAgfQogCisgICAgICAg
IHZvaWQgc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgodWludDMyX3QgbGVuZ3RoKSB7IG1f
cHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGggPSBsZW5ndGg7IH0KKyAgICAgICAgdm9pZCBzZXRQ
cmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKik7CisKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nSW1w
bCosIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBJZGVudGlmaWVyU2V0OwogCkBAIC0xMDgsNiArMTIy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNKiBtX3ZtOwogICAgICAgICBzaXplX3Qg
bV9udW1DYWNoZWFibGVTbG90czsKICAgICAgICAgSlNPYmplY3QqIG1fYmFzZU9iamVjdDsKKyAg
ICAgICAgdWludDMyX3QgbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aDsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYg
KzEyMSwxMyBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iCiAgICAg
QmFzZTo6Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQogCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxhc3RJbmRleCk7CisgICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMo
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwogc3RhdGljIGJvb2wgcmVq
ZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVz
c2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg0LDYgKzg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRo
cm93KTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJMb29rdXAu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5
TmFtZUFycmF5LmgiCkBAIC05NTYsNyArOTU2LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3Bl
cnR5TmFtZXNGcm9tU3RydQogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBib29sIGtub3duVW5pcXVlID0gIXByb3BlcnR5TmFtZXMuc2l6ZSgpOworICAg
IGJvb2wga25vd25VbmlxdWUgPSBwcm9wZXJ0eU5hbWVzLmNhbkFkZEtub3duVW5pcXVlRm9yU3Ry
dWN0dXJlKCk7CiAKICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRh
YmxlKCktPmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHBy
b3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtMTIyMyw0
ICsxMjIzLDMwIEBAIGJvb2wgQ2xhc3NJbmZvOjpoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmwKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
KQoreworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2
bSk7CisgICAgcmFyZURhdGEoKS0+c2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwg
ZW51bWVyYXRvcik7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlOjpj
YWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWhhc1JhcmVE
YXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiByYXJlRGF0YSgpLT5j
YWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5D
YWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmIChpc0RpY3Rpb25h
cnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVE9ETzogV2UgcHJvYmFibHkg
ZG9uJ3QgbmVlZCB0aGlzIHNpbmNlIG92ZXJyaWRlbiBwcm9wZXJ0eSBuYW1lcyBhcmUgcGFydCBv
ZiB0aGUgZ2VuZXJpYyBwcm9wZXJ0eSBsb29wLgorICAgIGlmICh0eXBlSW5mbygpLm92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgz
LDYgKzI4MywxMSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoVk0m
LCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKTsgLy8gRGVmaW5lZCBp
biBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
ZW51bWVyYXRpb25DYWNoZSgpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
aC4KKworICAgIHZvaWQgc2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciopOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2Fj
aGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OworICAgIGJvb2wgY2FuQ2FjaGVQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisKICAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKFZNJiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwog
CiAgICAgSlNTdHJpbmcqIG9iamVjdFRvU3RyaW5nVmFsdWUoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNp
b24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFy
ZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGEuaCIKIAorI2luY2x1ZGUgIkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTY4
LDYgKzY5LDE3IEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2aW91cyk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqZWN0VG9TdHJpbmdWYWx1ZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fZW51bWVyYXRpb25DYWNoZSk7CisgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik7Cit9CisKK0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlUmFyZURhdGE6OmNhY2hlZFByb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hlZFByb3BlcnR5TmFt
ZUVudW1lcmF0b3IuZ2V0KCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hl
ZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IpCit7CisgICAgbV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCh2
bSwgdGhpcywgZW51bWVyYXRvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShy
ZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yOwogY2xhc3MgU3RydWN0dXJlOwogCkBAIC02MSw2ICs2Miw5IEBAIHB1
YmxpYzoKICAgICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKik7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKICAg
ICAKQEAgLTcxLDYgKzc1LDcgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3ByZXZpb3VzOwogICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmlu
Z1ZhbHVlOwogICAgIFdyaXRlQmFycmllcjxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1l
cmF0aW9uQ2FjaGU7CisgICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4g
bV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogICAgIAogICAgIHR5cGVkZWYgSGFzaE1h
cDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+LCBXVEY6OkludEhhc2g8UHJv
cGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5
T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9w
ZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0czsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiAr
NjQsNyBAQAogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJKU1Byb21pc2VE
ZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZVJlYWN0aW9uLmgiCisjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTI1
OCw2ICsyNTksNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAg
ICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBub3RBbk9iamVjdFN0cnVjdHVyZS5zZXQoKnRoaXMs
IEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBwcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZ2V0dGVy
U2V0dGVyU3RydWN0dXJlLnNldCgqdGhpcywgR2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgYXBpV3JhcHBlclN0cnVjdHVyZS5zZXQoKnRoaXMs
IEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgSlNTY29wZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU2NvcGU6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYgKzI2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJpbmdTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJl
PiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gcHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gZ2V0dGVyU2V0dGVyU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBh
cGlXcmFwcGVyU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBKU1Njb3BlU3Ry
dWN0dXJlOwpAQCAtMjkxLDYgKzI5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmU7CiAjZW5kaWYKICAgICAgICAg
U3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9uVGVybWluYXRvcjsKKyAgICAgICAgU3Ryb25nPEpTQ2Vs
bD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogCiAgICAgICAgIEF0b21pY1N0cmluZ1Rh
YmxlKiBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJv
cGVydHlOYW1lczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234685</attachid>
            <date>2014-07-09 20:43:54 -0700</date>
            <delta_ts>2014-07-10 19:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140709204337.patch</filename>
            <type>text/plain</type>
            <size>152061</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwOTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MyBA
QAorMjAxNC0wNy0wOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbjoKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRl
Y29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJdGVyYWJsZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6cHVzaE9wdGltaXNlZEZvckluKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGltaXNlZEZvckluKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25SZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjp0cnlHZXRC
b3VuZExvY2FsKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcik6Cisg
ICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdE11bHRpTG9vcEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJl
cml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9E
RkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSXRlcmFibGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTdHJ1
Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXh0RW51bWVyYXRvclBuYW1lKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUhhc0l0ZXJh
YmxlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnQzMkxvYWQpOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9wcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJdGVyYWJsZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pdGVyYWJsZV9wcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9l
bnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9w
bmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdERvdWJsZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3Vz
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnBy
b3BlcnR5TmFtZUF0SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5jcHA6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFkZCk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5TmFtZUFycmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlOYW1lQXJyYXk6OlByb3BlcnR5TmFtZUFycmF5KToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXk6OmFkZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpjYW5B
ZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFy
cmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQ
cm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0
Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisKIDIwMTQtMDctMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbZnRsb3B0XSBHZXQgcmlkIG9mIE5vZGU6Om1pc2MgYnkgbW92aW5nIHRoZSBmaWVs
ZHMgb3V0IG9mIHRoZSB1bmlvbiBzbyB0aGF0IHlvdSBjYW4gdXNlIHJlcGxhY2VtZW50IGFuZCBv
d25lciBzaW11bHRhbmVvdXNseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDgg
QEAKIAkJMUNBQTlBMjMxOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJB
Z2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNB
QTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICov
OyB9OwogCQkyNjAwQjVBNjE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuaCAqLzsgfTsKKwkJMkEwNUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcCAqLzsgfTsKKwkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oICovOyB9OwogCQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVh
c2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsK
IAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIy
NEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi87IH07CiAJCTJBNEJCN0YzMThB
NDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovOyB9OwpAQCAtMjk0OSw2ICsyOTUxLDggQEAK
IAkJMUNBQTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2Vu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdFByb2Zp
bGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFB
NzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEyODI1Q0YxODM0MUYyRDAwODdG
QkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVsYXllZFJlbGVhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIwODUgLyogR0NTZWdtZW50ZWRBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJBMzQzRjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRl
ZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21l
bnRlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk2Myw2
ICs0OTY3LDggQEAKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5o
ICovLAogCQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywK
IAkJCQlDMkI2RDc1MjE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJyaWVySW5saW5lcy5oICov
LAorCQkJCTJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwICovLAorCQkJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC02NTc2LDYgKzY1ODIsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAv
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJF
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJv
ZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNzcyMiw2ICs3NzI5LDcgQEAKIAkJCQk4
Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDgg
LyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDMjBDQjkxODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQx
QzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
NyArMTI1LDE2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2Fs
bCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9k
aWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5k
IiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDog
NCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwg
Imxlbmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eSIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eSIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2dldF9kaXJlY3RfcG5hbWUiLCAibGVuZ3RoIiA6IDcgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRv
ciIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2dlbmVy
aWNfcHJvcGVydHlfZW51bWVyYXRvciIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCisgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfQog
ICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExOCw2ICsxMTgsOSBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9n
ZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZW51bWVy
YWJsZV9sZW5ndGg6CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAg
ICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKQEAgLTE1MCw2ICsxNTMsOSBAQCB2b2lkIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0
cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3Bu
YW1lOgogICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKICAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9i
eV92YWw6CiAgICAgY2FzZSBvcF9pbjoKQEAgLTE3OSw2ICsxODUsOCBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIGNhc2Ug
b3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKICAgICBjYXNlIG9wX2NvbnN0cnVj
dF92YXJhcmdzOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGZ1bmN0b3Io
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CkBAIC0xODYsNiArMTk0LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0
KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ug
b3BfZ2V0X2RpcmVjdF9wbmFtZToKICAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKQEAgLTI5OCw2ICszMDcsMTUgQEAgdm9p
ZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogI3VuZGVmIExMSU5UX0hFTFBF
Ul9PUENPREVTCiAgICAgICAgIHJldHVybjsKICAgICAvLyBUaGVzZSBhbGwgaGF2ZSBhIHNpbmds
ZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfdG9faW5k
ZXhfc3RyaW5nOgorICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoK
KyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNlIG9wX2hhc19pbmRl
eGVkX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBj
YXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFt
ZToKKyAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBj
YXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZToKICAgICBjYXNlIG9wX25leHRfcG5hbWU6CiAg
ICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgogICAgIGNhc2Ugb3Bfc3RyY2F0OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3
MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzk5LDYgKzEzOTksOTEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBC
eXRlY29kZSgKICAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfbmV4dF9wbmFtZSkg
LSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKSAtIDE7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVk
X3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJv
cGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBh
cnJheVByb2ZpbGUgPSBpdFs0XS51LmFycmF5UHJvZmlsZTsKKyAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19pbmRleGVkX3Byb3Bl
cnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcCIsIHJlZ2lzdGVy
TmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHByb3BlcnR5TmFtZSkuZGF0YSgpLCBhcnJheVByb2ZpbGUpOworICAgICAgICAgICAgaXQgKz0g
T1BDT0RFX0xFTkdUSChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkgLSAxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1l
ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFs0XS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09E
RV9MRU5HVEgob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkgLSAxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eTogewor
ICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBi
YXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0
WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm9wX2hhc19nZW5lcmljX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCkpOwor
ICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSkg
LSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRf
ZGlyZWN0X3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
cHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0g
aXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFs1XS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBpdFs2XS51LnByb2Zp
bGU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvcF9nZXRfZGlyZWN0X3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShpbmRleCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpLCBw
cm9maWxlKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2RpcmVjdF9w
bmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAgICAgaW50
IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAib3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShiYXNlKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChv
cF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51
bWVyYXRvcjogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGxlbmd0
aCA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzdHJ1Y3R1cmVFbnVtZXJhdG9y
ID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvciIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUo
ZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShsZW5n
dGgpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHN0cnVjdHVyZUVudW1lcmF0b3IpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRb
MV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9uZXh0X2Vu
dW1lcmF0b3JfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9M
RU5HVEgob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKSAtIDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogeworICAgICAgICAg
ICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0
WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm9wX3RvX2luZGV4X3N0cmluZyIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5k
ZXgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4
X3N0cmluZykgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9wdXNoX3dpdGhfc2NvcGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRoX3Njb3BlIiwgcjApOwpAQCAtMTc5OSw2
ICsxODg0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5kID0gcGNbal0udS5vcGVyYW5k
OwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAocGNbMF0udS5vcGNvZGUpIHsKKyAgICAgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGFycmF5UHJv
ZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2Fy
cmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworCisgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVz
W2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJh
cmdzOgogICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6CkBAIC0xODA5LDYgKzE5MDEsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmls
ZUluZGV4XTsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKICAg
ICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbb3BM
ZW5ndGggLSAxXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQgPT0gLTEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE3MDg5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDM2LDE4ICsxNDM2LDMwIEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXIKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdp
c3RlcklEKiBwcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRT
dGFjay5zaXplKCk7IGkgPiAwOyBpLS0pIHsKLSAgICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0
ID0gbV9mb3JJbkNvbnRleHRTdGFja1tpIC0gMV07Ci0gICAgICAgIGlmIChjb250ZXh0LnByb3Bl
cnR5UmVnaXN0ZXIgPT0gcHJvcGVydHkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfZ2V0
X2J5X3BuYW1lKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKLSAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LmV4cGVjdGVkU3Vic2NyaXB0
UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNv
bnRleHQuaXRlclJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChjb250ZXh0LmluZGV4UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgcmV0
dXJuIGRzdDsKKyAgICAgICAgRm9ySW5Db250ZXh0KiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRT
dGFja1tpIC0gMV0uZ2V0KCk7CisgICAgICAgIGlmIChjb250ZXh0LT5sb2NhbCgpICE9IHByb3Bl
cnR5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFjb250ZXh0LT5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoY29udGV4dC0+dHlwZSgp
ID09IEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dFR5cGUpIHsKKyAgICAgICAgICAg
IHByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8SW5kZXhlZEZvckluQ29udGV4dCo+KGNvbnRleHQpLT5p
bmRleCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
Y29udGV4dC0+dHlwZSgpID09IEZvckluQ29udGV4dDo6U3RydWN0dXJlRm9ySW5Db250ZXh0VHlw
ZSk7CisgICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCogc3RydWN0dXJlQ29udGV4dCA9IHN0
YXRpY19jYXN0PFN0cnVjdHVyZUZvckluQ29udGV4dCo+KGNvbnRleHQpOworICAgICAgICBVbmxp
bmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9kaXJl
Y3RfcG5hbWUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoc3RydWN0dXJlQ29udGV4dC0+aW5kZXgoKS0+aW5kZXgoKSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChzdHJ1Y3R1cmVDb250ZXh0LT5lbnVtZXJhdG9yKCktPmlu
ZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAg
IHJldHVybiBkc3Q7CiAgICAgfQorCiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9m
aWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmls
ZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoa2lsbChkc3QpKTsKQEAgLTIxNjEsNyArMjE3Myw3IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxDb250
cm9sRmxvd0NvbnRleHQ+IHNhdmVkU2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hJbmZvPiBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKLSAgICAgICAgVmVjdG9yPEZvcklu
Q29udGV4dD4gc2F2ZWRGb3JJbkNvbnRleHRTdGFjazsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxGb3JJbkNvbnRleHQ+PiBzYXZlZEZvckluQ29udGV4dFN0YWNrOwogICAgICAgICBW
ZWN0b3I8VHJ5Q29udGV4dD4gcG9wcGVkVHJ5Q29udGV4dHM7CiAgICAgICAgIExhYmVsU2NvcGVT
dG9yZSBzYXZlZExhYmVsU2NvcGVzOwogICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21T
Y29wZSAmJiB0b3BTY29wZS0+aXNGaW5hbGx5QmxvY2spIHsKQEAgLTIxODgsNyArMjIwMCw3IEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAgICAgICAg
ICBtX3N3aXRjaENvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuc3dpdGNoQ29udGV4
dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZmxpcEZvcklucykg
ewotICAgICAgICAgICAgICAgIHNhdmVkRm9ySW5Db250ZXh0U3RhY2sgPSBtX2ZvckluQ29udGV4
dFN0YWNrOworICAgICAgICAgICAgICAgIHNhdmVkRm9ySW5Db250ZXh0U3RhY2suc3dhcChtX2Zv
ckluQ29udGV4dFN0YWNrKTsKICAgICAgICAgICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNrLnNo
cmluayhmaW5hbGx5Q29udGV4dC5mb3JJbkNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGZsaXBUcmllcykgewpAQCAtMjIyOCw3ICsyMjQwLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAgICAgaWYgKGZs
aXBTd2l0Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjayA9IHNhdmVk
U3dpdGNoQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgaWYgKGZsaXBGb3JJbnMpCi0gICAgICAg
ICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjayA9IHNhdmVkRm9ySW5Db250ZXh0U3RhY2s7Cisg
ICAgICAgICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5zd2FwKHNhdmVkRm9ySW5Db250ZXh0
U3RhY2spOwogICAgICAgICAgICAgaWYgKGZsaXBUcmllcykgewogICAgICAgICAgICAgICAgIEFT
U0VSVChtX3RyeUNvbnRleHRTdGFjay5zaXplKCkgPT0gZmluYWxseUNvbnRleHQudHJ5Q29udGV4
dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcG9wcGVkVHJ5
Q29udGV4dHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0yNTYxLDQgKzI1NzMsMTIwIEBAIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICBlbWl0TGFiZWwoc2NvcGUtPmJy
ZWFrVGFyZ2V0KCkpOwogfQogCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEVudW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQorewor
ICAgIGVtaXRPcGNvZGUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFz
ZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRIYXNHZW5lcmljUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgZW1pdE9wY29kZShv
cF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eU5hbWUtPmluZGV4KCkpOworICAgIHJldHVy
biBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSW5kZXhl
ZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCog
cHJvcGVydHlOYW1lKQoreworICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9
IG5ld0FycmF5UHJvZmlsZSgpOworICAgIGVtaXRPcGNvZGUob3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocHJvcGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJy
YXlQcm9maWxlKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQoreworICAgIGVtaXRPcGNvZGUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CisgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0
eU5hbWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChlbnVtZXJhdG9yLT5p
bmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UpCit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfc3RydWN0dXJlX3By
b3BlcnR5X2VudW1lcmF0b3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICByZXR1
cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdlbmVy
aWNQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBS
ZWdpc3RlcklEKiBsZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpCit7Cisg
ICAgZW1pdE9wY29kZShvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxlbmd0aC0+
aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUVudW1lcmF0b3It
PmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCkKK3sKKyAgICBlbWl0T3Bj
b2RlKG9wX25leHRfZW51bWVyYXRvcl9wbmFtZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmlu
ZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7CisgICAg
cmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0lu
ZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpCit7CisgICAgZW1p
dE9wY29kZShvcF90b19pbmRleF9zdHJpbmcpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7
CisgICAgcmV0dXJuIGRzdDsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4
ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4
UmVnaXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbmRleGVkRm9y
SW5Db250ZXh0Pihsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyKSk7Cit9CisKK3ZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVn
aXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAg
bV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPFN0cnVjdHVyZUZvckluQ29udGV4dD4obG9jYWxSZWdpc3RlciwgaW5kZXhS
ZWdpc3RlciwgcHJvcGVydHlSZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyKSk7Cit9CisKK3Zv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCog
bG9jYWxSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6aW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKFJlZ2lzdGVySUQq
IGxvY2FsUmVnaXN0ZXIpCit7CisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNv
bnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0J3Mgc3VmZmljaWVudGx5IAorICAg
IC8vIHJhcmUgdG8gZWl0aGVyICgxKSByZS1hc3NpZ24gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGluIHRoZSBib2R5IG9mIHRoZSBsb29wCisgICAgLy8gb3IgKDIpIGNhcHR1cmUgdGhlIGxv
b3AgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZS4gQmVjYXVzZSBvZiB0aGUgcmFyaXR5IG9mIGVpdGhl
ciBvZiAKKyAgICAvLyB0aGVzZSBzaXR1YXRpb25zLCBpdCdzIG9rYXkgdG8gcG9pc29uIHRoZSBy
ZW1haW5kZXIgb2YgdGhlIGxvb3AgYm9keSB3aGVuZXZlciB3ZSBlbmNvdW50ZXIgdGhlbS4KKyAg
ICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCk7IGkgPiAwOyBpLS0p
IHsKKyAgICAgICAgRm9ySW5Db250ZXh0KiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRTdGFja1tp
IC0gMV0uZ2V0KCk7CisgICAgICAgIGlmIChjb250ZXh0LT5sb2NhbCgpICE9IGxvY2FsUmVnaXN0
ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGV4dC0+aW52YWxpZGF0ZSgp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NywxMSAr
OTcsNzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZpbmFsbHlDb250ZXh0IGZpbmFsbHlD
b250ZXh0OwogICAgIH07CiAKLSAgICBzdHJ1Y3QgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGV4cGVjdGVkU3Vic2NyaXB0UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBpdGVyUmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBp
bmRleFJlZ2lzdGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlSZWdpc3Rl
cjsKKyAgICBjbGFzcyBGb3JJbkNvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9ySW5D
b250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAgICA6IG1fbG9jYWxS
ZWdpc3Rlcihsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB+Rm9ySW5Db250ZXh0KCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pc1ZhbGlkOyB9CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9pc1ZhbGlkID0g
ZmFsc2U7IH0KKworICAgICAgICBlbnVtIEZvckluQ29udGV4dFR5cGUgeworICAgICAgICAgICAg
U3RydWN0dXJlRm9ySW5Db250ZXh0VHlwZSwKKyAgICAgICAgICAgIEluZGV4ZWRGb3JJbkNvbnRl
eHRUeXBlCisgICAgICAgIH07CisgICAgICAgIHZpcnR1YWwgRm9ySW5Db250ZXh0VHlwZSB0eXBl
KCkgY29uc3QgPSAwOworCisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVyOworICAgICAgICBib29sIG1faXNWYWxpZDsK
KyAgICB9OworCisgICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0IDogcHVibGljIEZvcklu
Q29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoUmVn
aXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyKQor
ICAgICAgICAgICAgOiBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwg
bV9pbmRleFJlZ2lzdGVyKGluZGV4UmVnaXN0ZXIpCisgICAgICAgICAgICAsIG1fcHJvcGVydHlS
ZWdpc3Rlcihwcm9wZXJ0eVJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX2VudW1lcmF0b3JSZWdp
c3RlcihlbnVtZXJhdG9yUmVnaXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IHZpcnR1YWwgRm9ySW5Db250ZXh0VHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUZvckluQ29udGV4dFR5cGU7CisgICAgICAg
IH0KKworICAgICAgICBSZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhS
ZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvcGVydHlSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lbnVtZXJhdG9yUmVnaXN0ZXIuZ2V0KCk7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0
ZXI7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICB9OworCisg
ICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSW5kZXhlZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBGb3JJbkNv
bnRleHQobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9pbmRleFJlZ2lzdGVyKGluZGV4
UmVnaXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgRm9ySW5D
b250ZXh0VHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEluZGV4ZWRGb3JJbkNvbnRleHRUeXBlOworICAgICAgICB9CisKKyAgICAgICAgUmVn
aXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0
ZXI7CiAgICAgfTsKIAogICAgIHN0cnVjdCBUcnlEYXRhIHsKQEAgLTQzMSw2ICs0OTYsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0eU5hbWVz
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVnaXN0
ZXJJRCogc2l6ZSwgTGFiZWwqIGJyZWFrVGFyZ2V0KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dE5leHRQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdp
c3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBSZWdpc3RlcklEKiBpdGVyLCBMYWJlbCogdGFy
Z2V0KTsKIAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzSW5kZXhlZFByb3BlcnR5KFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0dlbmVyaWNQcm9w
ZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVu
dW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBs
ZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpOworICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgp
OworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKIAogICAg
ICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVk
LgpAQCAtNDYwLDE2ICs1MzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVz
aEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIHZv
aWQgcG9wRmluYWxseUNvbnRleHQoKTsKIAotICAgICAgICB2b2lkIHB1c2hPcHRpbWlzZWRGb3JJ
bihSZWdpc3RlcklEKiBleHBlY3RlZFN1YnNjcmlwdCwgUmVnaXN0ZXJJRCogaXRlciwgUmVnaXN0
ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0ID0geyBleHBlY3RlZFN1YnNjcmlwdCwgaXRl
ciwgaW5kZXgsIHByb3BlcnR5UmVnaXN0ZXIgfTsKLSAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0
U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwb3BPcHRp
bWlzZWRGb3JJbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2su
cmVtb3ZlTGFzdCgpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIHZvaWQg
cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAgICB2b2lkIHB1
c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRl
eCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOworICAgICAg
ICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChSZWdpc3RlcklEKiBsb2NhbCk7
CiAKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7
CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYp
OwpAQCAtNjY4LDcgKzczNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFZlY3RvcjxD
b250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Njb3BlQ29udGV4
dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250ZXh0U3RhY2s7
Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9ySW5Db250ZXh0U3RhY2s7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9mb3JJbkNvbnRleHRT
dGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4dFN0YWNrOwogICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29uc3QgRGVjb25zdHJ1
Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNSwxMiAr
MTUwNSwxNCBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUocmVzdWx0LmdldCgpLCBsb2NhbC5nZXQoKSk7CiAg
ICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCByZXN1bHQuZ2V0
KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3Vs
dFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCByZXN1bHQuZ2V0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2Nh
bC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLmdl
dCgpLCBsb2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3Vs
dFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOworICAg
ICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsLmdldCgp
KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE1NDAsMTEgKzE1NDIsMTMgQEAgUmVnaXN0ZXJJRCog
QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5nZXQoKSwgbV9yaWdodCk7CiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHRlbXBEc3QuZ2V0KCkpOworICAgICAg
ICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQo
KSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRl
bXBEc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7CisgICAgICAgIGdlbmVyYXRv
ci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQpOwog
ICAgIH0KIApAQCAtMTkyMCwxMDIgKzE5MjQsMjE4IEBAIHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZv
ckluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBGb3JJ
bk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCitSZWdpc3RlcklEKiBGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0KLSAgICBpZiAoIW1fbGV4
cHItPmlzQXNzaWdubWVudExvY2F0aW9uKCkpIHsKLSAgICAgICAgZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoZ2VuZXJhdG9yLCAiTGVmdCBzaWRlIG9mIGZvci1pbiBzdGF0ZW1lbnQgaXMgbm90IGEg
cmVmZXJlbmNlLiIpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2
ZU5vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKKyAgICAgICAgTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAobG9jYWwuaXNDYXB0dXJl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBsb2NhbC5n
ZXQoKTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0
YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsK
KyAgICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgeworICAgICAgICBEZWNv
bnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVjb25z
dHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIpOworICAgICAgICBhdXRvIGJpbmRpbmcg
PSBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlzQmluZGlu
Z05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNpemUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4cGVjdGVk
U3Vic2NyaXB0OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyID0gZ2VuZXJhdG9yLmVtaXRH
ZXRQcm9wZXJ0eU5hbWVzKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgaS5n
ZXQoKSwgc2l6ZS5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgIGdlbmVyYXRvci5l
bWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGF1dG8gc2ltcGxlQmlu
ZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOworICAg
ICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmIChs
b2NhbC5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGxvY2FsLmdldCgpOworICAgIH0KIAotICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3Rh
cnQuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KIAotICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKLSAgICBib29sIG9wdGlt
aXplZEZvcmluQWNjZXNzID0gZmFsc2U7Cit2b2lkIEZvckluTm9kZTo6ZW1pdExvb3BIZWFkZXIo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQor
ewogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVu
dGlmaWVyKCk7CiAgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsK
LSAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSkgewotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAgIGlmIChsb2NhbC5nZXQoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQog
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpZGVu
dCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIGdlbmVyYXRvci5pc1N0cmljdE1vZGUo
KSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZXhwZWN0ZWRTdWJzY3JpcHQuZ2V0
KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGltaXNlZEZvckluKGV4cGVjdGVk
U3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdldCgpLCBsb2NhbC5nZXQoKSk7Ci0gICAg
ICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAobV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBE
b3RBY2Nlc3Nvck5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUq
PihtX2xleHByKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBhc3NpZ25Ob2Rl
LT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5h
bWU7CiAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWdu
Tm9kZS0+YmFzZSgpKTsKLQogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFz
c2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWduTm9kZS0+
ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBpZGVudCwg
cHJvcGVydHlOYW1lKTsKLSAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHItPmlzQnJh
Y2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGFzc2ln
bk5vZGUgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7Ci0gICAg
ICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CiAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShhc3Np
Z25Ob2RlLT5zdWJzY3JpcHQoKSk7Ci0gICAgICAgIAogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQo
KSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlW
YWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgp
KSB7CiAgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqIGFzc2lnbk5vZGUgPSBz
dGF0aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKj4obV9sZXhwcik7CiAgICAg
ICAgIGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJpbmRpbmdzKCk7Ci0gICAgICAgIGlmIChi
aW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2ltcGxlQmluZGlu
ZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7Ci0gICAgICAgICAgICBJZGVu
dGlmaWVyIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICAg
ICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICAgICAgcHJv
cGVydHlOYW1lID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIEkg
ZW1pdCBleHByZXNzaW9uIGluZm8gaGVyZT8KLSAgICAgICAgICAgIGlmICghcHJvcGVydHlOYW1l
IHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSB8fCBnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkKLSAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNCaW5kaW5nOwotICAg
ICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLnB1
c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQoKSwgaS5n
ZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZvcmluQWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gY29tcGxldGVkU2ltcGxlQmluZGluZzsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgZ2VuZXJpY0JpbmRpbmc6Ci0gICAgICAgICAgICBwcm9wZXJ0eU5h
bWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvdGVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlzQmlu
ZGluZ05vZGUoKSkgewogICAgICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3MoKS0+YmluZFZh
bHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBjb21wbGV0ZWRTaW1wbGVCaW5kaW5nOgotICAgICAgICA7CisKKyAgICAg
ICAgYXV0byBzaW1wbGVCaW5kaW5nID0gc3RhdGljX2Nhc3Q8QmluZGluZ05vZGUqPihiaW5kaW5n
KTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzaW1wbGVCaW5kaW5nLT5ib3Vu
ZFByb3BlcnR5KCk7CisgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50
KTsKKyAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSB8fCBsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAg
ICAgICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBpZiAob3B0aW1pemVk
Rm9yaW5BY2Nlc3MpCi0gICAgICAgIGdlbmVyYXRvci5wb3BPcHRpbWlzZWRGb3JJbigpOwordm9p
ZCBGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1l
bnRMb2NhdGlvbigpKSB7CisgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRv
ciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxMYWJlbD4gZW5kID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51
ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5leHRQcm9wZXJ0eU5hbWUocHJvcGVydHlO
YW1lLCBiYXNlLmdldCgpLCBpLmdldCgpLCBzaXplLmdldCgpLCBpdGVyLmdldCgpLCBsb29wU3Rh
cnQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVt
ZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwotICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworCisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGxlbmd0aDsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RydWN0dXJlRW51
bWVyYXRvcjsKKyAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9leHByKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlzLT50cnlHZXRCb3VuZExvY2FsKGdlbmVy
YXRvcik7CisKKyAgICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AuCisgICAgeworICAgICAgICBM
YWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6
TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworCisgICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJsZUxlbmd0
aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFt
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExh
YmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsK
KworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRFcXVh
bGl0eU9wKG9wX2xlc3MsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3Ro
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0luZGV4ZWRQcm9wZXJ0
eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwor
CisgICAgICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCks
IGkuZ2V0KCkpOworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3Bl
cnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hJbmRleGVkRm9ySW5TY29w
ZShsb2NhbC5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEluZGV4ZWRGb3JJblNjb3BlKGxv
Y2FsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51
ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdl
dCgpKTsKKyAgICB9CisKKyAgICAvLyBTdHJ1Y3R1cmUgcHJvcGVydHkgbG9vcC4KKyAgICB7Cisg
ICAgICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJl
bFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsKCk7CisKKyAgICAgICAgc3RydWN0dXJlRW51bWVyYXRvciA9IGdlbmVyYXRvci5l
bWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9y
LmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHBy
b3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
c3VsdCA9IGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9lcV9udWxsLCBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVy
dHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmVFbnVtZXJhdG9yLmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIHNjb3BlLT5jb250aW51ZVRhcmdldCgp
KTsKKworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFt
ZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKGxv
Y2FsLmdldCgpLCBpLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0
b3IuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7
CisgICAgICAgIGdlbmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsK
KworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1
cmVFbnVtZXJhdG9yLmdldCgpLCBpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KHNjb3BlLT5icmVha1RhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5n
ZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CisgICAg
fQorCisgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAgTGFiZWxT
Y29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3Ap
OworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
KworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2VuZXJpY0VudW1lcmF0b3IgPSBnZW5lcmF0
b3IuZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBiYXNlLmdldCgpLCBsZW5ndGguZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCkp
OworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZ2VuZXJpY0VudW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2Vu
ZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIC8vIFRPRE86IE9wdGltaXpl
IGZvci1pbgorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SW5jKGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZ2VuZXJpY0Vu
dW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Ao
b3BfZXFfbnVsbCwgcmVzdWx0LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIAorICAgICAgICBn
ZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9v
cEVuZC5nZXQoKSk7CisgICAgfQorCisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZz
ZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOworfQorCit2b2lkIEZv
ckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKK3sKKyAgICB0aGlzLT5lbWl0TXVsdGlMb29wQnl0ZWNvZGUoZ2VuZXJhdG9y
LCBkc3QpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9yT2ZOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUzLDEzICsx
NzUzLDUxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEluOgorICAgIGNhc2UgSW46IHsK
ICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVm
aW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKICAgICAgICAgLy8gdmFsdWUgaW5mb3Jt
YXRpb24uCiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2Ji
ZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAorICAgIGNhc2UgR2V0RW51bWVyYWJs
ZUxlbmd0aDogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7CisgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXREaXJlY3RQ
bmFtZTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogewor
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShT
cGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRHbG9iYWxW
YXI6CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxODMsNiArMzE4Myw4MSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9pbik7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIG9wX2dldF9lbnVtZXJh
YmxlX2xlbmd0aDogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRFbnVtZXJhYmxlTGVuZ3RoLCAK
KyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJv
cGVydHk6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSGFzR2VuZXJpY1Byb3BlcnR5LCAKKyAgICAg
ICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFz
X2dlbmVyaWNfcHJvcGVydHkpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEhhc1N0cnVjdHVyZVByb3Bl
cnR5LCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlN
b2RlQ29uc2lkZXJpbmdTbG93UGF0aChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAg
ICBOb2RlKiBoYXNJdGVyYWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChIYXNJbmRleGVkUHJvcGVy
dHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBiYXNlLCBwcm9wZXJ0eSk7CisgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LCBoYXNJdGVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19p
bmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVj
dF9wbmFtZTogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFBy
ZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2Rl
KiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogaW5k
ZXggPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
KTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKTsKKworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoYmFzZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCksIAorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9k
ZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikp
KTsKKworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2RpcmVjdF9wbmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRv
cjogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3Is
IAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfc3RydWN0
dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEdl
dEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAg
ICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
LAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZ2VuZXJp
Y19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfbmV4
dF9lbnVtZXJhdG9yX3BuYW1lOiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKE5leHRFbnVtZXJhdG9y
UG5hbWUsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoVG9JbmRleFN0
cmluZywgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2lu
ZGV4X3N0cmluZyk7CisgICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Ly8gUGFyc2UgZmFpbGVkISBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGJlY2F1c2UgdGhlIGNhcGFi
aWxpdGllcyBjaGVja2VyCiAgICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBjYXVnaHQgaXQuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsMTUgQEAgQ2FwYWJpbGl0eUxl
dmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CiAg
ICAgY2FzZSBvcF9pbjoKICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgIGNhc2Ugb3Bf
Z2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6
CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgIGNhc2Ug
b3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3BfZ2V0X2dl
bmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9w
bmFtZToKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAgICAgICAgcmV0dXJuIENhbkNv
bXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3MDg5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsNiArMTI0LDgzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICBjYXNlIE1ha2VSb3BlOgogICAgICAgICByZXR1cm47CiAgICAgICAgIAor
ICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0
eToKKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgR2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRv
cjoKKyAgICBjYXNlIEdldERpcmVjdFBuYW1lOgorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFt
ZToKKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgLy8gVE9ETzogRG8gdGhlIHJp
Z2h0IHRoaW5nIGZvciBlYWNoIG9mIHRoZXNlIG9wcy4KKyAgICAgICAgcmVhZChXb3JsZCk7Cisg
ICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAgIHJlYWQoSlNDZWxsX2luZGV4aW5nVHlwZSk7
CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgQXJyYXlNb2RlIG1v
ZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewor
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJv
dW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAg
ICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAg
ICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgICAgIGlmIChtb2Rl
LmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAg
ICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAg
ICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9y
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGll
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlf
dmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEFycmF5U3RvcmFnZVByb3BlcnRp
ZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgcmVhZChX
b3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2Ug
Wm9tYmllSGludDoKICAgICBjYXNlIFVwc2lsb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsMTEg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5
T2Zmc2V0OgorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNlIEhhc0dlbmVy
aWNQcm9wZXJ0eToKKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTIwOSw2ICsyMTQsMTAg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTmV3RnVu
Y3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3VHlwZWRBcnJheToKICAgICBjYXNlIFRocm93
UmVmZXJlbmNlRXJyb3I6CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6
CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgTmV4dEVu
dW1lcmF0b3JQbmFtZToKKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDg5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMzAsNiArMTAzMCw2MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG9i
c2VydmVVc2VLaW5kT25Ob2RlPFN0cmluZ1VzZT4obm9kZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7
CisgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7Cisg
ICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoCisgICAgICAgICAgICAgICAgbm9kZS0+YXJy
YXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAorICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAg
ICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9k
ZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5h
bWU6IHsKKyAgICAgICAgICAgIEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApOworICAgICAgICAgICAgRWRnZSYgcHJvcGVydHkgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpOworICAgICAgICAgICAgRWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOworICAgICAgICAgICAgRWRnZSYgZW51bWVyYXRvciA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMyk7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGJhc2UpOworICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KHByb3BlcnR5KTsKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KGVudW1lcmF0b3IpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGZpeEVk
Z2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAg
ICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxL
bm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBmaXhFZGdl
PEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhh
dmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0
byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05OTQsNiArOTk0LDcgQEAgc3RydWN0IE5v
ZGUgewogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgc3dpdGNo
IChvcCgpKSB7CisgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgR2V0
QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6
CkBAIC0xMjU0LDYgKzEyNTUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlp
ZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgQXJy
YXlQb3A6CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzA4
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4OCw2ICsyODgsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjaywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIFwKKyAgICAvKiBGb3ItaW4gZW51bWVyYXRpb24gb3Bj
b2RlcyAqL1wKKyAgICBtYWNybyhHZXRFbnVtZXJhYmxlTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSGFzSW5kZXhlZFByb3BlcnR5LCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFj
cm8oSGFzR2VuZXJpY1Byb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKKyAgICBtYWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVI
YXNWYXJBcmdzIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oR2V0U3RydWN0dXJlUHJvcGVy
dHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFj
cm8oR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVS
ZXN1bHRKUykgXAorICAgIG1hY3JvKE5leHRFbnVtZXJhdG9yUG5hbWUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0
SlMpCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcg
aWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNlcXVlbnQg
ZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlkTWFzayku
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAg
IGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAg
ICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBO
YXRpdmVDYWxsOgpAQCAtNTUwLDYgKzU1MSwzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwog
CisgICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlF
bnVtZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Nl
bGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRHZW5l
cmljUHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oU3BlY0NlbGwgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNh
dXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgogICAgICAgICBjYXNlIFN0b3JlQmFycmll
cjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCwxNSBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBj
YXNlIEdldEdldHRlcjoKICAgICBjYXNlIEdldFNldHRlcjoKKyAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6CisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6CisgICAgY2FzZSBIYXNTdHJ1
Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOgor
ICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIE5leHRFbnVt
ZXJhdG9yUG5hbWU6CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU4Miw2ICs0NTgyLDQzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBHZXRFbnVt
ZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6IHsK
KyAgICAgICAgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eShub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGls
ZUhhc1N0cnVjdHVyZVByb3BlcnR5KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0RGlyZWN0UG5h
bWU6IHsKKyAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAg
ICAgICAgY29tcGlsZUdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjog
eworICAgICAgICBjb21waWxlR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAg
ICAgICBjb21waWxlTmV4dEVudW1lcmF0b3JQbmFtZShub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICBjb21waWxlVG9JbmRleFN0
cmluZyhub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAjaWYgRU5BQkxFKEZUTF9KSVQp
ICAgICAgICAKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOiB7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hBZGQzMigKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNzA4
OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2Vu
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXJCdWZmZXIuaCIK
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtNTUzMCw2ICs1NTMxLDIxNSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyCiB9CiAjZW5kaWYgLy8gRU5BQkxF
KEdHQykKIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgo
Tm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uR2V0RW51bWVyYWJsZUxlbmd0aCwgcmVzdWx0R1BSLCBiYXNlLmdw
cigpKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTSW50
MzIpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5
KE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSwg
cHJvcGVydHkuZ3ByKCkpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc1N0
cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0
b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZXN1bHRHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgcmVzdWx0
R1BSLCAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisK
KyAgICBtb3ZlVHJ1ZVRvKHJlc3VsdEdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzR2VuZXJpY1Byb3Bl
cnR5LCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIHByb3BlcnR5LmdwcigpKTsKKworICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRl
eC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBBcnJheU1vZGUgbW9kZSA9IG5v
ZGUtPmFycmF5TW9kZSgpOworICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIEFTU0VS
VCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5n
cHIoKTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdEdQUik7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBy
ZXN1bHRHUFIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZTogeworICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBGUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNoLmZw
cigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRjaEZQUik7CisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9y
VW5vcmRlcmVkLCBzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgQVNTRVJUKCEhbm9k
ZS0+Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUt
PmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwor
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgIG1faml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgbW92ZVRydWVUbyhyZXN1bHRH
UFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHksIHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIpKTsK
KyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKiBub2RlKQoreworICAgIEVkZ2UmIGJhc2VFZGdl
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICBFZGdlJiBwcm9wZXJ0
eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgIEVkZ2UmIGlu
ZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CisgICAgRWRnZSYg
ZW51bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOworCisg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgcHJvcGVydHlFZGdlKTsKKyAgICBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKKyAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3Bl
cnR5LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJl
ZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVz
dWx0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgIHJlc3VsdEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgCisgICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9y
J3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIAorICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5tb3ZlKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChi
YXNlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgLy8gT3RoZXJ3aXNlIGl0
J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOworICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKKyAg
ICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBt
X2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCAKKyAgICAgICAgLTIgKiBzdGF0aWNfY2Fz
dDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSksIHJlc3VsdEdQUik7CisgICAKKyAg
ICBkb25lLmxpbmsoJm1faml0KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdEdQUiwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFN0cnVjdHVyZVByb3Bl
cnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3IsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2VuZXJpY1Byb3Bl
cnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBsZW5n
dGgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRHZW5lcmljUHJvcGVydHlFbnVt
ZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIGxlbmd0aC5ncHIoKSwgZW51bWVyYXRvci5n
cHIoKSk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV4dEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQoreworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5leHRFbnVtZXJhdG9yUG5hbWUsIHJlc3VsdEdQUiwgZW51bWVyYXRvci5ncHIoKSwgaW5k
ZXguZ3ByKCkpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9kZSkKK3sKKyAg
ICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
IEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Ub0luZGV4U3RyaW5nLCByZXN1bHRHUFIsIGluZGV4LmdwcigpKTsKKyAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw2ICszMDEsMTYgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqKTsKIAorICAgIHZv
aWQgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUhh
c0dlbmVyaWNQcm9wZXJ0eShOb2RlKik7CisgICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJv
cGVydHkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKik7
CisgICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZUdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihOb2RlKik7CisgICAgdm9pZCBjb21waWxl
R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihOb2RlKik7CisgICAgdm9pZCBjb21waWxlTmV4
dEVudW1lcmF0b3JQbmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhO
b2RlKik7CisKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNl
cnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBH
UFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlNCA9IEludmFs
aWRHUFJSZWcpCiAgICAgewogICAgICAgICByZXR1cm4gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKHByZXNlcnZlMSwgcHJlc2VydmUyLCBwcmVzZXJ2ZTMsIHByZXNlcnZlNCk7CkBA
IC0xMjQ4LDYgKzEyNTgsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
Q1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FU3NpQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBs
KiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CkBAIC0x
MjYzLDYgKzEyNzgsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CkBAIC0xMzExLDYgKzEzMzYs
MTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSkpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
SklUT3BlcmF0aW9uX0VKWkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Cisg
ICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19KSVRPcGVyYXRpb25f
SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw2ICszMDMsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZV9zY29wZSkKICAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX3Njb3BlKQogICAgICAgICBERUZJTkVfT1Aob3Bf
cHV0X3RvX3Njb3BlKQorCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSkKKyAgICAgICAg
REVGSU5FX09QKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCisgICAgICAgIERFRklORV9PUChv
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2dldF9kaXJlY3Rf
cG5hbWUpCisgICAgICAgIERFRklORV9PUChvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1l
cmF0b3IpCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJh
dG9yKQorICAgICAgICBERUZJTkVfT1Aob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKQorICAgICAg
ICBERUZJTkVfT1Aob3BfdG9faW5kZXhfc3RyaW5nKQogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpAQCAtNDIwLDYg
KzQzMCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF90
b19udW1iZXIpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF90b19wcmltaXRpdmUpCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKKyAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCisgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZGlyZWN0X3BuYW1lKQogCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9yZXNvbHZlX3Njb3BlKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2Zyb21fc2NvcGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlz
aW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNyw2ICsyMjcsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBq
aXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5
TW9kZSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CisgICAg
ICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsK
KyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0
aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChWTSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1
bmMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghdm0tPmNhblVzZUpJVCgpKSB7CkBAIC0y
NTYsNiArMjYzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAorICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9k
ZSk7CisKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFZNKiwgYm9v
bCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKICAgICAgICAgQ29kZVJlZiBwcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoVk0qLCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7
CkBAIC0zMzYsNiArMzQ1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBQcm9wZXJ0
eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQu
CiAgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBz
bG93IGNhc2VzLiBGYWxsLXRocm91Z2gKICAgICAgICAgLy8gY2FzZSBjb250YWlucyByZXN1bHQg
aW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2ZpbGVkLgorICAgICAgICBKdW1wTGlzdCBl
bWl0SW50MzJMb2FkKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSkgeyByZXR1cm4gZW1pdENvbnRpZ3VvdXNMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlLCBJ
bnQzMlNoYXBlKTsgfQorICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlTG9hZChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGln
dW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5
cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CisgICAgICAgIEp1bXBMaXN0IGVt
aXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7
CisKICAgICAgICAgSnVtcExpc3QgZW1pdEludDMyR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKSB7IHJldHVybiBlbWl0Q29udGlndW91c0dl
dEJ5VmFsKGluc3RydWN0aW9uLCBiYWRUeXBlLCBJbnQzMlNoYXBlKTsgfQogICAgICAgICBKdW1w
TGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlID0g
Q29udGlndW91c1NoYXBlKTsKQEAgLTU0OSw2ICs1NjMsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF91cnNoaWZ0KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZW51
bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2hhc19n
ZW5lcmljX3Byb3BlcnR5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0
X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiopOwog
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2JpdGFuZChJ
bnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTYwMiw2
ICs2MjUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90b19w
cmltaXRpdmUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdXJz
aGlmdChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9kaXJlY3Rf
cG5hbWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAK
ICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDI0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0RG91YmxlTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgbW92ZURvdWJsZVRvNjQo
ZnBSZWdUMCwgcmVnVDApOworICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCit7
CisgICAgcmV0dXJuIGVtaXRDb250aWd1b3VzTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgZXhw
ZWN0ZWRTaGFwZSk7Cit9CisKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjpl
bWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKQoreworICAgIHJldHVybiBlbWl0QXJyYXlTdG9yYWdlTG9hZChpbnN0
cnVjdGlvbiwgYmFkVHlwZSk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFu
ZENvbnN0YW50SW1tZWRpYXRlRG91YmxlKGludCBzcmMpCiB7CiAgICAgcmV0dXJuIG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChz
cmMpLmlzRG91YmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDExIEBACiAjaW5jbHVkZSAi
SlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5o
IgogCkBAIC0xMjEwLDYgKzEyMTIsMjYzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJl
ZF9tb3YoSW5zdHIKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAg
ICAKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2hhc19nZW5lcmljX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJ
VEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEpJVEludDMyOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJMb2FkKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURG91YmxlOgor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gVE9ETzogQWRk
IHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOworCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAg
IHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJl
c3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93
UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAg
ICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigK
KyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGhh
c19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJp
bmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAor
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwo
YnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0
eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwor
CisgICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVu
ZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCisgICAg
Ly8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBt
X3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKKyAgICAvLyBudW1iZXIg
d2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1h
eCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KKyAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNz
IHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0
IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQorICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5
IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRl
bmQgcmF0aGVyIHRoYW4gc2lnbgorICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBl
YXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgorICAgIHplcm9FeHRl
bmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcmVnVDIsIHByb2ZpbGUpOworICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBl
TWFzayksIHJlZ1QyKTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShw
cm9maWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDMyOgorICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0SW50MzJMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURG91YmxlOgorICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RG91YmxlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRD
b250aWd1b3VzTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFy
cmF5U3RvcmFnZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVnVDApOworCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwg
YmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
aXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAo
KTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKKyAgICBKdW1w
IG5vdFN0cmluZyA9IGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgCisgICAgICAgIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAorICAgICAgICBtX3ZtLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIGJyZWFrcG9pbnQoKTsKKy8qCisgICAgVE9ETzogRmln
dXJlIG91dCB3aGF0IHRvIGRvIGZvciBzdHJpbmdzLgorICAgIGVtaXROYWtlZENhbGwoQ29kZUxv
Y2F0aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3Ip
LmNvZGUoKSkpOworICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CisgICAgZmFpbGVk
LmxpbmsodGhpcyk7CisqLworICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOworICAgIG5vbkNlbGwu
bGluayh0aGlzKTsKKyAgICAKKyAgICBKdW1wIHNraXBQcm9maWxpbmcgPSBqdW1wKCk7CisgICAg
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgIAorICAgIGVtaXRBcnJheVByb2Zp
bGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIHNraXBQcm9maWxp
bmcubGluayh0aGlzKTsKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisgICAg
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwgcmVn
VDEpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0
X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kOworCisgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisg
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOworICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAtMiAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKSwgcmVnVDApOworICAgIAorICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3Rf
cG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1l
KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
c3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7
CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dl
bmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9lbnVtZXJh
dG9yX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJK
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSlNTdGFja0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dpdGhTY29w
ZS5oIgpAQCAtMTUwMiw2ICsxNTAzLDY0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAg
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0
eURlZmF1bHQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgCisg
ICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoc3Vic2NyaXB0Lmlz
VUludDMyKCkpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7
CisgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworCisgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSBleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsKKyAgICBBU1NFUlQoYnl0
ZWNvZGVPZmZzZXQpOworICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmdldEJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOworICAgIEFTU0VSVCghYnlWYWxJ
bmZvLnN0dWJSb3V0aW5lKTsKKyAgICAKKyAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhv
YmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CisgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUu
CisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1
cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZh
bEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAgICAgICBKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOworICAgICAgICAgICAgZGlkT3B0aW1p
emUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghZGlkT3B0aW1pemUp
IHsKKyAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdp
dGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAgLy8gbmV2ZXIgbWFrZSB0
aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUg
c29tZSBvYmplY3QKKyAgICAgICAgLy8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVu
IGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2VzCisgICAgICAgIC8vIHdo
ZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAg
aXRlcmF0aW9ucyB3b3J0aCBvZgorICAgICAgICAvLyBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2Jz
ZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4KKyAgICAgICAgaWYg
KCsrYnlWYWxJbmZvLnNsb3dQYXRoQ291bnQgPj0gMTAKKyAgICAgICAgICAgIHx8IG9iamVjdC0+
c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGV2
ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
Q2FsbGVyVG9GdW5jdGlvbihSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1
bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdC5hc1VJbnQzMigpKSkpOworfQorICAgIAor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlH
ZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIAorICAg
IEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgQVNTRVJUKHN1YnNjcmlwdC5pc1VJ
bnQzMigpKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHko
ZXhlYywgc3Vic2NyaXB0LmFzVUludDMyKCkpKSk7Cit9CisgICAgCiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE4MDIsNiArMTg2MSw5OCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVk1IYW5kbGVFeGNlCiAgICAgZ2VuZXJpY1Vud2luZCh2
bSwgZXhlYywgdm0tPmV4Y2VwdGlvbigpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBpZiAo
YmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoMCkpOworCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9P
YmplY3QoZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihiYXNlLT5t
ZXRob2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgodm0sIGJhc2UpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5
TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU09iamVjdCogYmFzZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlVmFsdWUpLnRvT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5TmFt
ZSktPnRvSWRlbnRpZmllcihleGVjKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgaW50MzJfdCBzdWJzY3JpcHQpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwor
ICAgIAorICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisKKyAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdCkpKTsKK30KKyAg
ICAKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVu
dW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVl
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZt
KTsKKyAgICAgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhl
Yyk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOworICAg
IGlmIChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBzdHJ1Y3R1cmUtPmNh
Y2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIGVudW1lcmF0b3I7
CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSkKKyAg
ICAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtKTsKKworICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CisgICAgYmFzZS0+bWV0aG9k
VGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworCisgICAgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lcyk7CisgICAgaWYgKHN0cnVjdHVyZS0+Y2FuQ2Fj
aGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHN0cnVjdHVyZS0+c2V0Q2FjaGVk
UHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7CisgICAgcmV0dXJuIGVudW1l
cmF0b3I7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmljUHJv
cGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2VWYWx1ZSwgaW50MzJfdCBsZW5ndGgsIEpTQ2VsbCogZW51bWVyYXRvcikKK3sKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZVZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
IHJldHVybiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisgICAgCisgICAg
SlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KGVudW1lcmF0b3IpOworCisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjKTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJh
dGVkTGVuZ3RoKGxlbmd0aCk7CisgICAgcHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVy
YXRlZFByb3BlcnRpZXMoc3RydWN0dXJlRW51bWVyYXRvcik7CisgICAgYmFzZS0+bWV0aG9kVGFi
bGUodm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAKKyAgICByZXR1cm4gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIGJhc2UtPnN0cnVjdHVyZSh2bSksIHByb3BlcnR5
TmFtZXMpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5leHRF
bnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGVudW1lcmF0b3JDZWxsLCBp
bnQzMl90IGluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVt
ZXJhdG9yQ2VsbCk7CisgICAgY29uc3QgSWRlbnRpZmllciogcHJvcGVydHlOYW1lID0gZW51bWVy
YXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShwcm9wZXJ0eU5hbWUgPyBqc1N0cmluZyhleGVjLCBwcm9wZXJ0eU5hbWUtPnN0cmluZygp
KSA6IGpzTnVsbCgpKTsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvSW5k
ZXhTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGluZGV4KQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGluZGV4
KS5zdHJpbmcoKSk7Cit9CisKIH0gLy8gZXh0ZXJuICJDIgogCiAvLyBOb3RlOiBnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNp
b24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMyBAQCB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNJKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAo
KkpfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7CiB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FREEpKEV4
ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUUpKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSopOwog
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUkp
KEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9F
SlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKQykoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
SlNBcnJheSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUpJZGMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBjb25zdCBJZGVudGlm
aWVyKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBA
IC0xMjEsNiArMTI0LDggQEAgdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9w
ZQogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQ0MpKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gKCpDX0pJVE9wZXJhdGlvbl9FSWNmKShFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsK
IHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUopKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgq
Q19KSVRPcGVyYXRpb25fRUpaQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3Qs
IEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlv
bl9FSkpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEpTQ2Vs
bCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNz
U3QpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CiB0eXBlZGVmIEpTQ2VsbCog
SklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRUpzc0pzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyosIEpT
U3RyaW5nKik7CkBAIC0yNzcsNiArMjgyLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRC
eVZhbERlZmF1bHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5
VmFsU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25U
ZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJZChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBiYXNlLCBjb25zdCBJZGVudGlmaWVyKikgV1RGX0lOVEVS
TkFMOwpAQCAtMzAwLDYgKzMwNywxNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NS
V3JpdGVCYXJyCiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ29uc3Qo
RXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qKTsKIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
KTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3Bl
cnR5KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqKTsKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
OworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3IoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIEpTQ2VsbCopOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXh0RW51bWVyYXRvclBuYW1lKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CisKIH0gLy8gZXh0ZXJuICJD
IgogCiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rRm9yKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8u
YXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1v
ZGUsIGRvbmUpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVHZXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewog
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAgLTE2MCwxMyArMTYwLDExIEBAIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW4KICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICBsb2FkRG91YmxlKEJhc2VJbmRleChyZWdU
MiwgcmVnVDEsIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QwKSk7
Ci0gICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVnVDApOwotICAgIHN1YjY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOwogICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAK
LUpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCitKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCiB7CiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIApAQCAtMTc5LDcgKzE3Nyw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0Q29udGlndW91c0dldEJ5VmEKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
TG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEyMTAsNiArMTIxMCw1MCBAQCBfbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToK
IF9sbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgbmF0aXZlQ2FsbFRyYW1w
b2xpbmUoTmF0aXZlRXhlY3V0YWJsZTo6bV9jb25zdHJ1Y3RvcikKIAorX2xsaW50X29wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRo
KF9zbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorICAgIGRpc3BhdGNoKDMpCisKK19s
bGludF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAg
Y2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpCisgICAgZGlzcGF0
Y2goNSkKKworX2xsaW50X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgdHJhY2VFeGVj
dXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkpCisgICAgZGlzcGF0Y2goNSkKKworX2xsaW50X29wX2hhc19nZW5lcmljX3Byb3BlcnR5Ogor
ICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9oYXNfZ2Vu
ZXJpY19wcm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg0KQorCitfbGxpbnRfb3BfZ2V0X2RpcmVjdF9w
bmFtZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhf
Z2V0X2RpcmVjdF9wbmFtZSkKKyAgICBkaXNwYXRjaCg3KQorCitfbGxpbnRfb3BfZ2V0X3N0cnVj
dHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxs
U2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCisg
ICAgZGlzcGF0Y2goMykKKworX2xsaW50X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0
b3I6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dl
dF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgZGlzcGF0Y2goNSkKKworX2xsaW50
X29wX25leHRfZW51bWVyYXRvcl9wbmFtZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2Fs
bFNsb3dQYXRoKF9zbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKQorICAgIGRpc3BhdGNo
KDQpCisKK19sbGludF9vcF90b19pbmRleF9zdHJpbmc6CisgICAgdHJhY2VFeGVjdXRpb24oKQor
ICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKKyAgICBkaXNwYXRj
aCgzKQogCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2gg
d2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2
ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4
MCw2ICsxMjgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGb3JJbk5vZGUoVk0qLCBj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiwgRXhwcmVz
c2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBSZWdp
c3RlcklEKiB0cnlHZXRCb3VuZExvY2FsKEJ5dGVjb2RlR2VuZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdExvb3BIZWFkZXIoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBwcm9wZXJ0
eU5hbWUpOworICAgICAgICB2b2lkIGVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqIGRzdCk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAg
fTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFz
c0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTIgQEAgc3RydWN0IE1ldGhvZFRh
YmxlIHsKICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpT
T2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUp
OwogICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVzOwogCisg
ICAgdHlwZWRlZiB1aW50MzJfdCAoKkdldEVudW1lcmFibGVMZW5ndGhGdW5jdGlvblB0cikoVk0m
LCBKU09iamVjdCopOworICAgIEdldEVudW1lcmFibGVMZW5ndGhGdW5jdGlvblB0ciBnZXRFbnVt
ZXJhYmxlTGVuZ3RoOworCisgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldFN0cnVj
dHVyZVByb3BlcnR5TmFtZXM7CisgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzOworCiAgICAgdHlwZWRlZiBTdHJpbmcgKCpDbGFzc05hbWVGdW5j
dGlvblB0cikoY29uc3QgSlNPYmplY3QqKTsKICAgICBDbGFzc05hbWVGdW5jdGlvblB0ciBjbGFz
c05hbWU7CiAKQEAgLTEzNyw2ICsxNDMsOSBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAg
ICAmQ2xhc3NOYW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQ
cm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldEVudW1lcmFibGVMZW5ndGgs
IFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcywgXAorICAg
ICAgICAmQ2xhc3NOYW1lOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xh
c3NOYW1lOjpjbGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFu
Y2UsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAko
cmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKQEAgLTU0Miw2ICs1NDMsMTIzIEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lbnRlcikKICAgICBFTkQoKTsKIH0KIAorU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCkKK3sKKyAgICBCRUdJTigpOwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKGpzTnVtYmVyKDApKTsKKwor
ICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFJFVFVS
Tihqc051bWJlcihiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgodm0s
IGJhc2UpKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eSkKK3sKKyAgICBCRUdJTigpOworICAgIEpTT2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1
ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVl
KCk7CisgICAgcGNbNF0udS5hcnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3Ry
dWN0dXJlKHZtKSk7CisgICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMyKCkpOworICAgIFJFVFVS
Tihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkuYXNVSW50MzIoKSkp
KTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkp
Cit7CisgICAgQkVHSU4oKTsKKyAgICBKU09iamVjdCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50
b09iamVjdChleGVjKTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOwor
ICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oT1Ao
NCkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBpZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+Y2Fj
aGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcigpID09IGVudW1lcmF0b3IpCisgICAgICAgIFJFVFVS
Tihqc0Jvb2xlYW4odHJ1ZSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVy
dHkoZXhlYywgYXNTdHJpbmcocHJvcGVydHkuYXNDZWxsKCkpLT50b0lkZW50aWZpZXIoZXhlYykp
KSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSkK
K3sKKyAgICBCRUdJTigpOworICAgIEpTT2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1ZSgpLnRv
T2JqZWN0KGV4ZWMpOworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7Cisg
ICAgYm9vbCByZXN1bHQ7CisgICAgaWYgKHByb3BlcnR5LmlzU3RyaW5nKCkpCisgICAgICAgIHJl
c3VsdCA9IGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5LmFzQ2VsbCgp
KS0+dG9JZGVudGlmaWVyKGV4ZWMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHByb3Bl
cnR5LmlzVUludDMyKCkpOworICAgICAgICByZXN1bHQgPSBiYXNlLT5oYXNQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eS5hc1VJbnQzMigpKTsKKyAgICB9CisgICAgUkVUVVJOKGpzQm9vbGVhbihyZXN1
bHQpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpCit7
CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIC8vdWludDMyX3Qg
aW5kZXggPSBPUCg0KS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKKyAgICAvL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihPUCg1KS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmlu
ZygpKTsKKyAgICBSRVRVUk4oYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eS50b1N0cmluZyhl
eGVjKS0+dG9JZGVudGlmaWVyKGV4ZWMpKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZSh2bSkpOworICAgICAgICAKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VW
YWx1ZS50b09iamVjdChleGVjKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0
cnVjdHVyZSh2bSk7CisgICAgaWYgKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRv
ciA9IHN0cnVjdHVyZS0+Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICBS
RVRVUk4oZW51bWVyYXRvcik7CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVy
dGllc1F1aWNrbHkoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y3JlYXRlKHZtKSk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMp
OworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhi
YXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKwor
ICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZXMpOworICAgIGlm
IChzdHJ1Y3R1cmUtPmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICBz
dHJ1Y3R1cmUtPnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3Ip
OworICAgIFJFVFVSTihlbnVtZXJhdG9yKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNyZWF0ZSh2bSkpOworICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRv
T2JqZWN0KGV4ZWMpOworICAgIHVpbnQzMl90IGVudW1lcmF0ZWRMZW5ndGggPSBPUCgzKS5qc1Zh
bHVlKCkuYXNVSW50MzIoKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHN0cnVjdHVy
ZUVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oT1AoNCkuanNW
YWx1ZSgpLmFzQ2VsbCgpKTsKKworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMo
ZXhlYyk7CisgICAgcHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aChl
bnVtZXJhdGVkTGVuZ3RoKTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJh
dGVkUHJvcGVydGllcyhzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKKyAgICBiYXNlLT5tZXRob2RUYWJs
ZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorICAgIFJFVFVSTihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgYmFzZS0+c3RydWN0dXJlKHZtKSwgcHJvcGVydHlO
YW1lcykpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3Bu
YW1lKQoreworICAgIEJFR0lOKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVt
ZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDIpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7CisgICAgdWludDMyX3QgaW5kZXggPSBPUCgzKS5qc1ZhbHVlKCkuYXNVSW50
MzIoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5w
cm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8ganNT
dHJpbmcoZXhlYywgcHJvcGVydHlOYW1lLT5zdHJpbmcoKSkgOiBqc051bGwoKSk7Cit9CisKK1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCit7CisgICAgQkVHSU4oKTsK
KyAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBPUCgyKS5q
c1ZhbHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24g
MTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw2ICsyMjYsMTUgQEAgU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9pbik7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2RlbF9i
eV92YWwpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOworU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOworU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDQgKzIzNiwxOSBAQCBQYXNzUmVm
UHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRUCiAgICAgcmV0dXJuIDA7CiB9CiAKK3Vp
bnQzMl90IEpTQ2VsbDo6Z2V0RW51bWVyYWJsZUxlbmd0aChWTSYsIEpTT2JqZWN0KikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpTQ2VsbDo6Z2V0U3Ry
dWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgSlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE3MDg5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDksNiArMjA5LDExIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgTk9fUkVUVVJO
X0RVRV9UT19DUkFTSCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgc3RhdGljIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworCisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdWludDMyX3QgZ2V0RW51
bWVyYWJsZUxlbmd0aChWTSYsIEpTT2JqZWN0Kik7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisK
ICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg0LDYgKzEyODQs
MTIgQEAgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVy
biBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCitib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBQcm9wZXJ0
eVNsb3Qgc2xvdCh0aGlzKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMp
LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisK
IGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtMTQ4MCw3ICsxNDg2LDcgQEAgdm9pZCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xNDkyLDcgKzE0OTgsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqCiAgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTUwMyw3ICsxNTA5LDcgQEAgdm9pZCBKU09i
amVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICB1bnNpZ25lZCB1c2VkVmVj
dG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxl
bmd0aCgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5n
dGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwor
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VNYXAuZ2V0KCkpIHsKQEAgLTE1MTgsNyArMTUyNCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RkOjpzb3J0
KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChrZXlzW2ldKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0yNjUyLDQgKzI2NTgsODQgQEAgSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYwogICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CiB9CiAKK3VpbnQzMl90IEpTT2JqZWN0Ojpn
ZXRFbnVtZXJhYmxlTGVuZ3RoKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0
dXJlLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBzd2l0Y2ggKG9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFO
S19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6
CisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElO
R19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAg
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAg
dW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICghYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVzZWRMZW5ndGg7CisgICAgfQorICAgICAg
ICAKKyAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICB1bnNpZ25lZCB1
c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZG91YmxlIHZh
bHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBpZiAo
dmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHVzZWRMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3Rv
cmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAo
c3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdl
LT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAo
IXN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB1c2VkVmVjdG9yTGVuZ3RoOworICAgIH0KKyAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIEpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5h
bWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNP
YmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKKworICAgIGlmIChvYmplY3QtPnByb3RvdHlwZSgpLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3Qob2JqZWN0LT5w
cm90b3R5cGUoKSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKHByb3RvdHlwZS0+
c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpIHsK
KyAgICAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVz
KHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAg
ICAgICBKU1ZhbHVlIG5leHRQcm90byA9IHByb3RvdHlwZS0+cHJvdG90eXBlKCk7CisgICAgICAg
IGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcHJv
dG90eXBlID0gYXNPYmplY3QobmV4dFByb3RvKTsKKyAgICB9Cit9CisKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw2ICs0NjIsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNv
bnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBib29sIGhhc093blByb3BlcnR5KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgYm9vbCBoYXNPd25Qcm9wZXJ0eShF
eGVjU3RhdGUqLCB1bnNpZ25lZCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwpAQCAtNDc1LDYg
KzQ3NiwxMCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChWTSYsIEpTT2JqZWN0Kik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKKwogICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CiAgICAgYm9vbCBnZXRQcmltaXRpdmVO
dW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6c19pbmZvID0geyAiSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IpIH07CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtKQoreworICAgIGlmICghdm0uZW1wdHlQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpKSB7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHBy
b3BlcnR5TmFtZXMoJnZtKTsKKyAgICAgICAgdm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
ID0gU3Ryb25nPEpTQ2VsbD4odm0sIGNyZWF0ZSh2bSwgMCwgcHJvcGVydHlOYW1lcykpOworICAg
IH0KKyAgICByZXR1cm4ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KHZtLmVtcHR5
UHJvcGVydHlOYW1lRW51bWVyYXRvci5nZXQoKSk7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCit7CisgICAgU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwOwor
ICAgIHVpbnQzMl90IGlubGluZUNhcGFjaXR5ID0gc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpIDogMDsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0
b3IgPSBuZXcgKE5vdE51bGwsIAorICAgICAgICBhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yPih2bS5oZWFwKSkgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBzdHJ1Y3R1
cmVJRCwgaW5saW5lQ2FwYWNpdHksIHByb3BlcnR5TmFtZXMuZGF0YSgpKTsKKyAgICBlbnVtZXJh
dG9yLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwg
U3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIHVpbnQzMl90IGlubGluZUNhcGFjaXR5LCBQYXNzUmVm
UHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gaWRlbnRpZmllcnMpCisgICAgOiBKU0NlbGwodm0s
IHZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2lkZW50
aWZpZXJzKGlkZW50aWZpZXJzKQorICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJ
RCkKKyAgICAsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkpCit7Cit9CisK
K3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCktPkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6fkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2gKKyNkZWZpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKKwor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5j
bHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJZGVudGlmaWVy
OworCitjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IgOiBwdWJsaWMgSlNDZWxsIHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgc3RhdGljIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogY3JlYXRlKFZNJik7CisgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKKwor
ICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBwcm9wZXJ0eU5hbWVBdEluZGV4KHVpbnQzMl90IGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGluZGV4ID49IG1faWRlbnRpZmllcnMtPnByb3BlcnR5TmFtZVZlY3Rvcigp
LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJm1f
aWRlbnRpZmllcnMtPnByb3BlcnR5TmFtZVZlY3RvcigpW2luZGV4XTsKKyAgICB9CisKKyAgICBT
dHJ1Y3R1cmVJRCBjYWNoZWRTdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3Ry
dWN0dXJlSUQ7IH0KKyAgICB1aW50MzJfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IGNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0K
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisKKyAgICBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmVJRCwgdWludDMyX3QsIFBhc3NSZWZQdHI8
UHJvcGVydHlOYW1lQXJyYXlEYXRhPik7CisKKyAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlE
YXRhPiBtX2lkZW50aWZpZXJzOworICAgIFN0cnVjdHVyZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7
CisgICAgdWludDMyX3QgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAxNzA4OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE4LDYgKzExOCwxMiBAQCB2b2lkIEpTUHJveHk6OmdldFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqCiAgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKIH0KIAordm9pZCBKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU1Byb3h5KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOworICAgIHRoaXNPYmplY3QtPnRhcmdl
dCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXModGhp
c09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCiB2b2lk
IEpTUHJveHk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlz
aW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdl
dFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
TmFtZUFycmF5LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMyAr
MjMsMzQgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IHNldFRocmVzaG9sZCA9IDIwOwotCiB2b2lkIFByb3BlcnR5
TmFtZUFycmF5OjphZGQoU3RyaW5nSW1wbCogaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlk
ZW50aWZpZXIgfHwgaWRlbnRpZmllciA9PSBTdHJpbmdJbXBsOjplbXB0eSgpIHx8IGlkZW50aWZp
ZXItPmlzQXRvbWljKCkpOwotCi0gICAgc2l6ZV90IHNpemUgPSBtX2RhdGEtPnByb3BlcnR5TmFt
ZVZlY3RvcigpLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA8IHNldFRocmVzaG9sZCkgewotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKGlk
ZW50aWZpZXIgPT0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXS5pbXBsKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KG1fc2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpCi0gICAgICAgICAgICAgICAgbV9zZXQuYWRkKG1fZGF0YS0+cHJvcGVydHlOYW1l
VmVjdG9yKClbaV0uaW1wbCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fc2V0LmFkZChp
ZGVudGlmaWVyKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gUHJvcGVydHlOYW1lKElk
ZW50aWZpZXIobV92bSwgaWRlbnRpZmllcikpLmFzSW5kZXgoKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChpbmRleCwgaW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4IHx8IGluZGV4ID49
IG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpOwogICAgIH0KIAorICAgIGlmICghbV9zZXQu
YWRkKGlkZW50aWZpZXIpLmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybjsKKwogICAgIGFkZEtu
b3duVW5pcXVlKGlkZW50aWZpZXIpOwogfQogCit2b2lkIFByb3BlcnR5TmFtZUFycmF5OjpzZXRQ
cmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yKQoreworICAgIGZvciAodWludDMyX3QgaSA9IDA7IDsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50aWZpZXIgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0
eU5hbWVBdEluZGV4KGkpOworICAgICAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgbV9zZXQuYWRkKGlkZW50aWZpZXItPmltcGwoKSk7CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5TmFtZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKKyAgICBjbGFzcyBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAgICAgY2xhc3MgU3RydWN0dXJlOwogICAgIGNsYXNz
IFN0cnVjdHVyZUNoYWluOwogCkBAIC01Niw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAgICAgLCBtX251bUNhY2hlYWJsZVNsb3RzKDAp
CiAgICAgICAgICAgICAsIG1fYmFzZU9iamVjdCgwKQorICAgICAgICAgICAgLCBtX3ByZXZpb3Vz
bHlFbnVtZXJhdGVkTGVuZ3RoKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC02NCwxMSAr
NjYsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAsIG1fdm0oJmV4ZWMtPnZtKCkp
CiAgICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAgICwgbV9i
YXNlT2JqZWN0KDApCisgICAgICAgICAgICAsIG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgo
MCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92
bTsgfQogCisgICAgICAgIHZvaWQgYWRkKHVpbnQzMl90IGluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoaW5kZXggPCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGFkZChJZGVudGlmaWVyOjpmcm9tKG1fdm0s
IGluZGV4KSk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGFkZChjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVyLmltcGwoKSk7IH0KICAgICAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGQoU3RyaW5nSW1wbCopOwogICAgICAgICB2b2lkIGFkZEtub3du
VW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0
b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVyKSk7IH0KQEAgLTgxLDYgKzkx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJy
YXlEYXRhPiByZWxlYXNlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5yZWxlYXNlKCk7IH0KIAogICAg
ICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgYm9vbCBjYW5B
ZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuICFtX3NldC5zaXplKCk7
IH0KICAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7IH0K
ICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnBy
b3BlcnR5TmFtZVZlY3RvcigpLmJlZ2luKCk7IH0KQEAgLTEwMCw2ICsxMTEsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIG1fYmFzZU9iamVjdCA9IG9iamVjdDsKICAgICAgICAgfQog
CisgICAgICAgIHZvaWQgc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgodWludDMyX3QgbGVu
Z3RoKSB7IG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGggPSBsZW5ndGg7IH0KKyAgICAgICAg
dm9pZCBzZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKik7CisKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8
U3RyaW5nSW1wbCosIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBJZGVudGlmaWVyU2V0OwogCkBAIC0x
MDgsNiArMTIyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZNKiBtX3ZtOwogICAgICAg
ICBzaXplX3QgbV9udW1DYWNoZWFibGVTbG90czsKICAgICAgICAgSlNPYmplY3QqIG1fYmFzZU9i
amVjdDsKKyAgICAgICAgdWludDMyX3QgbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aDsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIxLDYgKzEyMSwxMyBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhK
U09iCiAgICAgQmFzZTo6Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwogfQogCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7CisgICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3Bl
cnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwogc3RhdGlj
IGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3Qg
Y2hhciogbWVzc2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTcwODk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29s
IHNob3VsZFRocm93KTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDcgQEAKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJMb29rdXAuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZUFycmF5LmgiCkBAIC05NTYsNyArOTU2LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6
OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydQogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBib29sIGtub3duVW5pcXVlID0gIXByb3BlcnR5TmFtZXMuc2l6
ZSgpOworICAgIGJvb2wga25vd25VbmlxdWUgPSBwcm9wZXJ0eU5hbWVzLmNhbkFkZEtub3duVW5p
cXVlRm9yU3RydWN0dXJlKCk7CiAKICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBw
cm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3Ig
aXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpA
QCAtMTIyMyw0ICsxMjIzLDQxIEBAIGJvb2wgQ2xhc3NJbmZvOjpoYXNTdGF0aWNTZXR0ZXJPclJl
YWRvbmwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yKQoreworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgYWxsb2NhdGVS
YXJlRGF0YSh2bSk7CisgICAgcmFyZURhdGEoKS0+c2V0Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVy
YXRvcih2bSwgZW51bWVyYXRvcik7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3Ry
dWN0dXJlOjpjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAo
IWhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiByYXJl
RGF0YSgpLT5jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCk7Cit9CisKK2Jvb2wgU3RydWN0
dXJlOjpjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmIChp
c0RpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVE9ETzogV2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0aGlzIHNpbmNlIG92ZXJyaWRlbiBwcm9wZXJ0eSBuYW1lcyBh
cmUgcGFydCBvZiB0aGUgZ2VuZXJpYyBwcm9wZXJ0eSBsb29wLgorICAgIGlmICh0eXBlSW5mbygp
Lm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVy
dGllc1F1aWNrbHkoKSBjb25zdAoreworICAgIGlmIChoYXNOb25FbnVtZXJhYmxlUHJvcGVydGll
cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0dldHRlclNldHRlclByb3Bl
cnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNiArMjgzLDEyIEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hl
KCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgorCisgICAgdm9pZCBz
ZXRDYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKik7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKCkgY29uc3Q7CisgICAgYm9vbCBjYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0
b3IoKSBjb25zdDsKKyAgICBib29sIGNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgY29uc3Q7
CisKICAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAgICAgSlNTdHJpbmcqIG9iamVjdFRvU3Ry
aW5nVmFsdWUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
UmFyZURhdGEuaCIKIAorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2lu
Y2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTY4LDYgKzY5LDE3IEBAIHZvaWQgU3RydWN0dXJl
UmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4oSlMKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9wcmV2aW91cyk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqZWN0
VG9TdHJpbmdWYWx1ZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZW51bWVy
YXRpb25DYWNoZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkUHJv
cGVydHlOYW1lRW51bWVyYXRvcik7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3Ry
dWN0dXJlUmFyZURhdGE6OmNhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2NhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IuZ2V0KCk7Cit9CisKK3Zv
aWQgU3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0m
IHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9jYWNo
ZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCh2bSwgdGhpcywgZW51bWVyYXRvcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogY2xhc3MgU3Ry
dWN0dXJlOwogCkBAIC02MSw2ICs2Miw5IEBAIHB1YmxpYzoKICAgICAKICAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOwogCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDYWNoZWRQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKICAgICAKQEAgLTcxLDYgKzc1LDcgQEAgcHJpdmF0
ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwogICAgIFdyaXRlQmFy
cmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdyaXRlQmFycmllcjxK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7CisgICAgV3JpdGVCYXJy
aWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOwogICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdh
dGNocG9pbnRTZXQ+LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50
TWFwOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkpTTm90QW5P
YmplY3QuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJv
bWlzZVJlYWN0aW9uLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3Bl
LmgiCiAjaW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTI1OCw2ICsyNTksNyBAQCBWTTo6Vk0oVk1UeXBl
IHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhp
cywgSlNTdHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBu
b3RBbk9iamVjdFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVj
dHVyZS5zZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJl
LnNldCgqdGhpcywgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgZ2V0dGVyU2V0dGVyU3RydWN0dXJlLnNldCgqdGhpcywg
R2V0dGVyU2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAg
YXBpV3JhcHBlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgSlNTY29wZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIEpTU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcwODk5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYg
KzI2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJp
bmdTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0
dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVj
dHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlOYW1lRW51bWVyYXRvclN0
cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZ2V0dGVyU2V0dGVyU3RydWN0dXJl
OwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBhcGlXcmFwcGVyU3RydWN0dXJlOwogICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBKU1Njb3BlU3RydWN0dXJlOwpAQCAtMjkxLDYgKzI5Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlUmVhY3Rp
b25TdHJ1Y3R1cmU7CiAjZW5kaWYKICAgICAgICAgU3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9uVGVy
bWluYXRvcjsKKyAgICAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOwogCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2F0b21pY1N0cmluZ1RhYmxlOwog
ICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234738</attachid>
            <date>2014-07-10 19:24:27 -0700</date>
            <delta_ts>2014-07-17 17:46:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140710192410.patch</filename>
            <type>text/plain</type>
            <size>166152</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwOTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MyBA
QAorMjAxNC0wNy0wOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbjoKKyAg
ICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRl
Y29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJdGVyYWJsZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6cHVzaE9wdGltaXNlZEZvckluKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGltaXNlZEZvckluKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25SZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjp0cnlHZXRC
b3VuZExvY2FsKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0TG9vcEhlYWRlcik6Cisg
ICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdE11bHRpTG9vcEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJl
cml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9E
RkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSXRlcmFibGVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRTdHJ1
Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXh0RW51bWVyYXRvclBuYW1lKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToK
KyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUhhc0l0ZXJh
YmxlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnQzMkxvYWQpOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9K
SVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9wcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJdGVyYWJsZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pdGVyYWJsZV9wcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2l0ZXJhYmxlX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9l
bnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9w
bmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdERvdWJsZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3Vz
TG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6
OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
aGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVh
dGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnBy
b3BlcnR5TmFtZUF0SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm94eS5jcHA6CisgICAg
ICAgIChKU0M6OkpTUHJveHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBy
dW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFkZCk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5TmFtZUFycmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaDoKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlOYW1lQXJyYXk6OlByb3BlcnR5TmFtZUFycmF5KToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXk6OmFkZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpjYW5B
ZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFy
cmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCk6CisgICAgICAgICogcnVudGltZS9S
ZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQ
cm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0
Q2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y2FjaGVkUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZWRQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFByb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6CisKIDIwMTQtMDctMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbZnRsb3B0XSBHZXQgcmlkIG9mIE5vZGU6Om1pc2MgYnkgbW92aW5nIHRoZSBmaWVs
ZHMgb3V0IG9mIHRoZSB1bmlvbiBzbyB0aGF0IHlvdSBjYW4gdXNlIHJlcGxhY2VtZW50IGFuZCBv
d25lciBzaW11bHRhbmVvdXNseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MDcsNiArODA3LDgg
QEAKIAkJMUNBQTlBMjMxOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJB
Z2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUNB
QTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICov
OyB9OwogCQkyNjAwQjVBNjE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTQxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTcxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJp
bmdKb2luZXIuaCAqLzsgfTsKKwkJMkEwNUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcCAqLzsgfTsKKwkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oICovOyB9OwogCQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVh
c2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsK
IAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIy
NEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi87IH07CiAJCTJBNEJCN0YzMThB
NDExNzkwMDhBMEZDRCAvKiBKU01hbmFnZWRWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRCQjdGMjE4QTQxMTc5MDA4QTBGQ0Qg
LyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oICovOyB9OwpAQCAtMjk0OSw2ICsyOTUxLDggQEAK
IAkJMUNBQTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2Vu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdFByb2Zp
bGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFB
NzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEyODI1Q0YxODM0MUYyRDAwODdG
QkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVsYXllZFJlbGVhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIwODUgLyogR0NTZWdtZW50ZWRBcnJheS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTJBMzQzRjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRl
ZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21l
bnRlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk2Myw2
ICs0OTY3LDggQEAKIAkJCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5o
ICovLAogCQkJCUE3RENCNzc5MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywK
IAkJCQlDMkI2RDc1MjE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJyaWVySW5saW5lcy5oICov
LAorCQkJCTJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwICovLAorCQkJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC02NTc2LDYgKzY1ODIsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAv
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJF
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJv
ZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNzcyMiw2ICs3NzI5LDcgQEAKIAkJCQk4
Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDgg
LyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDMjBDQjkxODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERG
R1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQx
QzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs
NyArMTI1LDE2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2Fs
bCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9k
aWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5k
IiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDog
NCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwg
Imxlbmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eSIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eSIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2dldF9kaXJlY3RfcG5hbWUiLCAibGVuZ3RoIiA6IDcgfSwKKyAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRv
ciIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2dlbmVy
aWNfcHJvcGVydHlfZW51bWVyYXRvciIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCisgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfQog
ICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExOCw2ICsxMTgsOSBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9n
ZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZW51bWVy
YWJsZV9sZW5ndGg6CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAg
ICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKQEAgLTE1MCw2ICsxNTMsOSBAQCB2b2lkIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0
cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3Bu
YW1lOgogICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKICAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9i
eV92YWw6CiAgICAgY2FzZSBvcF9pbjoKQEAgLTE3OSw2ICsxODUsOCBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIGNhc2Ug
b3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKICAgICBjYXNlIG9wX2NvbnN0cnVj
dF92YXJhcmdzOgogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGZ1bmN0b3Io
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CkBAIC0xODYsNiArMTk0LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0
KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ug
b3BfZ2V0X2RpcmVjdF9wbmFtZToKICAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKQEAgLTI5OCw2ICszMDcsMTUgQEAgdm9p
ZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogI3VuZGVmIExMSU5UX0hFTFBF
Ul9PUENPREVTCiAgICAgICAgIHJldHVybjsKICAgICAvLyBUaGVzZSBhbGwgaGF2ZSBhIHNpbmds
ZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfdG9faW5k
ZXhfc3RyaW5nOgorICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoK
KyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNlIG9wX2hhc19pbmRl
eGVkX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBj
YXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFt
ZToKKyAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBj
YXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZToKICAgICBjYXNlIG9wX25leHRfcG5hbWU6CiAg
ICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgogICAgIGNhc2Ugb3Bfc3RyY2F0OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3
MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzk5LDYgKzEzOTksOTEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBC
eXRlY29kZSgKICAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfbmV4dF9wbmFtZSkg
LSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0
ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKSAtIDE7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVk
X3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJv
cGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBh
cnJheVByb2ZpbGUgPSBpdFs0XS51LmFycmF5UHJvZmlsZTsKKyAgICAgICAgICAgIHByaW50TG9j
YXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19pbmRleGVkX3Byb3Bl
cnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcCIsIHJlZ2lzdGVy
TmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHByb3BlcnR5TmFtZSkuZGF0YSgpLCBhcnJheVByb2ZpbGUpOworICAgICAgICAgICAgaXQgKz0g
T1BDT0RFX0xFTkdUSChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkgLSAxOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1l
ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFs0XS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09E
RV9MRU5HVEgob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkgLSAxOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eTogewor
ICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBi
YXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0
WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm9wX2hhc19nZW5lcmljX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCkpOwor
ICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSkg
LSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRf
ZGlyZWN0X3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
cHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0g
aXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFs1XS51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBpdFs2XS51LnByb2Zp
bGU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvcF9nZXRfZGlyZWN0X3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMsICVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShpbmRleCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpLCBw
cm9maWxlKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2RpcmVjdF9w
bmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAgICAgaW50
IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5v
cGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAib3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShiYXNlKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChv
cF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51
bWVyYXRvcjogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGxlbmd0
aCA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzdHJ1Y3R1cmVFbnVtZXJhdG9y
ID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvciIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUo
ZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShsZW5n
dGgpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHN0cnVjdHVyZUVudW1lcmF0b3IpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRb
MV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFsyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9uZXh0X2Vu
dW1lcmF0b3JfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCks
IHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9M
RU5HVEgob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKSAtIDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogeworICAgICAgICAg
ICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0
WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgIm9wX3RvX2luZGV4X3N0cmluZyIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5k
ZXgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX3RvX2luZGV4
X3N0cmluZykgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9wdXNoX3dpdGhfc2NvcGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJPcGVyYW5kKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRoX3Njb3BlIiwgcjApOwpAQCAtMTc5OSw2
ICsxODg0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5kID0gcGNbal0udS5vcGVyYW5k
OwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAocGNbMF0udS5vcGNvZGUpIHsKKyAgICAgICAg
Y2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGFycmF5UHJv
ZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2Fy
cmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOworCisgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVz
W2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJh
cmdzOgogICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6CkBAIC0xODA5LDYgKzE5MDEsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmls
ZUluZGV4XTsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKICAg
ICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbb3BM
ZW5ndGggLSAxXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQgPT0gLTEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE3MDg5
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDM2LDE4ICsxNDM2LDMwIEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXIKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdp
c3RlcklEKiBwcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRT
dGFjay5zaXplKCk7IGkgPiAwOyBpLS0pIHsKLSAgICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0
ID0gbV9mb3JJbkNvbnRleHRTdGFja1tpIC0gMV07Ci0gICAgICAgIGlmIChjb250ZXh0LnByb3Bl
cnR5UmVnaXN0ZXIgPT0gcHJvcGVydHkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfZ2V0
X2J5X3BuYW1lKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOwot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKLSAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LmV4cGVjdGVkU3Vic2NyaXB0
UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNv
bnRleHQuaXRlclJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChjb250ZXh0LmluZGV4UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgcmV0
dXJuIGRzdDsKKyAgICAgICAgRm9ySW5Db250ZXh0KiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRT
dGFja1tpIC0gMV0uZ2V0KCk7CisgICAgICAgIGlmIChjb250ZXh0LT5sb2NhbCgpICE9IHByb3Bl
cnR5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFjb250ZXh0LT5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoY29udGV4dC0+dHlwZSgp
ID09IEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dFR5cGUpIHsKKyAgICAgICAgICAg
IHByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8SW5kZXhlZEZvckluQ29udGV4dCo+KGNvbnRleHQpLT5p
bmRleCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
Y29udGV4dC0+dHlwZSgpID09IEZvckluQ29udGV4dDo6U3RydWN0dXJlRm9ySW5Db250ZXh0VHlw
ZSk7CisgICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCogc3RydWN0dXJlQ29udGV4dCA9IHN0
YXRpY19jYXN0PFN0cnVjdHVyZUZvckluQ29udGV4dCo+KGNvbnRleHQpOworICAgICAgICBVbmxp
bmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9kaXJl
Y3RfcG5hbWUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoc3RydWN0dXJlQ29udGV4dC0+aW5kZXgoKS0+aW5kZXgoKSk7CisgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChzdHJ1Y3R1cmVDb250ZXh0LT5lbnVtZXJhdG9yKCktPmlu
ZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CisgICAgICAg
IHJldHVybiBkc3Q7CiAgICAgfQorCiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9m
aWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmls
ZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoa2lsbChkc3QpKTsKQEAgLTIxNjEsNyArMjE3Myw3IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxDb250
cm9sRmxvd0NvbnRleHQ+IHNhdmVkU2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxT
d2l0Y2hJbmZvPiBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKLSAgICAgICAgVmVjdG9yPEZvcklu
Q29udGV4dD4gc2F2ZWRGb3JJbkNvbnRleHRTdGFjazsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxGb3JJbkNvbnRleHQ+PiBzYXZlZEZvckluQ29udGV4dFN0YWNrOwogICAgICAgICBW
ZWN0b3I8VHJ5Q29udGV4dD4gcG9wcGVkVHJ5Q29udGV4dHM7CiAgICAgICAgIExhYmVsU2NvcGVT
dG9yZSBzYXZlZExhYmVsU2NvcGVzOwogICAgICAgICB3aGlsZSAodG9wU2NvcGUgPiBib3R0b21T
Y29wZSAmJiB0b3BTY29wZS0+aXNGaW5hbGx5QmxvY2spIHsKQEAgLTIxODgsNyArMjIwMCw3IEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAgICAgICAg
ICBtX3N3aXRjaENvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuc3dpdGNoQ29udGV4
dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZmxpcEZvcklucykg
ewotICAgICAgICAgICAgICAgIHNhdmVkRm9ySW5Db250ZXh0U3RhY2sgPSBtX2ZvckluQ29udGV4
dFN0YWNrOworICAgICAgICAgICAgICAgIHNhdmVkRm9ySW5Db250ZXh0U3RhY2suc3dhcChtX2Zv
ckluQ29udGV4dFN0YWNrKTsKICAgICAgICAgICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNrLnNo
cmluayhmaW5hbGx5Q29udGV4dC5mb3JJbkNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGZsaXBUcmllcykgewpAQCAtMjIyOCw3ICsyMjQwLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAgICAgaWYgKGZs
aXBTd2l0Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjayA9IHNhdmVk
U3dpdGNoQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgaWYgKGZsaXBGb3JJbnMpCi0gICAgICAg
ICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjayA9IHNhdmVkRm9ySW5Db250ZXh0U3RhY2s7Cisg
ICAgICAgICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5zd2FwKHNhdmVkRm9ySW5Db250ZXh0
U3RhY2spOwogICAgICAgICAgICAgaWYgKGZsaXBUcmllcykgewogICAgICAgICAgICAgICAgIEFT
U0VSVChtX3RyeUNvbnRleHRTdGFjay5zaXplKCkgPT0gZmluYWxseUNvbnRleHQudHJ5Q29udGV4
dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcG9wcGVkVHJ5
Q29udGV4dHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0yNTYxLDQgKzI1NzMsMTIwIEBAIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICBlbWl0TGFiZWwoc2NvcGUtPmJy
ZWFrVGFyZ2V0KCkpOwogfQogCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEVudW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQorewor
ICAgIGVtaXRPcGNvZGUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFz
ZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRIYXNHZW5lcmljUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgZW1pdE9wY29kZShv
cF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+
aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eU5hbWUtPmluZGV4KCkpOworICAgIHJldHVy
biBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSW5kZXhl
ZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCog
cHJvcGVydHlOYW1lKQoreworICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9
IG5ld0FycmF5UHJvZmlsZSgpOworICAgIGVtaXRPcGNvZGUob3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocHJvcGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJy
YXlQcm9maWxlKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQoreworICAgIGVtaXRPcGNvZGUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CisgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0
eU5hbWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChlbnVtZXJhdG9yLT5p
bmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UpCit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfc3RydWN0dXJlX3By
b3BlcnR5X2VudW1lcmF0b3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICByZXR1
cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdlbmVy
aWNQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBS
ZWdpc3RlcklEKiBsZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpCit7Cisg
ICAgZW1pdE9wY29kZShvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxlbmd0aC0+
aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUVudW1lcmF0b3It
PmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCkKK3sKKyAgICBlbWl0T3Bj
b2RlKG9wX25leHRfZW51bWVyYXRvcl9wbmFtZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmlu
ZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7CisgICAg
cmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0lu
ZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpCit7CisgICAgZW1p
dE9wY29kZShvcF90b19pbmRleF9zdHJpbmcpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7
CisgICAgcmV0dXJuIGRzdDsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4
ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4
UmVnaXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbmRleGVkRm9y
SW5Db250ZXh0Pihsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyKSk7Cit9CisKK3ZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVn
aXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAg
bV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPFN0cnVjdHVyZUZvckluQ29udGV4dD4obG9jYWxSZWdpc3RlciwgaW5kZXhS
ZWdpc3RlciwgcHJvcGVydHlSZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyKSk7Cit9CisKK3Zv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCog
bG9jYWxSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6aW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKFJlZ2lzdGVySUQq
IGxvY2FsUmVnaXN0ZXIpCit7CisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNv
bnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0J3Mgc3VmZmljaWVudGx5IAorICAg
IC8vIHJhcmUgdG8gZWl0aGVyICgxKSByZS1hc3NpZ24gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGluIHRoZSBib2R5IG9mIHRoZSBsb29wCisgICAgLy8gb3IgKDIpIGNhcHR1cmUgdGhlIGxv
b3AgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZS4gQmVjYXVzZSBvZiB0aGUgcmFyaXR5IG9mIGVpdGhl
ciBvZiAKKyAgICAvLyB0aGVzZSBzaXR1YXRpb25zLCBpdCdzIG9rYXkgdG8gcG9pc29uIHRoZSBy
ZW1haW5kZXIgb2YgdGhlIGxvb3AgYm9keSB3aGVuZXZlciB3ZSBlbmNvdW50ZXIgdGhlbS4KKyAg
ICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCk7IGkgPiAwOyBpLS0p
IHsKKyAgICAgICAgRm9ySW5Db250ZXh0KiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRTdGFja1tp
IC0gMV0uZ2V0KCk7CisgICAgICAgIGlmIChjb250ZXh0LT5sb2NhbCgpICE9IGxvY2FsUmVnaXN0
ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY29udGV4dC0+aW52YWxpZGF0ZSgp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NywxMSAr
OTcsNzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZpbmFsbHlDb250ZXh0IGZpbmFsbHlD
b250ZXh0OwogICAgIH07CiAKLSAgICBzdHJ1Y3QgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGV4cGVjdGVkU3Vic2NyaXB0UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBpdGVyUmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBp
bmRleFJlZ2lzdGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlSZWdpc3Rl
cjsKKyAgICBjbGFzcyBGb3JJbkNvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgRm9ySW5D
b250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAgICA6IG1fbG9jYWxS
ZWdpc3Rlcihsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB+Rm9ySW5Db250ZXh0KCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pc1ZhbGlkOyB9CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9pc1ZhbGlkID0g
ZmFsc2U7IH0KKworICAgICAgICBlbnVtIEZvckluQ29udGV4dFR5cGUgeworICAgICAgICAgICAg
U3RydWN0dXJlRm9ySW5Db250ZXh0VHlwZSwKKyAgICAgICAgICAgIEluZGV4ZWRGb3JJbkNvbnRl
eHRUeXBlCisgICAgICAgIH07CisgICAgICAgIHZpcnR1YWwgRm9ySW5Db250ZXh0VHlwZSB0eXBl
KCkgY29uc3QgPSAwOworCisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1
cm4gbV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVyOworICAgICAgICBib29sIG1faXNWYWxpZDsK
KyAgICB9OworCisgICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0IDogcHVibGljIEZvcklu
Q29udGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoUmVn
aXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyKQor
ICAgICAgICAgICAgOiBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwg
bV9pbmRleFJlZ2lzdGVyKGluZGV4UmVnaXN0ZXIpCisgICAgICAgICAgICAsIG1fcHJvcGVydHlS
ZWdpc3Rlcihwcm9wZXJ0eVJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX2VudW1lcmF0b3JSZWdp
c3RlcihlbnVtZXJhdG9yUmVnaXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IHZpcnR1YWwgRm9ySW5Db250ZXh0VHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZUZvckluQ29udGV4dFR5cGU7CisgICAgICAg
IH0KKworICAgICAgICBSZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhS
ZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvcGVydHlSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lbnVtZXJhdG9yUmVnaXN0ZXIuZ2V0KCk7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0
ZXI7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICB9OworCisg
ICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSW5kZXhlZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBGb3JJbkNv
bnRleHQobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9pbmRleFJlZ2lzdGVyKGluZGV4
UmVnaXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgRm9ySW5D
b250ZXh0VHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEluZGV4ZWRGb3JJbkNvbnRleHRUeXBlOworICAgICAgICB9CisKKyAgICAgICAgUmVn
aXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0
ZXI7CiAgICAgfTsKIAogICAgIHN0cnVjdCBUcnlEYXRhIHsKQEAgLTQzMSw2ICs0OTYsMTUgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0eU5hbWVz
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVnaXN0
ZXJJRCogc2l6ZSwgTGFiZWwqIGJyZWFrVGFyZ2V0KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dE5leHRQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdp
c3RlcklEKiBpLCBSZWdpc3RlcklEKiBzaXplLCBSZWdpc3RlcklEKiBpdGVyLCBMYWJlbCogdGFy
Z2V0KTsKIAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzSW5kZXhlZFByb3BlcnR5KFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsK
KyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0dlbmVyaWNQcm9w
ZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVu
dW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBs
ZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpOworICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgp
OworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKIAogICAg
ICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVk
LgpAQCAtNDYwLDE2ICs1MzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVz
aEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIHZv
aWQgcG9wRmluYWxseUNvbnRleHQoKTsKIAotICAgICAgICB2b2lkIHB1c2hPcHRpbWlzZWRGb3JJ
bihSZWdpc3RlcklEKiBleHBlY3RlZFN1YnNjcmlwdCwgUmVnaXN0ZXJJRCogaXRlciwgUmVnaXN0
ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0ID0geyBleHBlY3RlZFN1YnNjcmlwdCwgaXRl
ciwgaW5kZXgsIHByb3BlcnR5UmVnaXN0ZXIgfTsKLSAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0
U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwb3BPcHRp
bWlzZWRGb3JJbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2su
cmVtb3ZlTGFzdCgpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIHZvaWQg
cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAgICB2b2lkIHB1
c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRl
eCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOworICAgICAg
ICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChSZWdpc3RlcklEKiBsb2NhbCk7
CiAKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7
CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYp
OwpAQCAtNjY4LDcgKzczNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFZlY3RvcjxD
b250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Njb3BlQ29udGV4
dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250ZXh0U3RhY2s7
Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9ySW5Db250ZXh0U3RhY2s7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9mb3JJbkNvbnRleHRT
dGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4dFN0YWNrOwogICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29uc3QgRGVjb25zdHJ1
Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNSwxMiAr
MTUwNSwxNCBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUocmVzdWx0LmdldCgpLCBsb2NhbC5nZXQoKSk7CiAg
ICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCByZXN1bHQuZ2V0
KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3Vs
dFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCByZXN1bHQuZ2V0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2Nh
bC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLmdl
dCgpLCBsb2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3Vs
dFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOworICAg
ICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsLmdldCgp
KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE1NDAsMTEgKzE1NDIsMTMgQEAgUmVnaXN0ZXJJRCog
QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5nZXQoKSwgbV9yaWdodCk7CiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHRlbXBEc3QuZ2V0KCkpOworICAgICAg
ICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQo
KSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRl
bXBEc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7CisgICAgICAgIGdlbmVyYXRv
ci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQpOwog
ICAgIH0KIApAQCAtMTkyMCwxMDIgKzE5MjQsMjE4IEBAIHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZv
ckluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBGb3JJ
bk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCitSZWdpc3RlcklEKiBGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0KLSAgICBpZiAoIW1fbGV4
cHItPmlzQXNzaWdubWVudExvY2F0aW9uKCkpIHsKLSAgICAgICAgZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoZ2VuZXJhdG9yLCAiTGVmdCBzaWRlIG9mIGZvci1pbiBzdGF0ZW1lbnQgaXMgbm90IGEg
cmVmZXJlbmNlLiIpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2
ZU5vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKKyAgICAgICAgTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAobG9jYWwuaXNDYXB0dXJl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBsb2NhbC5n
ZXQoKTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0
YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsK
KyAgICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgeworICAgICAgICBEZWNv
bnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVjb25z
dHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIpOworICAgICAgICBhdXRvIGJpbmRpbmcg
PSBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlzQmluZGlu
Z05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNpemUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4cGVjdGVk
U3Vic2NyaXB0OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyID0gZ2VuZXJhdG9yLmVtaXRH
ZXRQcm9wZXJ0eU5hbWVzKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgaS5n
ZXQoKSwgc2l6ZS5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgIGdlbmVyYXRvci5l
bWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGF1dG8gc2ltcGxlQmlu
ZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOworICAg
ICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmIChs
b2NhbC5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGxvY2FsLmdldCgpOworICAgIH0KIAotICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3Rh
cnQuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KIAotICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKLSAgICBib29sIG9wdGlt
aXplZEZvcmluQWNjZXNzID0gZmFsc2U7Cit2b2lkIEZvckluTm9kZTo6ZW1pdExvb3BIZWFkZXIo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQor
ewogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVu
dGlmaWVyKCk7CiAgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsK
LSAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSkgewotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAgIGlmIChsb2NhbC5nZXQoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQog
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpZGVu
dCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIGdlbmVyYXRvci5pc1N0cmljdE1vZGUo
KSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZXhwZWN0ZWRTdWJzY3JpcHQuZ2V0
KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGltaXNlZEZvckluKGV4cGVjdGVk
U3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdldCgpLCBsb2NhbC5nZXQoKSk7Ci0gICAg
ICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAobV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBE
b3RBY2Nlc3Nvck5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUq
PihtX2xleHByKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBhc3NpZ25Ob2Rl
LT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5h
bWU7CiAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWdu
Tm9kZS0+YmFzZSgpKTsKLQogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFz
c2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWduTm9kZS0+
ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBpZGVudCwg
cHJvcGVydHlOYW1lKTsKLSAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHItPmlzQnJh
Y2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGFzc2ln
bk5vZGUgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7Ci0gICAg
ICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CiAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShhc3Np
Z25Ob2RlLT5zdWJzY3JpcHQoKSk7Ci0gICAgICAgIAogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQo
KSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlW
YWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgp
KSB7CiAgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqIGFzc2lnbk5vZGUgPSBz
dGF0aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKj4obV9sZXhwcik7CiAgICAg
ICAgIGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJpbmRpbmdzKCk7Ci0gICAgICAgIGlmIChi
aW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2ltcGxlQmluZGlu
ZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7Ci0gICAgICAgICAgICBJZGVu
dGlmaWVyIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICAg
ICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICAgICAgcHJv
cGVydHlOYW1lID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIEkg
ZW1pdCBleHByZXNzaW9uIGluZm8gaGVyZT8KLSAgICAgICAgICAgIGlmICghcHJvcGVydHlOYW1l
IHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSB8fCBnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkKLSAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNCaW5kaW5nOwotICAg
ICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLnB1
c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQoKSwgaS5n
ZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZvcmluQWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gY29tcGxldGVkU2ltcGxlQmluZGluZzsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgZ2VuZXJpY0JpbmRpbmc6Ci0gICAgICAgICAgICBwcm9wZXJ0eU5h
bWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvdGVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlzQmlu
ZGluZ05vZGUoKSkgewogICAgICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3MoKS0+YmluZFZh
bHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBjb21wbGV0ZWRTaW1wbGVCaW5kaW5nOgotICAgICAgICA7CisKKyAgICAg
ICAgYXV0byBzaW1wbGVCaW5kaW5nID0gc3RhdGljX2Nhc3Q8QmluZGluZ05vZGUqPihiaW5kaW5n
KTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzaW1wbGVCaW5kaW5nLT5ib3Vu
ZFByb3BlcnR5KCk7CisgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50
KTsKKyAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSB8fCBsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAg
ICAgICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBpZiAob3B0aW1pemVk
Rm9yaW5BY2Nlc3MpCi0gICAgICAgIGdlbmVyYXRvci5wb3BPcHRpbWlzZWRGb3JJbigpOwordm9p
ZCBGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1l
bnRMb2NhdGlvbigpKSB7CisgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRv
ciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxMYWJlbD4gZW5kID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51
ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5leHRQcm9wZXJ0eU5hbWUocHJvcGVydHlO
YW1lLCBiYXNlLmdldCgpLCBpLmdldCgpLCBzaXplLmdldCgpLCBpdGVyLmdldCgpLCBsb29wU3Rh
cnQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVt
ZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwotICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworCisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGxlbmd0aDsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RydWN0dXJlRW51
bWVyYXRvcjsKKyAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9leHByKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlzLT50cnlHZXRCb3VuZExvY2FsKGdlbmVy
YXRvcik7CisKKyAgICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AuCisgICAgeworICAgICAgICBM
YWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6
TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworCisgICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJsZUxlbmd0
aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFt
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExh
YmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsK
KworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRFcXVh
bGl0eU9wKG9wX2xlc3MsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3Ro
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0luZGV4ZWRQcm9wZXJ0
eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwor
CisgICAgICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCks
IGkuZ2V0KCkpOworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3Bl
cnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hJbmRleGVkRm9ySW5TY29w
ZShsb2NhbC5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEluZGV4ZWRGb3JJblNjb3BlKGxv
Y2FsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51
ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdl
dCgpKTsKKyAgICB9CisKKyAgICAvLyBTdHJ1Y3R1cmUgcHJvcGVydHkgbG9vcC4KKyAgICB7Cisg
ICAgICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJl
bFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsKCk7CisKKyAgICAgICAgc3RydWN0dXJlRW51bWVyYXRvciA9IGdlbmVyYXRvci5l
bWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9y
LmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHBy
b3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
c3VsdCA9IGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9lcV9udWxsLCBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVy
dHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmVFbnVtZXJhdG9yLmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIHNjb3BlLT5jb250aW51ZVRhcmdldCgp
KTsKKworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFt
ZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKGxv
Y2FsLmdldCgpLCBpLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0
b3IuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7
CisgICAgICAgIGdlbmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsK
KworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1
cmVFbnVtZXJhdG9yLmdldCgpLCBpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KHNjb3BlLT5icmVha1RhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5n
ZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CisgICAg
fQorCisgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAgTGFiZWxT
Y29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3Ap
OworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
KworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2VuZXJpY0VudW1lcmF0b3IgPSBnZW5lcmF0
b3IuZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBiYXNlLmdldCgpLCBsZW5ndGguZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCkp
OworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZ2VuZXJpY0VudW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2Vu
ZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIC8vIFRPRE86IE9wdGltaXpl
IGZvci1pbgorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SW5jKGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZ2VuZXJpY0Vu
dW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Ao
b3BfZXFfbnVsbCwgcmVzdWx0LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJh
c2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIAorICAgICAgICBn
ZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9v
cEVuZC5nZXQoKSk7CisgICAgfQorCisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4
ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgpLCBsaW5lU3RhcnRPZmZz
ZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOworfQorCit2b2lkIEZv
ckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKK3sKKyAgICB0aGlzLT5lbWl0TXVsdGlMb29wQnl0ZWNvZGUoZ2VuZXJhdG9y
LCBkc3QpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9yT2ZOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCShyZXZpc2lvbiAxNzA4OTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAKICAgICBKU1Njb3BlKiBqc1Nj
b3BlKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZS5nZXQoKTsgfQogCi0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9w
ZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIFdyaXRlQmFycmllcjxKU1Nj
b3BlPiBtX3Njb3BlOwogICAgIFdyaXRlQmFycmllcjxEZWJ1Z2dlclNjb3BlPiBtX25leHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NTMsMTMgKzE3NTMsNTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgSW46
CisgICAgY2FzZSBJbjogewogICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVu
IHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAogICAgICAg
ICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCisgICAg
Y2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjSW50MzIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNHZW5lcmlj
UHJvcGVydHk6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsK
KyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBU
b3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVy
dHlFbnVtZXJhdG9yOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQ2VsbCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3I6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNDZWxsKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAg
ICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgp
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE4
Myw2ICszMTgzLDgxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luKTsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEdldEVu
dW1lcmFibGVMZW5ndGgsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBv
cF9oYXNfZ2VuZXJpY19wcm9wZXJ0eTogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChIYXNHZW5lcmlj
UHJvcGVydHksIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgo
SGFzU3RydWN0dXJlUHJvcGVydHksIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpLAorICAg
ICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHk6IHsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGVDb25zaWRlcmluZ1Nsb3dQYXRoKGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAgTm9kZSogcHJv
cGVydHkgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKKyAgICAgICAgICAgIE5vZGUqIGhhc0l0ZXJhYmxlUHJvcGVydHkgPSBhZGRUb0dyYXBo
KEhhc0luZGV4ZWRQcm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGJhc2UsIHBy
b3BlcnR5KTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCksIGhhc0l0ZXJhYmxlUHJvcGVydHkpOworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAg
ICAgICAgICBOb2RlKiBpbmRleCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZCkpOworCisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KHByb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgCisgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdldERpcmVjdFBuYW1lLCBPcEluZm8oMCksIE9w
SW5mbyhwcmVkaWN0aW9uKSkpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZGly
ZWN0X3BuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9w
cm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEdldFN0cnVjdHVyZVBy
b3BlcnR5RW51bWVyYXRvciwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvciwgCisgICAgICAgICAg
ICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSksCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6IHsKKyAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3Jh
cGgoTmV4dEVudW1lcmF0b3JQbmFtZSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAg
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpKTsK
KyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25leHRfZW51bWVyYXRvcl9wbmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogeworICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRk
VG9HcmFwaChUb0luZGV4U3RyaW5nLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfdG9faW5kZXhfc3RyaW5nKTsKKyAgICAgICAgfQorCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4g
YmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrZXIKICAgICAgICAgICAgIC8vIHNob3VsZCBo
YXZlIGNhdWdodCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Mywx
NSBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBv
cF9zd2l0Y2hfY2hhcjoKICAgICBjYXNlIG9wX2luOgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgY2FzZSBvcF9oYXNf
Z2VuZXJpY19wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2dldF9kaXJlY3Rf
cG5hbWU6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6Cisg
ICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3Bf
bmV4dF9lbnVtZXJhdG9yX3BuYW1lOgorICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgogICAg
ICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfcHV0X3RvX3Nj
b3BlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsODMgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTWFrZVJvcGU6CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2Ug
SGFzR2VuZXJpY1Byb3BlcnR5OgorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAg
Y2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2FzZSBHZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CisgICAgY2FzZSBO
ZXh0RW51bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICAv
LyBUT0RPOiBEbyB0aGUgcmlnaHQgdGhpbmcgZm9yIGVhY2ggb2YgdGhlc2Ugb3BzLgorICAgICAg
ICByZWFkKFdvcmxkKTsKKyAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgcmVhZChKU0Nl
bGxfaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAg
ICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2gg
KG1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAg
ICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxl
bmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdv
cmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRp
ZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAg
ICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENv
bnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQXJy
YXlTdG9yYWdlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OiB7Cisg
ICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYXNlIE1v
dkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgVXBzaWxvbjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg3LDYgKzE4NywxMSBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0
OgogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgor
ICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OgorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVy
dHk6CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgY2FzZSBHZXREaXJlY3RQbmFt
ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpA
QCAtMjA5LDYgKzIxNCwxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdUeXBlZEFycmF5
OgogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICBjYXNlIEdldFN0cnVjdHVyZVBy
b3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6
CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNl
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzMCw2ICsxMDMwLDYzIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgb2JzZXJ2ZVVzZUtpbmRPbk5vZGU8U3RyaW5nVXNlPihub2RlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR2V0RW51bWVy
YWJsZUxlbmd0aDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0dlbmVy
aWNQcm9wZXJ0eTogeworICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzU3Ry
dWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6IHsKKyAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAg
ICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCksCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCks
CisgICAgICAgICAgICAgICAgICAgIFNwZWNOb25lLCBub2RlLT5mbGFncygpKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4o
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBHZXREaXJlY3RQbmFtZTogeworICAgICAgICAgICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlJiBwcm9wZXJ0eSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBpbmRleCA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMik7CisgICAgICAgICAgICBFZGdlJiBlbnVtZXJhdG9yID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVz
ZT4oYmFzZSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4ocHJvcGVydHkpOwor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihpbmRleCk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4oZW51bWVyYXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogewor
ICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3I6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7
CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0
IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5NCw2ICs5
OTQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgYm9vbCBoYXNIZWFwUHJlZGljdGlvbigpCiAgICAg
ewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToK
ICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKQEAgLTEyNTQsNiArMTI1NSw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIEFycmF5UHVzaDoK
ICAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDYgKzI4OCwxNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKICAgICBtYWNy
byhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTdG9yZUJhcnJp
ZXJXaXRoTnVsbENoZWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgXAorICAgIC8qIEZvci1p
biBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAorICAgIG1hY3JvKEdldEVudW1lcmFibGVMZW5ndGgs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhIYXNJbmRleGVk
UHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1h
Y3JvKEhhc1N0cnVjdHVyZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKKyAgICBtYWNybyhIYXNHZW5lcmljUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKEdldERpcmVjdFBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhH
ZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oTmV4dEVudW1lcmF0b3JQbmFt
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFRvSW5kZXhT
dHJpbmcsIE5vZGVSZXN1bHRKUykKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25p
Y2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBi
eSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlh
IHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldDoKICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0
OgogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CkBAIC01NTAsNiArNTUxLDM5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOwogICAg
ICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eTogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFu
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzSW5kZXhl
ZFByb3BlcnR5OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Jv
b2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRT
dHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIC8vIFRoZXNl
IGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCiAgICAgICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0
LDE1IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IEludDUyUmVwOgogICAgIGNhc2UgR2V0R2V0dGVyOgogICAgIGNhc2UgR2V0U2V0dGVyOgorICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToK
KyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OgorICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3I6CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgor
ICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZToKKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBOYXRpdmVDYWxsOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgyLDYgKzQ1ODIsNDMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAK
KyAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgY29tcGlsZUdldEVudW1l
cmFibGVMZW5ndGgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0dl
bmVyaWNQcm9wZXJ0eTogeworICAgICAgICBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTog
eworICAgICAgICBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBjb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBHZXREaXJlY3RQbmFtZTogeworICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5hbWUobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5
RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJh
dG9yKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRHZW5lcmljUHJv
cGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgIGNvbXBpbGVHZXRHZW5lcmljUHJvcGVydHlFbnVt
ZXJhdG9yKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOZXh0RW51bWVy
YXRvclBuYW1lOiB7CisgICAgICAgIGNvbXBpbGVOZXh0RW51bWVyYXRvclBuYW1lKG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAg
IGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICNp
ZiBFTkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVk
ZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IgogI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldyaXRl
QmFycmllckJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC01NTMwLDYg
KzU1MzEsMjQxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKIH0K
ICNlbmRpZiAvLyBFTkFCTEUoR0dDKQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
RW51bWVyYWJsZUxlbmd0aChOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVuZ3RoLCBy
ZXN1bHRHUFIsIGJhc2UuZ3ByKCkpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
LCBEYXRhRm9ybWF0SlNJbnQzMik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVI
YXNHZW5lcmljUHJvcGVydHkoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0
R1BSLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKK3sKKyAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgIHNjcmF0
Y2hHUFIsIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigp
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsK
KworICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJh
dGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikp
OworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShO
b2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9k
ZSgpOworICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpJbnQzMjoK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIEFTU0VSVCghIW5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICBBU1NFUlQoISFub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgRlBSUmVn
IHNjcmF0Y2hGUFIgPSBzY3JhdGNoLmZwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9
IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OworICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRjaEZQ
Uik7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBzY3JhdGNoRlBSLCBzY3JhdGNoRlBS
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdw
cigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgbV9qaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OiB7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
SGFzSW5kZXhlZFByb3BlcnR5LCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSKSk7CisgICAg
CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0RGlyZWN0UG5hbWUoTm9kZSogbm9kZSkKK3sKKyAgICBFZGdlJiBiYXNlRWRnZSA9IG1f
aml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgRWRnZSYgcHJvcGVydHlFZGdl
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICBFZGdlJiBpbmRleEVk
Z2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgIEVkZ2UmIGVudW1l
cmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKKworICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5RWRnZSk7CisgICAgU3BlY3VsYXRlSW50
MzJPcGVyYW5kIGluZGV4KHRoaXMsIGluZGV4RWRnZSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgZW51bWVyYXRvcih0aGlzLCBlbnVtZXJhdG9yRWRnZSk7CisgICAgR1BSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgZW51
bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3Mg
Y2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIAorICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNl
R1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgLy8gT3RoZXJ3aXNlIGl0J3Mg
b3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOworICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKKyAgICBt
X2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBtX2pp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCAKKyAgICAgICAgLTIgKiBzdGF0aWNfY2FzdDxp
bnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSksIHJlc3VsdEdQUik7CisgICAKKyAgICBk
b25lLmxpbmsoJm1faml0KTsKKworICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdEdQUiwgYmFz
ZUdQUiwgcHJvcGVydHlHUFIpKTsKKworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFN0cnVjdHVyZVByb3BlcnR5
RW51bWVyYXRvcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0
b3IsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0R2VuZXJpY1Byb3BlcnR5
RW51bWVyYXRvcihOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBsZW5ndGgo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0
b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIGxlbmd0aC5ncHIoKSwgZW51bWVyYXRvci5ncHIo
KSk7CisgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTmV4dEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQoreworICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsK
KworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKyAgICBHUFJS
ZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCAKKyAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c0xlbmd0aE9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworCisg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQo
KSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdEdQUik7CisKKyAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUqIG5vZGUpCit7
CisgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVG9JbmRleFN0cmluZywgcmVzdWx0R1BSLCBpbmRleC5ncHIoKSk7CisgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsNiArMzAxLDE2IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKKyAg
ICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVIYXNHZW5lcmljUHJvcGVydHkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9k
ZSopOworICAgIHZvaWQgY29tcGlsZUdldERpcmVjdFBuYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoTm9kZSopOworICAgIHZvaWQgY29t
cGlsZUdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZU5leHRFbnVtZXJhdG9yUG5hbWUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZVRvSW5kZXhTdHJp
bmcoTm9kZSopOworCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBw
cmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJl
ZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJ
bnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIEFzc2VtYmx5SGVscGVyczo6c2Vs
ZWN0U2NyYXRjaEdQUihwcmVzZXJ2ZTEsIHByZXNlcnZlMiwgcHJlc2VydmUzLCBwcmVzZXJ2ZTQp
OwpAQCAtMTI0OCw2ICsxMjU4LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRp
b25fRUNaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5n
SW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwpA
QCAtMTI2Myw2ICsxMjc4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpDIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9KSVRPcGVyYXRpb25fRUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTMxMSw2ICsx
MzM2LDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0pJVE9wZXJhdGlvbl9FSlpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0
aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNiArMzAzLDE2IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX3Jlc29sdmVfc2NvcGUp
CiAgICAgICAgIERFRklORV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICAgICAgICAgREVGSU5FX09Q
KG9wX3B1dF90b19zY29wZSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoKQorICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpCisgICAg
ICAgIERFRklORV9PUChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVf
T1Aob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZGly
ZWN0X3BuYW1lKQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9l
bnVtZXJhdG9yKQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51
bWVyYXRvcikKKyAgICAgICAgREVGSU5FX09QKG9wX25leHRfZW51bWVyYXRvcl9wbmFtZSkKKyAg
ICAgICAgREVGSU5FX09QKG9wX3RvX2luZGV4X3N0cmluZykKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KQEAgLTQy
MCw2ICs0MzAsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfdG9fbnVtYmVyKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfdG9fcHJpbWl0aXZl
KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpCisg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2RpcmVjdF9wbmFtZSkKIAogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfcmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBh
cnJheU1vZGUpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXJ0eShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwor
ICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CisKICAgICAgICAg
c3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlv
biBmdW5jKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewpA
QCAtMjU2LDYgKzI2Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2Rl
KTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVy
bkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJh
eU1vZGUpOworCiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChWTSos
IGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CiAgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpOwpAQCAtMzM2LDYgKzM0NSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gUHJv
cGVydHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVj
a2VkLgogICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4gUmV0dXJucyB0
aGUgc2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCiAgICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVz
dWx0IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KKyAgICAgICAgSnVtcExp
c3QgZW1pdEludDMyTG9hZChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpIHsgcmV0dXJuIGVtaXRDb250aWd1b3VzTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgSW50MzJTaGFwZSk7IH0KKyAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUxvYWQoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdENv
bnRpZ3VvdXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhp
bmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOworICAgICAgICBKdW1wTGlz
dCBlbWl0QXJyYXlTdG9yYWdlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpOworCiAgICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMkdldEJ5VmFsKEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkgeyByZXR1cm4gZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgSW50MzJTaGFwZSk7IH0KICAgICAgICAg
SnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFw
ZSA9IENvbnRpZ3VvdXNTaGFwZSk7CkBAIC01NDksNiArNTYzLDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2FkKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0
X2VudW1lcmFibGVfbGVuZ3RoKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9o
YXNfZ2VuZXJpY19wcm9wZXJ0eShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3Bf
aGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRf
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRfb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90b19pbmRleF9zdHJpbmcoSW5zdHJ1Y3Rpb24q
KTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9iaXRh
bmQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC02
MDIsNiArNjI1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Vuc2lnbmVkKEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X3Vyc2hpZnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfZGly
ZWN0X3BuYW1lKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDg5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiwyNCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAoraW5saW5lIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
ID0gZW1pdERvdWJsZUxvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgIG1vdmVEb3VibGVU
bzY0KGZwUmVnVDAsIHJlZ1QwKTsKKyAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
Z1QwKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBl
KQoreworICAgIHJldHVybiBlbWl0Q29udGlndW91c0xvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUs
IGV4cGVjdGVkU2hhcGUpOworfQorCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICByZXR1cm4gZW1pdEFycmF5U3RvcmFnZUxvYWQo
aW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZURvdWJsZShpbnQgc3JjKQogewogICAgIHJldHVybiBtX2Nv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJh
bmQoc3JjKS5pc0RvdWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxMSBAQAogI2luY2x1
ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZm
ZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKIApAQCAtMTIxMCw2ICsxMjEyLDI4MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2Fw
dHVyZWRfbW92KEluc3RyCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJv
cGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVnVDApOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9oYXNfc3RydWN0
dXJlX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvcGVydHkpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIAorICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAg
Y2FzZSBKSVRJbnQzMjoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyTG9hZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERvdWJs
ZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZUxvYWQoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0xvYWQoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFRPRE86
IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVu
dHMuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChN
YWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5B
ZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1Rv
U2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7
CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGlu
ZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9D
U3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAg
ICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIo
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1Qx
KTsKKworICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1l
eHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgor
ICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0
aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCisgICAgLy8gbnVt
YmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBp
bnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCisgICAgLy8gc2l6ZSBpcyBhbHdheXMg
bGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29y
cmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKKyAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vz
c2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8g
ZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KKyAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMg
aXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KKyAgICB6ZXJv
RXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spLCByZWdUMik7CisKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOworCisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1v
ZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRJbnQzMjoKKyAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERvdWJsZToKKyAgICAgICAgc2xvd0Nh
c2VzID0gZW1pdERvdWJsZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0Q29udGlndW91c0xvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRBcnJheVN0b3JhZ2VMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKSksIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Cisg
ICAgCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZz
ZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKKyAgICBKdW1wIG5vbkNlbGwgPSBq
dW1wKCk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCisgICAg
SnVtcCBub3RTdHJpbmcgPSBicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIAorICAgICAgICBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKKyAgICAgICAgbV92bS0+
c3RyaW5nU3RydWN0dXJlLmdldCgpKTsKKyAgICBicmVha3BvaW50KCk7CisvKgorICAgIFRPRE86
IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBmb3Igc3RyaW5ncy4KKyAgICBlbWl0TmFrZWRDYWxsKENv
ZGVMb2NhdGlvbkxhYmVsKG1fdm0tPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJh
dG9yKS5jb2RlKCkpKTsKKyAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdU
MCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAgICBlbWl0SnVt
cFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOworICAgIGZh
aWxlZC5saW5rKHRoaXMpOworKi8KKyAgICBub3RTdHJpbmcubGluayh0aGlzKTsKKyAgICBub25D
ZWxsLmxpbmsodGhpcyk7CisgICAgCisgICAgSnVtcCBza2lwUHJvZmlsaW5nID0ganVtcCgpOwor
ICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjaworICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKKyAgICAKKyAgICBlbWl0QXJyYXlQ
cm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAgICBza2lwUHJv
ZmlsaW5nLmxpbmsodGhpcyk7CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwor
ICAgIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgcmVnVDAs
IHJlZ1QxKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAg
bV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Rp
cmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3Ry
dWN0aW9uWzVdLnUub3BlcmFuZDsKKworICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVj
dHVyZQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisKKyAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMSk7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCksIHJlZ1QwKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAvLyBPdGhl
cndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBuZWczMihyZWdU
MSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgLTIgKiBzdGF0aWNfY2FzdDxpbnQzMl90
PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSksIHJlZ1QwKTsKKyAgICAKKyAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZGly
ZWN0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJh
c2UpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X2RpcmVjdF9w
bmFtZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0
b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dl
dF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOwor
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25leHRfZW51
bWVyYXRvcl9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJh
dG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgaW5kZXggPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1l
c0xlbmd0aE9mZnNldCgpKSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCBy
ZWdUMCk7CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgaW5Cb3VuZHMubGluayh0aGlz
KTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7CisgICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCBy
ZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX2lu
ZGV4X3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5j
bHVkZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdGFj
a0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgpAQCAtMTUwMiw2ICsxNTAzLDY0
IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAgICAgCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNj
cmlwdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CisgICAgCisgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09i
amVjdCgpKTsKKyAgICBBU1NFUlQoc3Vic2NyaXB0LmlzVUludDMyKCkpOworCisgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CisgICAgYm9vbCBkaWRPcHRpbWl6ZSA9
IGZhbHNlOworCisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGVjLT5sb2NhdGlvbkFz
Qnl0ZWNvZGVPZmZzZXQoKTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgIEJ5VmFs
SW5mbyYgYnlWYWxJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhieXRlY29k
ZU9mZnNldCAtIDEpOworICAgIEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAK
KyAgICBpZiAoaGFzT3B0aW1pemFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7
CisgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCisgICAgICAgIEpJVEFycmF5TW9kZSBh
cnJheU1vZGUgPSBqaXRBcnJheU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0p
KTsKKyAgICAgICAgaWYgKGFycmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoJnZtLCBleGVjLT5jb2RlQmxv
Y2soKSwgJmJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBh
cnJheU1vZGUpOworICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGlmICghZGlkT3B0aW1pemUpIHsKKyAgICAgICAgLy8gSWYgd2UgdGFr
ZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtl
IHN1cmUgd2UKKyAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBp
ZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QKKyAgICAgICAgLy8g
dGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAx
MCB0aW1lcy4gRm9yIGNhc2VzCisgICAgICAgIC8vIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50
ZXJjZXB0aW5nIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZgorICAg
ICAgICAvLyBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFs
IG1heSBiZSBwb2x5bW9ycGhpYy4KKyAgICAgICAgaWYgKCsrYnlWYWxJbmZvLnNsb3dQYXRoQ291
bnQgPj0gMTAKKyAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8o
KS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3Ra
ZXJvKCkpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgorICAg
ICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGV4ZWMtPmNvZGVCbG9jaygpKTsK
KyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihSZXR1cm5B
ZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHN1
YnNjcmlwdC5hc1VJbnQzMigpKSkpOworfQorICAgIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIAorICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSk7CisgICAgQVNTRVJUKHN1YnNjcmlwdC5pc1VJbnQzMigpKTsKKworICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LmFzVUludDMy
KCkpKSk7Cit9CisgICAgCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5VmFsU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKQEAgLTE4MDIsNiArMTg2MSwxMTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZNSGFuZGxlRXhjZQogICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIHZtLT5leGNlcHRpb24o
KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RW51bWVy
YWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFs
dWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKTsKKwor
ICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRFbnVt
ZXJhYmxlTGVuZ3RoKHZtLCBiYXNlKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGJhc2VWYWx1ZSwgSlNDZWxsKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisgICAgSlNPYmplY3QqIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZVZhbHVlKS50b09iamVj
dChleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlLT5oYXNQ
cm9wZXJ0eShleGVjLCBhc1N0cmluZyhwcm9wZXJ0eU5hbWUpLT50b0lkZW50aWZpZXIoZXhlYykp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIGlu
dDMyX3Qgc3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZVZh
bHVlLmlzT2JqZWN0KCkpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBzdWJzY3JpcHQpKSk7Cit9CisgICAgCitKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsK
KyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisgICAgICAgIAorICAgIEpTT2Jq
ZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5jYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOworCisgICAgaWYgKCFz
dHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkpCisgICAgICAgIHJldHVybiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisKKyAgICBQcm9wZXJ0eU5hbWVB
cnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
U3RydWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51
bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZXMpOworICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlU3RydWN0dXJlUHJv
cGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZFN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworICAgIHJldHVybiBl
bnVtZXJhdG9yOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0R2VuZXJp
Y1Byb3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlVmFsdWUsIGludDMyX3QgbGVuZ3RoLCBKU0NlbGwqIHN0cnVjdHVyZUVudW1lcmF0b3JD
ZWxsKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRl
KHZtKTsKKyAgICAKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChleGVj
KTsKKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAg
ICBpZiAoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5j
YWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKSB7CisgICAgICAgIGlmICghbGVu
Z3RoICYmIGVudW1lcmF0b3ItPmNhY2hlZFByb3RvdHlwZUNoYWluKCkgPT0gc3RydWN0dXJlLT5w
cm90b3R5cGVDaGFpbihleGVjKSkKKyAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOworICAg
IH0KKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogc3RydWN0dXJlRW51bWVyYXRvciA9
IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihzdHJ1Y3R1cmVFbnVtZXJhdG9yQ2Vs
bCk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOworICAgIHBy
b3BlcnR5TmFtZXMuc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgobGVuZ3RoKTsKKyAgICBw
cm9wZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhzdHJ1Y3R1cmVF
bnVtZXJhdG9yKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0
eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpOworICAgIAorICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2UpOworCisg
ICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjcmVhdGUodm0sIGJhc2UtPnN0cnVjdHVyZSh2bSksIHByb3BlcnR5TmFtZXMp
OworICAgIGVudW1lcmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpKTsKKyAgICBpZiAoIWxlbmd0aCAmJiBzdHJ1Y3R1cmUtPmNh
bkNhY2hlR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJl
LT5zZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7
CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
ZW51bWVyYXRvckNlbGwsIGludDMyX3QgaW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcio+KGVudW1lcmF0b3JDZWxsKTsKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1l
ID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7Cit9
CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0
ZSogZXhlYywgaW50MzJfdCBpbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4ganNT
dHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkuc3RyaW5nKCkpOworfQor
CiB9IC8vIGV4dGVybiAiQyIKIAogLy8gTm90ZTogZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhF
eGVjU3RhdGUoKSBuZWVkcyB0byBiZSBwbGFjZWQgYmVmb3JlIHRoZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NiwxMCArOTYsMTMgQEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgq
SgogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgU3RyaW5nSW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgq
Sl9KSVRPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9F
Q1opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRURBKShFeGVjU3RhdGUqLCBkb3VibGUs
IEpTQXJyYXkqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklU
T3BlcmF0aW9uX0VFKShFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VJKShFeGVjU3RhdGUqLCBTdHJp
bmdJbXBsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBK
U0NlbGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3Bl
cmF0aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKIHR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSWRjKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciopOwogdHlwZWRlZiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpKKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTIxLDYgKzEyNCw4IEBA
IHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwq
LCBKU0NlbGwqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRp
b25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKik7CiB0eXBlZGVmIEpTQ2VsbCog
SklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VK
WkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBKU0NlbGwqKTsKK3R5cGVk
ZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpKQykoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwqKTsKIHR5cGVkZWYgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpzc1N0KShFeGVjU3RhdGUqLCBK
U1N0cmluZyosIFN0cnVjdHVyZSopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpD
X0pJVE9wZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKik7
CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3NK
c3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwpAQCAtMjc3
LDYgKzI4Miw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxEZWZhdWx0KEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
U3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOwogRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJO
QUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlbGV0ZUJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgYmFzZSwgY29uc3QgSWRlbnRpZmllciopIFdURl9JTlRFUk5BTDsKQEAgLTMwMCw2ICsz
MDcsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycgogCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvbnN0KEV4ZWNTdGF0ZSosIEluc3Ry
dWN0aW9uKik7CiAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RW51
bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50
MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0U3RydWN0dXJlUHJvcGVy
dHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK0pTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBKU0NlbGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVjU3RhdGUqLCBKU0NlbGwq
LCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5n
KEV4ZWNTdGF0ZSosIGludDMyX3QpOworCiB9IC8vIGV4dGVybiAiQyIKIAogaW5saW5lIFBfSklU
T3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0ZvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwo
SW5zdHJ1Y3Rpb24KICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBp
bGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CiB9CiAK
LUpJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVMb2FkKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CiAgICAgCkBAIC0xNjAsMTMgKzE2MCwxMSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dERvdWJsZUdldEJ5VmFsKEluCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7CiAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0Vp
Z2h0KSwgZnBSZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hEb3VibGUoRG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMCkpOwotICAgIG1vdmVEb3VibGVU
bzY0KGZwUmVnVDAsIHJlZ1QwKTsKLSAgICBzdWI2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
Z1QwKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIElu
ZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICAKQEAgLTE3OSw3ICsxNzcsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNH
ZXRCeVZhCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEwLDYgKzEy
MTAsNTAgQEAgX2xsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CiBfbGxpbnRfbmF0aXZlX2Nv
bnN0cnVjdF90cmFtcG9saW5lOgogICAgIG5hdGl2ZUNhbGxUcmFtcG9saW5lKE5hdGl2ZUV4ZWN1
dGFibGU6Om1fY29uc3RydWN0b3IpCiAKK19sbGludF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6
CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dldF9l
bnVtZXJhYmxlX2xlbmd0aCkKKyAgICBkaXNwYXRjaCgzKQorCitfbGxpbnRfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHk6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xv
d19wYXRoX2hhc19pbmRleGVkX3Byb3BlcnR5KQorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9v
cF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxs
U2xvd1BhdGgoX3Nsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorICAgIGRpc3BhdGNo
KDUpCisKK19sbGludF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlv
bigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvcGVydHkpCisg
ICAgZGlzcGF0Y2goNCkKKworX2xsaW50X29wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUp
CisgICAgZGlzcGF0Y2goNykKKworX2xsaW50X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51
bWVyYXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3Bh
dGhfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgIGRpc3BhdGNoKDMpCisK
K19sbGludF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIHRyYWNlRXhl
Y3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0
eV9lbnVtZXJhdG9yKQorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9vcF9uZXh0X2VudW1lcmF0
b3JfcG5hbWU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19w
YXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSkKKyAgICBkaXNwYXRjaCg0KQorCitfbGxpbnRfb3Bf
dG9faW5kZXhfc3RyaW5nOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgo
X3Nsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCisgICAgZGlzcGF0Y2goMykKIAogIyBMYXN0bHks
IG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQg
YWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNp
bmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODAsNiArMTI4MCwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgRm9ySW5Ob2RlKFZNKiwgY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKiwgU3RhdGVt
ZW50Tm9kZSopOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUmVnaXN0ZXJJRCogdHJ5R2V0Qm91
bmRMb2NhbChCeXRlY29kZUdlbmVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRMb29wSGVhZGVy
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
dm9pZCBlbWl0TXVsdGlMb29wQnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiBkc3QpOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAgIH07CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTcwODk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDYgKzgyLDEyIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdHlwZWRl
ZiB2b2lkICgqR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBHZXRQcm9wZXJ0
eU5hbWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIAorICAgIHR5cGVkZWYgdWludDMy
X3QgKCpHZXRFbnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIpKFZNJiwgSlNPYmplY3QqKTsKKyAg
ICBHZXRFbnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIgZ2V0RW51bWVyYWJsZUxlbmd0aDsKKwor
ICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVz
OworICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRHZW5lcmljUHJvcGVydHlOYW1l
czsKKwogICAgIHR5cGVkZWYgU3RyaW5nICgqQ2xhc3NOYW1lRnVuY3Rpb25QdHIpKGNvbnN0IEpT
T2JqZWN0Kik7CiAgICAgQ2xhc3NOYW1lRnVuY3Rpb25QdHIgY2xhc3NOYW1lOwogCkBAIC0xMzcs
NiArMTQzLDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0
T3duUHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAor
ICAgICAgICAmQ2xhc3NOYW1lOjpnZXRFbnVtZXJhYmxlTGVuZ3RoLCBcCisgICAgICAgICZDbGFz
c05hbWU6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6
Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1l
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmN1c3RvbUhhc0luc3RhbmNlLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MDg5OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05hbWVTY29w
ZS5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUg
IkpTV2l0aFNjb3BlLmgiCkBAIC01NDIsNiArNTQzLDEzNiBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZW50ZXIpCiAgICAgRU5EKCk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisKKyAgICBKU09iamVjdCogYmFz
ZSA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICBSRVRVUk4oanNOdW1iZXIoYmFzZS0+
bWV0aG9kVGFibGUodm0pLT5nZXRFbnVtZXJhYmxlTGVuZ3RoKHZtLCBiYXNlKSkpOworfQorCitT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpCit7CisgICAgQkVH
SU4oKTsKKyAgICBKU09iamVjdCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVj
KTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIHBjWzRdLnUu
YXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKGJhc2UtPnN0cnVjdHVyZSh2bSkpOworICAg
IEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMigpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGJhc2Ut
Pmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5LmFzVUludDMyKCkpKSk7Cit9CisKK1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQoreworICAgIEJFR0lOKCk7
CisgICAgSlNPYmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7Cisg
ICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQocHJvcGVy
dHkuaXNTdHJpbmcoKSk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDQpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7CisgICAgaWYgKGJhc2UtPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+
Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Cisg
ICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBhc1N0cmluZyhwcm9w
ZXJ0eS5hc0NlbGwoKSktPnRvSWRlbnRpZmllcihleGVjKSkpKTsKK30KKworU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KQoreworICAgIEJFR0lOKCk7CisgICAg
SlNPYmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNW
YWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBib29sIHJlc3VsdDsKKyAgICBp
ZiAocHJvcGVydHkuaXNTdHJpbmcoKSkKKyAgICAgICAgcmVzdWx0ID0gYmFzZS0+aGFzUHJvcGVy
dHkoZXhlYywgYXNTdHJpbmcocHJvcGVydHkuYXNDZWxsKCkpLT50b0lkZW50aWZpZXIoZXhlYykp
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzIoKSk7CisgICAg
ICAgIHJlc3VsdCA9IGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5LmFzVUludDMyKCkp
OworICAgIH0KKyAgICBSRVRVUk4oanNCb29sZWFuKHJlc3VsdCkpOworfQorCitTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKK3sKKyAgICBCRUdJTigpOworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcHJvcGVydHkg
PSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgLy91aW50MzJfdCBpbmRleCA9IE9QKDQpLmpzVmFsdWUo
KS5hc1VJbnQzMigpOworICAgIC8vSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDUpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7CisgICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOworICAgIFJFVFVSTihiYXNl
VmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMpLT50b0lkZW50aWZpZXIoZXhl
YykpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVy
dHlfZW51bWVyYXRvcikKK3sKKyAgICBCRUdJTigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
T1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtKSk7Cisg
ICAgICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5jYWNoZWRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIFJFVFVSTihlbnVtZXJh
dG9yKTsKKworICAgIGlmICghc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgp
KQorICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0pKTsK
KworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CisgICAgYmFzZS0+
bWV0aG9kVGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworCisgICAgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
cmVhdGUodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lcyk7CisgICAgaWYgKHN0cnVjdHVyZS0+
Y2FuQ2FjaGVTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHN0cnVj
dHVyZS0+c2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVy
YXRvcik7CisgICAgUkVUVVJOKGVudW1lcmF0b3IpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcikKK3sKKyAgICBCRUdJTigpOwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y3JlYXRlKHZtKSk7CisgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFs
dWUudG9PYmplY3QoZXhlYyk7CisgICAgdWludDMyX3QgZW51bWVyYXRlZExlbmd0aCA9IE9QKDMp
LmpzVmFsdWUoKS5hc1VJbnQzMigpOworCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
LT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1l
cmF0b3IgPSBzdHJ1Y3R1cmUtPmNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkp
IHsKKyAgICAgICAgaWYgKCFlbnVtZXJhdGVkTGVuZ3RoICYmIGVudW1lcmF0b3ItPmNhY2hlZFBy
b3RvdHlwZUNoYWluKCkgPT0gc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihleGVjKSkKKyAgICAg
ICAgICAgIFJFVFVSTihlbnVtZXJhdG9yKTsKKyAgICB9CisKKyAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIHN0cnVjdHVyZUVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKj4oT1AoNCkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKworICAgIFByb3BlcnR5TmFtZUFy
cmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CisgICAgcHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5
RW51bWVyYXRlZExlbmd0aChlbnVtZXJhdGVkTGVuZ3RoKTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNl
dFByZXZpb3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKKyAg
ICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorICAg
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2UpOworCisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVh
dGUodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lcyk7CisgICAgZW51bWVyYXRvci0+c2V0Q2Fj
aGVkUHJvdG90eXBlQ2hhaW4odm0sIHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYykpOwor
ICAgIGlmICghZW51bWVyYXRlZExlbmd0aCAmJiBzdHJ1Y3R1cmUtPmNhbkNhY2hlR2VuZXJpY1By
b3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJlLT5zZXRDYWNoZWRHZW5l
cmljUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7CisgICAgUkVUVVJOKGVu
dW1lcmF0b3IpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9y
X3BuYW1lKQoreworICAgIEJFR0lOKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDIpLmpzVmFs
dWUoKS5hc0NlbGwoKSk7CisgICAgdWludDMyX3QgaW5kZXggPSBPUCgzKS5qc1ZhbHVlKCkuYXNV
SW50MzIoKTsKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVy
dHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5
TmFtZSA6IGpzTnVsbCgpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX2luZGV4
X3N0cmluZykKK3sKKyAgICBCRUdJTigpOworICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIE9QKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJpbmcoKSkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpIHx8IEVO
QUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDYgKzIy
NiwxNSBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKIFNMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX3N0cmNhdCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3By
aW1pdGl2ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19nZW5lcmljX3By
b3BlcnR5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19pbmRleGVkX3By
b3BlcnR5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFt
ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVy
dHlfZW51bWVyYXRvcik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9nZW5l
cmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF90b19pbmRleF9zdHJpbmcpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzYsNCArMjM2LDE5IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0NlbGw6Omdl
dFQKICAgICByZXR1cm4gMDsKIH0KIAordWludDMyX3QgSlNDZWxsOjpnZXRFbnVtZXJhYmxlTGVu
Z3RoKFZNJiwgSlNPYmplY3QqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgSlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDM2IEBAIGNsYXNzIFN0
cnVjdHVyZTsKIAogZW51bSBFbnVtZXJhdGlvbk1vZGUgewogICAgIEV4Y2x1ZGVEb250RW51bVBy
b3BlcnRpZXMsCi0gICAgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcworICAgIEV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3QsCisgICAgSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcywKKyAgICBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0CiB9Owog
CitpbmxpbmUgYm9vbCBzaG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKEVudW1lcmF0
aW9uTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllczoKKyAgICBjYXNlIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXM6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllc0Fu
ZFNraXBKU09iamVjdDoKKyAgICBjYXNlIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lw
SlNPYmplY3Q6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBFbnVt
ZXJhdGlvbk1vZGUgbW9kZVRoYXRTa2lwc0pTT2JqZWN0KEVudW1lcmF0aW9uTW9kZSBtb2RlKQor
eworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
czoKKyAgICAgICAgcmV0dXJuIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmpl
Y3Q7CisgICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAgICAgICByZXR1cm4g
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDsKKyAgICBjYXNlIEV4Y2x1
ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgY2FzZSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gbW9kZTsKKyAg
ICB9Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVfdCk7
CiAKQEAgLTIwOSw2ICsyMzYsMTEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
ICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB1aW50MzJfdCBnZXRFbnVt
ZXJhYmxlTGVuZ3RoKFZNJiwgSlNPYmplY3QqKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKwog
ICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgY3VzdG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVj
U3RhdGUqLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9y
JiwgYm9vbCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODQsNiArMTI4NCwx
MiBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdl
dE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIFByb3BlcnR5
U2xvdCBzbG90KHRoaXMpOworICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcykt
Pm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGNvbnN0
X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwog
Ym9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC0xNDY0LDYgKzE0NzAsOSBAQCB2b2lkIEpTT2JqZWN0
OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAKIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgaWYgKCFz
aG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKG1vZGUpKQorICAgICAgICByZXR1cm47
CisKICAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0IGFwcGVhcnMgdG8g
YmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCiAgICAgLy8gRklYTUU6IEZpbGxpbmcgUHJvcGVy
dHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRlZ2VyCiAgICAgLy8g
aXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBXZSBuZWVkIGEgZGlm
ZmVyZW50IGFwcHJvYWNoLApAQCAtMTQ4MCw3ICsxNDg5LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dXNlZExlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+Y29udGlndW91
cygpW2ldKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDky
LDcgKzE1MDEsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAg
ICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhl
YywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTUwMyw3ICsxNTEyLDcgQEAgdm9pZCBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVu
Z3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0b3JMZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQotICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGkpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VNYXAu
Z2V0KCkpIHsKQEAgLTE1MTgsNyArMTUyNyw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMu
YmVnaW4oKSwga2V5cy5lbmQoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwga2V5cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChrZXlzW2ldKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xNTI2LDIwICsxNTM1LDE1IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMo
SlNPYmoKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KLSAgICAKKyAgIAogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOwogfQogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgZ2V0Q2xhc3NQcm9wZXJ0
eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9i
amVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKLQogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgYm9vbCBjYW5DYWNoZVByb3BlcnRpZXNGcm9tU3RydWN0dXJlID0gIXByb3BlcnR5
TmFtZXMuc2l6ZSgpOworICAgIGdldENsYXNzUHJvcGVydHlOYW1lcyhleGVjLCBvYmplY3QtPmNs
YXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlLCBvYmplY3QtPnN0YXRpY0Z1bmN0aW9uc1Jl
aWZpZWQoKSk7CiAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0KLSAgICBpZiAoY2FuQ2FjaGVQ
cm9wZXJ0aWVzRnJvbVN0cnVjdHVyZSkKLSAgICAgICAgcHJvcGVydHlOYW1lcy5zZXROdW1DYWNo
ZWFibGVTbG90c0Zvck9iamVjdChvYmplY3QsIHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKIH0KIAog
ZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC0yNjUy
LDQgKzI2NTYsODQgQEAgSlNPYmplY3QqIHRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYwog
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBtZXNzYWdlKSk7CiB9CiAKK3VpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxl
TGVuZ3RoKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5ob2xlc011
c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzd2l0Y2gg
KG9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKKyAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJl
dHVybiAwOworICAgICAgICAKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAg
ICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gb2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgdW5zaWduZWQgdXNl
ZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnV0dGVy
Zmx5LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHVzZWRMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBvYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICB1bnNpZ25lZCB1c2VkTGVuZ3RoID0g
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHVzZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVy
Zmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHVzZWRMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVj
dC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9z
cGFyc2VNYXAuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwg
c3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1f
dmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB1c2VkVmVjdG9yTGVuZ3RoOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCit2b2lkIEpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVj
dHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlVGhhdFNr
aXBzSlNPYmplY3QobW9kZSkpOworCisgICAgaWYgKG9iamVjdC0+cHJvdG90eXBlKCkuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVj
dChvYmplY3QtPnByb3RvdHlwZSgpKTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAo
cHJvdG90eXBlLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMoKSkgeworICAgICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldFBy
b3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7CisgICAgICAgIEpTVmFsdWUgbmV4dFByb3RvID0gcHJvdG90eXBlLT5wcm90b3R5cGUo
KTsKKyAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJvdG8pOworICAgIH0KK30KKworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDYgKzQ2Miw3IEBAIHB1YmxpYzoK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzT3du
UHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBib29sIGhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7
CkBAIC00NzUsNiArNDc2LDEwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKFZNJiwgSlNPYmplY3Qq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworCiAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQ
cmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICBib29sIGdl
dFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpIGNv
bnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKworI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjb25zdCBDbGFzc0luZm8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpzX2luZm8gPSB7
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcikgfTsKKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0pCit7CisgICAgaWYgKCF2
bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgUHJvcGVydHlO
YW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0pOworICAgICAgICB2bS5lbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IgPSBTdHJvbmc8SlNDZWxsPih2bSwgY3JlYXRlKHZtLCAwLCBwcm9wZXJ0eU5h
bWVzKSk7CisgICAgfQorICAgIHJldHVybiBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Kj4odm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpKTsKK30KKworSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykK
K3sKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+
aWQoKSA6IDA7CisgICAgdWludDMyX3QgaW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUgPyBzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkgOiAwOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IG5ldyAoTm90TnVsbCwgCisgICAgICAgIGFsbG9jYXRlQ2VsbDxKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I+KHZtLmhlYXApKSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Io
dm0sIHN0cnVjdHVyZUlELCBpbmxpbmVDYXBhY2l0eSwgcHJvcGVydHlOYW1lcy5pZGVudGlmaWVy
U2V0KCkpOworICAgIGVudW1lcmF0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBwcm9wZXJ0eU5hbWVz
LmRhdGEoKSk7CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQsIHVpbnQzMl90IGlubGluZUNhcGFjaXR5LCBSZWZDb3VudGVkSWRlbnRpZmllclNl
dCogc2V0KQorICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0
dXJlLmdldCgpKQorICAgICwgbV9pZGVudGlmaWVyU2V0KHNldCkKKyAgICAsIG1fY2FjaGVkU3Ry
dWN0dXJlSUQoc3RydWN0dXJlSUQpCisgICAgLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KGlubGlu
ZUNhcGFjaXR5KQoreworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBQYXNzUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gaWRlbnRz
KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgIFJlZlB0cjxQcm9wZXJ0
eU5hbWVBcnJheURhdGE+IGlkZW50aWZpZXJzID0gaWRlbnRzOworICAgIFByb3BlcnR5TmFtZUFy
cmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiB2ZWN0b3IgPSBpZGVudGlmaWVycy0+cHJvcGVy
dHlOYW1lVmVjdG9yKCk7CisgICAgbV9wcm9wZXJ0eU5hbWVzLnJlc2l6ZSh2ZWN0b3Iuc2l6ZSgp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB2ZWN0b3JbaV07CisgICAgICAg
IG1fcHJvcGVydHlOYW1lc1tpXS5zZXQodm0sIHRoaXMsIGpzU3RyaW5nKCZ2bSwgaWRlbnRpZmll
ci5zdHJpbmcoKSkpOworICAgIH0KK30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqPihjZWxsKS0+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp+SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKCk7Cit9CisKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fcHJvcGVydHlOYW1l
cy5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJv
cGVydHlOYW1lc1tpXSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvdG90
eXBlQ2hhaW4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9oCisjZGVmaW5lIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQ
cm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgSWRlbnRpZmllcjsKKworY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
KworICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNyZWF0ZShWTSYpOworICAg
IHN0YXRpYyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSos
IFByb3BlcnR5TmFtZUFycmF5Jik7CisKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVy
ZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOworCisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZUF0SW5kZXgodWludDMyX3QgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gbV9wcm9wZXJ0eU5hbWVzLnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9wcm9w
ZXJ0eU5hbWVzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICBSZWZDb3VudGVkSWRlbnRpZmll
clNldCogaWRlbnRpZmllclNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pZGVu
dGlmaWVyU2V0LmdldCgpOworICAgIH0KKworICAgIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90
b3R5cGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlQ2hhaW4uZ2V0KCk7IH0KKyAg
ICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKFZNJiB2bSwgU3RydWN0dXJlQ2hhaW4qIHBy
b3RvdHlwZUNoYWluKSB7IHJldHVybiBtX3Byb3RvdHlwZUNoYWluLnNldCh2bSwgdGhpcywgcHJv
dG90eXBlQ2hhaW4pOyB9CisKKyAgICBTdHJ1Y3R1cmVJRCBjYWNoZWRTdHJ1Y3R1cmVJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlSUQ7IH0KKyAgICB1aW50MzJfdCBjYWNoZWRJ
bmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1
cmVJRCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9j
YWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFByb3Bl
cnR5TmFtZXNMZW5ndGhPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcykgKyBWZWN0b3I8
V3JpdGVCYXJyaWVyPEpTU3RyaW5nPj46OnNpemVNZW1vcnlPZmZzZXQoKTsKKyAgICB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LCBtX3Byb3BlcnR5TmFtZXMpICsgVmVjdG9yPFdyaXRlQmFycmllcjxKU1N0cmluZz4+OjpkYXRh
TWVtb3J5T2Zmc2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJ
bW1vcnRhbCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW47CisKKyAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmVJRCwgdWludDMyX3QsIFJlZkNvdW50ZWRJZGVudGlmaWVy
U2V0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFBhc3NSZWZQdHI8UHJvcGVydHlO
YW1lQXJyYXlEYXRhPik7CisKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPj4gbV9w
cm9wZXJ0eU5hbWVzOworICAgIFJlZlB0cjxSZWZDb3VudGVkSWRlbnRpZmllclNldD4gbV9pZGVu
dGlmaWVyU2V0OworICAgIFN0cnVjdHVyZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CisgICAgV3Jp
dGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOworICAgIHVpbnQzMl90
IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2
ICsxMTgsMTIgQEAgdm9pZCBKU1Byb3h5OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KgogICAg
IHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0UHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7
CiB9CiAKK3ZvaWQgSlNQcm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Byb3h5Kj4ob2JqZWN0KTsKKyAgICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdl
dCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwogdm9pZCBKU1Byb3h5OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAg
IEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShyZXZpc2lvbiAxNzA4OTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDYgKzgzLDcgQEAgcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25l
ZCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAJ
KHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5TmFtZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzMgKzIzLDMyIEBACiAKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0
IHNpemVfdCBzZXRUaHJlc2hvbGQgPSAyMDsKLQogdm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6YWRk
KFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpZGVudGlmaWVyIHx8IGlk
ZW50aWZpZXIgPT0gU3RyaW5nSW1wbDo6ZW1wdHkoKSB8fCBpZGVudGlmaWVyLT5pc0F0b21pYygp
KTsKLQotICAgIHNpemVfdCBzaXplID0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXpl
KCk7Ci0gICAgaWYgKHNpemUgPCBzZXRUaHJlc2hvbGQpIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1f
ZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV0uaW1wbCgpKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3NldC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAg
ICAgICAgICAgICAgIG1fc2V0LmFkZChtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldLmlt
cGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX3NldC5hZGQoaWRlbnRpZmllcikuaXNO
ZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
eworICAgICAgICB1aW50MzJfdCBpbmRleCA9IFByb3BlcnR5TmFtZShJZGVudGlmaWVyKG1fdm0s
IGlkZW50aWZpZXIpKS5hc0luZGV4KCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5kZXgsIGlu
ZGV4ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCB8fCBpbmRleCA+PSBtX3ByZXZpb3VzbHlF
bnVtZXJhdGVkTGVuZ3RoKTsKICAgICB9CiAKKyAgICBpZiAobV9hbHRlcm5hdGVTZXQgJiYgbV9h
bHRlcm5hdGVTZXQtPmNvbnRhaW5zKGlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fc2V0LT5hZGQoaWRlbnRpZmllcikuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgYWRkS25vd25VbmlxdWUoaWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgUHJvcGVydHlO
YW1lQXJyYXk6OnNldFByZXZpb3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhjb25zdCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9hbHRlcm5hdGVTZXQgPSBl
bnVtZXJhdG9yLT5pZGVudGlmaWVyU2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJh
eS5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwyMiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKICAgICAKKyAgICBjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7
CiAgICAgY2xhc3MgU3RydWN0dXJlOwogICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogCisgICAg
Y2xhc3MgUmVmQ291bnRlZElkZW50aWZpZXJTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3Vu
dGVkSWRlbnRpZmllclNldD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBIYXNoU2V0
PFN0cmluZ0ltcGwqLCBQdHJIYXNoPFN0cmluZ0ltcGwqPj4gU2V0OworCisgICAgICAgIGJvb2wg
Y29udGFpbnMoU3RyaW5nSW1wbCogaW1wbCkgY29uc3QgeyByZXR1cm4gbV9zZXQuY29udGFpbnMo
aW1wbCk7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCAgeyByZXR1cm4gbV9zZXQuc2l6
ZSgpOyB9CisgICAgICAgIFNldDo6QWRkUmVzdWx0IGFkZChTdHJpbmdJbXBsKiBpbXBsKSB7IHJl
dHVybiBtX3NldC5hZGQoaW1wbCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNldCBtX3Nl
dDsKKyAgICB9OworCiAgICAgLy8gRklYTUU6IFJlbmFtZSB0byBQcm9wZXJ0eU5hbWVBcnJheS4K
ICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxQcm9w
ZXJ0eU5hbWVBcnJheURhdGE+IHsKICAgICBwdWJsaWM6CkBAIC01MywyNSArNjYsNDAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheShWTSog
dm0pCiAgICAgICAgICAgICA6IG1fZGF0YShQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0ZSgp
KQorICAgICAgICAgICAgLCBtX3NldChhZG9wdFJlZihuZXcgUmVmQ291bnRlZElkZW50aWZpZXJT
ZXQpKQogICAgICAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAgICAgLCBtX251bUNhY2hlYWJs
ZVNsb3RzKDApCiAgICAgICAgICAgICAsIG1fYmFzZU9iamVjdCgwKQorICAgICAgICAgICAgLCBt
X3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCiAg
ICAgICAgIFByb3BlcnR5TmFtZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIDog
bV9kYXRhKFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3JlYXRlKCkpCisgICAgICAgICAgICAsIG1f
c2V0KGFkb3B0UmVmKG5ldyBSZWZDb3VudGVkSWRlbnRpZmllclNldCkpCiAgICAgICAgICAgICAs
IG1fdm0oJmV4ZWMtPnZtKCkpCiAgICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkK
ICAgICAgICAgICAgICwgbV9iYXNlT2JqZWN0KDApCisgICAgICAgICAgICAsIG1fcHJldmlvdXNs
eUVudW1lcmF0ZWRMZW5ndGgoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVk0q
IHZtKCkgeyByZXR1cm4gbV92bTsgfQogCisgICAgICAgIHZvaWQgYWRkKHVpbnQzMl90IGluZGV4
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPCBtX3ByZXZpb3VzbHlFbnVtZXJh
dGVkTGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGFkZChJZGVu
dGlmaWVyOjpmcm9tKG1fdm0sIGluZGV4KSk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGFk
ZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVyLmltcGwoKSk7
IH0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoU3RyaW5nSW1wbCopOwotICAg
ICAgICB2b2lkIGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRh
LT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVy
KSk7IH0KKyAgICAgICAgdm9pZCBhZGRLbm93blVuaXF1ZShTdHJpbmdJbXBsKiBpZGVudGlmaWVy
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3NldC0+YWRkKGlkZW50aWZpZXIpOworICAgICAg
ICAgICAgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3Zt
LCBpZGVudGlmaWVyKSk7CisgICAgICAgIH0KIAogICAgICAgICBJZGVudGlmaWVyJiBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV07
IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CkBAIC04MCw3ICsx
MDgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YSog
ZGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogICAgICAgICBQYXNzUmVmUHRyPFByb3Bl
cnR5TmFtZUFycmF5RGF0YT4gcmVsZWFzZURhdGEoKSB7IHJldHVybiBtX2RhdGEucmVsZWFzZSgp
OyB9CiAKKyAgICAgICAgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqIGlkZW50aWZpZXJTZXQoKSBj
b25zdCB7IHJldHVybiBtX3NldC5nZXQoKTsgfQorCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhlc2UgZnVuY3Rpb25zLgorICAgICAgICBib29sIGNhbkFkZEtub3duVW5pcXVlRm9yU3RydWN0
dXJlKCkgY29uc3QgeyByZXR1cm4gIW1fc2V0LT5zaXplKCkgJiYgKCFtX2FsdGVybmF0ZVNldCB8
fCAhbV9hbHRlcm5hdGVTZXQtPnNpemUoKSk7IH0KICAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU5h
bWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRl
cmF0b3I7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5wcm9w
ZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmJlZ2luKCk7IH0K
QEAgLTEwMCwxNCArMTMxLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9iYXNl
T2JqZWN0ID0gb2JqZWN0OwogICAgICAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICB0eXBl
ZGVmIEhhc2hTZXQ8U3RyaW5nSW1wbCosIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBJZGVudGlmaWVy
U2V0OworICAgICAgICB2b2lkIHNldFByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKHVpbnQzMl90
IGxlbmd0aCkgeyBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoID0gbGVuZ3RoOyB9CisgICAg
ICAgIHZvaWQgc2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKGNvbnN0IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciopOwogCisgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFByb3Bl
cnR5TmFtZUFycmF5RGF0YT4gbV9kYXRhOwotICAgICAgICBJZGVudGlmaWVyU2V0IG1fc2V0Owor
ICAgICAgICBSZWZQdHI8UmVmQ291bnRlZElkZW50aWZpZXJTZXQ+IG1fc2V0OworICAgICAgICBS
ZWZQdHI8UmVmQ291bnRlZElkZW50aWZpZXJTZXQ+IG1fYWx0ZXJuYXRlU2V0OwogICAgICAgICBW
TSogbV92bTsKICAgICAgICAgc2l6ZV90IG1fbnVtQ2FjaGVhYmxlU2xvdHM7CiAgICAgICAgIEpT
T2JqZWN0KiBtX2Jhc2VPYmplY3Q7CisgICAgICAgIHVpbnQzMl90IG1fcHJldmlvdXNseUVudW1l
cmF0ZWRMZW5ndGg7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDE3
MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsMTMgQEAgdm9pZCBSZWdFeHBPYmplY3Q6Omdl
dFByb3BlcnR5TmFtZXMoSlNPYgogICAgIEJhc2U6OmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAordm9pZCBSZWdFeHBPYmplY3Q6OmdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOworICAgIEJhc2U6
OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Cit9CisKIHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dF
eGNlcHRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHRocm93RXhjZXB0aW9u
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJ
KHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMyArNzcsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVy
ZSosIFJlZ0V4cCopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJik7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBwcml2YXRlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZp
c2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRHVtcENvbnRl
eHQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlN
YXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgpAQCAtOTU2LDcg
Kzk1Niw3IEBAIHZvaWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnUKICAgICBp
ZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBrbm93blVu
aXF1ZSA9ICFwcm9wZXJ0eU5hbWVzLnNpemUoKTsKKyAgICBib29sIGtub3duVW5pcXVlID0gcHJv
cGVydHlOYW1lcy5jYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpOwogCiAgICAgUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKICAgICBmb3Ig
KFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKQEAgLTEyMjMsNCArMTIyMyw3OSBAQCBib29sIENsYXNz
SW5mbzo6aGFzU3RhdGljU2V0dGVyT3JSZWFkb25sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihW
TSYgdm0sIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBBU1NF
UlQoIWlzRGljdGlvbmFyeSgpKTsKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIGFs
bG9jYXRlUmFyZURhdGEodm0pOworICAgIHJhcmVEYXRhKCktPnNldENhY2hlZFN0cnVjdHVyZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworfQorCitKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIFN0cnVjdHVyZTo6Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVy
YXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gcmFyZURhdGEoKS0+Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlO
YW1lRW51bWVyYXRvcigpOworfQorCit2b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkR2VuZXJpY1By
b3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IpCit7CisgICAgQVNTRVJUKCFpc0RpY3Rpb25hcnkoKSk7CisgICAgaWYgKCFoYXNS
YXJlRGF0YSgpKQorICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICByYXJlRGF0YSgp
LT5zZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7
Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlOjpjYWNoZWRHZW5lcmlj
UHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmFyZURhdGEoKS0+Y2FjaGVk
R2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKworYm9vbCBTdHJ1Y3R1cmU6OmNh
bkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYg
KGlzRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUT0RPOiBX
ZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgc2luY2Ugb3ZlcnJpZGVuIHByb3BlcnR5IG5hbWVz
IGFyZSBwYXJ0IG9mIHRoZSBnZW5lcmljIHByb3BlcnR5IGxvb3AuCisgICAgaWYgKHR5cGVJbmZv
KCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5DYWNoZUdlbmVy
aWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWNhbkNhY2hlU3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4gPSBtX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIEFTU0VSVChzdHJ1Y3R1cmVDaGFpbik7Cisg
ICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNoYWluLT5o
ZWFkKCk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmdldCgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdldCgpLT50eXBl
SW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgc3RydWN0dXJlKys7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpIGNvbnN0Cit7
CisgICAgaWYgKGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTcwODk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMsMTUgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRF
bnVtZXJhdGlvbkNhY2hlKFZNJiwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25D
YWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUoKTsgLy8gRGVmaW5lZCBpbiBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmguCisKKyAgICB2b2lkIHNldENhY2hlZFN0cnVjdHVyZVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsKKyAgICB2
b2lkIHNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKik7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBjYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0
OworICAgIGJvb2wgY2FuQ2FjaGVTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29u
c3Q7CisgICAgYm9vbCBjYW5DYWNoZUdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29u
c3Q7CisgICAgYm9vbCBjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpIGNvbnN0OworCiAgICAg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYsIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIEpTU3RyaW5nKiBvYmplY3RUb1N0cmluZ1ZhbHVl
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDE3MDg5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRh
LmgiCiAKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCkBAIC02OCw2ICs2OSwyOCBAQCB2b2lkIFN0cnVjdHVyZVJhcmVEYXRh
Ojp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJl
dmlvdXMpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX29iamVjdFRvU3RyaW5n
VmFsdWUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2VudW1lcmF0aW9uQ2Fj
aGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhY2hlZFN0cnVjdHVyZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2NhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKK30KKworSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlO
YW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlUHJv
cGVydHlOYW1lRW51bWVyYXRvci5nZXQoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6
c2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0sIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBtX2NhY2hlZFN0cnVjdHVyZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3Iuc2V0KHZtLCB0aGlzLCBlbnVtZXJhdG9yKTsKK30KKworSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkR2VuZXJpY1By
b3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hlZEdlbmVy
aWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpOworfQorCit2b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjpzZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0sIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBtX2NhY2hlZEdlbmVyaWNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCh2bSwgdGhpcywgZW51bWVyYXRvcik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogY2xhc3MgU3RydWN0
dXJlOwogCkBAIC02MSw2ICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAorICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2FjaGVkU3RydWN0dXJl
UHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OworICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKyAgICB2
b2lkIHNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqKTsKKyAgICB2b2lkIHNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKICAgICAKQEAgLTcxLDYgKzc3LDggQEAgcHJp
dmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwogICAgIFdyaXRl
QmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdyaXRlQmFycmll
cjxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7CisgICAgV3JpdGVC
YXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I+IG1fY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAgICAgCiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBSZWZQdHI8V2F0Y2hwb2ludFNldD4sIFdURjo6
SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9wZXJ0eVdhdGNocG9pbnRNYXA7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFByb3BlcnR5V2F0Y2hwb2ludE1hcD4gbV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTcwODk5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2luY2x1ZGUg
IkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlUmVhY3Rpb24uaCIKKyNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMZXhl
ci5oIgpAQCAtMjU4LDYgKzI1OSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBo
ZWFwVHlwZSkKICAgICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIG5vdEFuT2JqZWN0U3RydWN0dXJl
LnNldCgqdGhpcywgSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogICAgIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OworICAgIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBHZXR0ZXJTZXR0ZXI6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhcGlXcmFwcGVyU3RydWN0dXJl
LnNldCgqdGhpcywgSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICBKU1Njb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNTY29wZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzA4OTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVyZTsKICAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlOworICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlOwogICAgICAgICBT
dHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IEpTU2NvcGVTdHJ1Y3R1cmU7CkBAIC0yOTEsNiArMjkyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKICNlbmRp
ZgogICAgICAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOworICAgICAgICBT
dHJvbmc8SlNDZWxsPiBlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAKICAgICAgICAgQXRv
bWljU3RyaW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgICAgIENvbW1vbklkZW50
aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcwODk5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODEsNiArMzgxLDE1IEBAIGJvb2wgSlNET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCgKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK3ZvaWQgSlNET01XaW5kb3c6OmdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpT
RE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKKyAg
ICAvLyBPbmx5IGFsbG93IHRoZSB3aW5kb3cgdG8gZW51bWVyYXRlZCBieSBmcmFtZXMgaW4gdGhl
IHNhbWUgb3JpZ2luLgorICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIHJldHVybjsK
KyAgICBCYXNlOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvdzo6Z2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0RPTVdpbmRvdyog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMTcwODk5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsNyBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAjIEN1c3RvbSBnZXRQcm9wZXJ0eU5hbWVzIGZ1bmN0aW9uIGV4aXN0cyBv
biBET01XaW5kb3cKICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJy
YXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2
b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0g
SlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTtcbiIpOwogICAgICAgICAkc3RydWN0dXJl
RmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyJ9ID0gMTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235101</attachid>
            <date>2014-07-17 17:46:31 -0700</date>
            <delta_ts>2014-07-17 18:45:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140717174615.patch</filename>
            <type>text/plain</type>
            <size>218325</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MCBA
QAorMjAxNC0wNy0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwpOgor
ICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6fkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNWYWxpZCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6
OkZvckluQ29udGV4dDo6bG9jYWwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvcklu
Q29udGV4dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hPcHRpbWlzZWRGb3JJbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpbWlzZWRGb3JJbik6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChK
U0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9k
ZTo6dHJ5R2V0Qm91bmRMb2NhbCk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdExvb3BI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1
Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAg
ICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50MzJMb2FkKToKKyAgICAgICAgKiBq
aXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX2luZGV4X3N0cmluZyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3N0cnVjdHVy
ZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9n
ZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmV4dF9lbnVtZXJhdG9yX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX2lu
ZGV4X3N0cmluZyk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RG91YmxlTG9hZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdENvbnRpZ3VvdXNMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9y
YWdlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwpOiBEZWxldGVkLgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0Q29udGlndW91c0xvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVM
b2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZCk6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcGFyc2VyL05vZGVz
Lmg6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpBcmd1
bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZv
Lmg6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRFbnVtZXJhYmxlTGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6c2hvdWxkSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNob3VsZEV4Y2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpOgorICAgICAgICAoSlNDOjpzaG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6bW9kZVRoYXRTa2lwc0pTT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpnZXRDbGFzc1Byb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6aGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RW51bWVy
YWJsZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6cHJvcGVydHlOYW1lQXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6aWRlbnRpZmllclNldCk6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlND
OjpKU1Byb3h5OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6
Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N5
bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheTo6YWRkKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OnNldFByZXZp
b3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oOgorICAgICAgICAoSlNDOjpSZWZDb3VudGVkSWRlbnRpZmllclNldDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpSZWZDb3VudGVkSWRlbnRpZmllclNldDo6c2l6ZSk6CisgICAg
ICAgIChKU0M6OlJlZkNvdW50ZWRJZGVudGlmaWVyU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheTo6UHJvcGVydHlOYW1lQXJyYXkpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheTo6YWRkKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFk
ZEtub3duVW5pcXVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmlkZW50aWZp
ZXJTZXQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6Y2FuQWRkS25vd25Vbmlx
dWVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJl
dmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYWNoZWRHZW5lcmljUHJv
cGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQ2FjaGVT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpjYW5DYWNoZUdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSk6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRTdHJ1
Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFy
ZURhdGE6OmNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDE0LTA3LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW2Z0bG9wdF0gQ29uc3RhbnQgZm9sZCBHZXRHZXR0ZXIgYW5kIEdldFNldHRlciBp
ZiB0aGUgR2V0dGVyU2V0dGVyIGlzIGEgY29uc3RhbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lv
biAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob24KICAgICAgICAgICAgIGZvciAoaXRlcmF0b3Ig
aXQgPSBzdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAg
ICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgICAg
IFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICAgICAg
ICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKSkpCisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAmJiAoIShl
bnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSkpCiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFtZSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46OmdldE93bk5vbgogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1
bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgU3Ry
aW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgU3RhdGljRnVu
Y3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAo
bW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICBpZiAo
IShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChz
aG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSkKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODEzLDYgKzgxMyw4IEBACiAJ
CTFDQUE5QTIzMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQUE5QTIx
MThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCAqLzsgfTsK
IAkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0MTUyQkFBQTcw
MDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3MTUyQkFBQTcw
MDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9p
bmVyLmggKi87IH07CisJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5jcHAgKi87IH07CisJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCAqLzsgfTsKIAkJMkEyODI1RDAxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2Nv
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMjgy
NUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi87IH07CiAJCTJB
NDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAw
RTJBMjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OwogCQkyQTRCQjdGMzE4QTQxMTc5
MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpT
TWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTI5NjEsNiArMjk2Myw4IEBACiAJCTFD
QUE5QTIxMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxPYmplY3RQcm9maWxlckFn
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MDBCNUE0MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1N0cmluZ0pvaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0pvaW5lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJB
MDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAv
KiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlbGF5ZWRSZWxlYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEz
NDNGNzQxOEExNzQ4QjAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NTZWdtZW50ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTM0M0Y3NzE4QTE3NDlEMDAzOUIwODUgLyogR0NTZWdtZW50ZWRBcnJh
eUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NTZWdtZW50ZWRB
cnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5NzUsNiArNDk3
OSw4IEBACiAJCQkJMTQyMEJFN0ExMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLywK
IAkJCQlBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
QzJCNkQ3NTIxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCAqLywKKwkJ
CQkyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNw
cCAqLywKKwkJCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNjU5Niw2ICs2NjAyLDcgQEAKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFi
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRTE2NkFE
MzYwMDAwRjVCQTMgLyogUHJvZmlsZXJFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjE5MENBRDE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkYxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKQEAgLTc3NDMsNiArNzc1MCw3IEBACiAJCQkJODY4ODBG
MUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklU
NjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyQTA1QUJENTE5NjFE
RjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzIwQ0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFj
a0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEy
NSwxNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV93aWxsX2NhbGwiLCAi
bGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Byb2ZpbGVfZGlkX2Nh
bGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2VuZCIsICJs
ZW5ndGgiIDogMiB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193
aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6IDQgfQorICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6IDQgfSwK
KyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCIsICJsZW5n
dGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2hhc19nZW5lcmljX3Byb3BlcnR5IiwgImxlbmd0aCIgOiA0IH0sCisgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9nZXRfZGlyZWN0X3BuYW1lIiwgImxlbmd0aCIgOiA3IH0sCisgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IiLCAi
bGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9nZW5lcmljX3By
b3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX25leHRfZW51bWVyYXRvcl9wbmFtZSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfdG9faW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0KICAgICAg
ICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsNiArMTE4LDggQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhc2Ug
b3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6
CiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CkBAIC0xNTAsNiArMTUyLDEwIEBAIHZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ss
IGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAg
IGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6
CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
bDoKICAgICBjYXNlIG9wX2luOgpAQCAtMTc5LDYgKzE4NSw4IEBAIHZvaWQgY29tcHV0ZVVzZXNG
b3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKICAgICAgICAgZnVuY3Rvcihjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
QEAgLTE4Niw2ICsxOTQsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9n
ZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogewogICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwpAQCAtMjk4LDYgKzMwNywxNSBAQCB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAjdW5kZWYgTExJTlRfSEVMUEVSX09Q
Q09ERVMKICAgICAgICAgcmV0dXJuOwogICAgIC8vIFRoZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRl
c3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgY2FzZSBvcF90b19pbmRleF9z
dHJpbmc6CisgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAg
IGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIGNhc2Ug
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgor
ICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ug
b3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOgogICAgIGNhc2Ugb3BfbmV4dF9wbmFtZToKICAgICBj
YXNlIG9wX3Jlc29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTcxMTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOTksNiArMTM5OSw5MSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKAogICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9uZXh0X3BuYW1lKSAtIDE7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aDogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5h
bWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkpOworICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpIC0gMTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9wZXJ0
eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5
UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2luZGV4ZWRfcHJvcGVydHki
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJv
cGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7CisgICAgICAgICAgICBpdCArPSBPUENP
REVfTEVOR1RIKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KSAtIDE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6IHsK
KyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
YmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBp
dFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzRdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xF
TkdUSChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KSAtIDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7CisgICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2Ug
PSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10u
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSk7CisgICAg
ICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KSAtIDE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9kaXJl
Y3RfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9w
ZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFs0
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzVdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGl0WzZdLnUucHJvZmlsZTsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im9wX2dldF9kaXJlY3RfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShi
YXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGluZGV4KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHByb2Zp
bGUpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZGlyZWN0X3BuYW1l
KSAtIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBpbnQgZHN0
ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGJhc2UpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJh
dG9yOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0g
aXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHN0cnVjdHVyZUVudW1lcmF0b3IgPSBp
dFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGxlbmd0aCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUoc3RydWN0dXJlRW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVy
YXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX25leHRfZW51bWVy
YXRvcl9wbmFtZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdU
SChvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7CisgICAgICAgICAgICBp
bnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAib3BfdG9faW5kZXhfc3RyaW5nIik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfdG9faW5kZXhfc3Ry
aW5nKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X3B1c2hfd2l0aF9zY29wZTogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwdXNoX3dpdGhfc2NvcGUiLCByMCk7CkBAIC0xNzk5LDYgKzE4
ODQsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51Lm9wZXJhbmQgPSBwY1tqXS51Lm9wZXJhbmQ7CiAg
ICAgICAgIH0KICAgICAgICAgc3dpdGNoIChwY1swXS51Lm9wY29kZSkgeworICAgICAgICBjYXNl
IG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxl
SW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisKKyAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJy
YXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKQEAgLTE4MDksNiArMTkwMSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5k
ZXhdOwogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDogewogICAgICAg
ICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1twY1tvcExlbmd0
aCAtIDFdLnUub3BlcmFuZF07CiAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29k
ZU9mZnNldCA9PSAtMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTcxMTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzYsMTggKzE0MzYsMzAgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcgogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5KQogewogICAgIGZvciAoc2l6ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNr
LnNpemUoKTsgaSA+IDA7IGktLSkgewotICAgICAgICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBt
X2ZvckluQ29udGV4dFN0YWNrW2kgLSAxXTsKLSAgICAgICAgaWYgKGNvbnRleHQucHJvcGVydHlS
ZWdpc3RlciA9PSBwcm9wZXJ0eSkgewotICAgICAgICAgICAgZW1pdE9wY29kZShvcF9nZXRfYnlf
cG5hbWUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7Ci0gICAg
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwotICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuZXhwZWN0ZWRTdWJzY3JpcHRSZWdp
c3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4
dC5pdGVyUmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGNvbnRleHQuaW5kZXhSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZHN0OworICAgICAgICBGb3JJbkNvbnRleHQqIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNr
W2kgLSAxXS5nZXQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxvY2FsKCkgIT0gcHJvcGVydHkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWNvbnRleHQtPmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChjb250ZXh0LT50eXBlKCkgPT0g
Rm9ySW5Db250ZXh0OjpJbmRleGVkRm9ySW5Db250ZXh0VHlwZSkgeworICAgICAgICAgICAgcHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxJbmRleGVkRm9ySW5Db250ZXh0Kj4oY29udGV4dCktPmluZGV4
KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChjb250
ZXh0LT50eXBlKCkgPT0gRm9ySW5Db250ZXh0OjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBlKTsK
KyAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBzdHJ1Y3R1cmVDb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4oY29udGV4dCk7CisgICAgICAgIFVubGlua2Vk
VmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2RpcmVjdF9w
bmFtZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzdHJ1Y3R1cmVDb250ZXh0LT5pbmRleCgpLT5pbmRleCgpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKS0+aW5kZXgo
KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKKyAgICAgICAgcmV0
dXJuIGRzdDsKICAgICB9CisKICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUg
PSBuZXdBcnJheVByb2ZpbGUoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChraWxsKGRzdCkpOwpAQCAtMjE2MSw3ICsyMTczLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAKICAgICAgICAgVmVjdG9yPENvbnRyb2xG
bG93Q29udGV4dD4gc2F2ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFN3aXRj
aEluZm8+IHNhdmVkU3dpdGNoQ29udGV4dFN0YWNrOwotICAgICAgICBWZWN0b3I8Rm9ySW5Db250
ZXh0PiBzYXZlZEZvckluQ29udGV4dFN0YWNrOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEZvckluQ29udGV4dD4+IHNhdmVkRm9ySW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3Rv
cjxUcnlDb250ZXh0PiBwb3BwZWRUcnlDb250ZXh0czsKICAgICAgICAgTGFiZWxTY29wZVN0b3Jl
IHNhdmVkTGFiZWxTY29wZXM7CiAgICAgICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3Bl
ICYmIHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9jaykgewpAQCAtMjE4OCw3ICsyMjAwLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAgICAgICAgIG1f
c3dpdGNoQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4dC5zd2l0Y2hDb250ZXh0U3Rh
Y2tTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwRm9ySW5zKSB7Ci0g
ICAgICAgICAgICAgICAgc2F2ZWRGb3JJbkNvbnRleHRTdGFjayA9IG1fZm9ySW5Db250ZXh0U3Rh
Y2s7CisgICAgICAgICAgICAgICAgc2F2ZWRGb3JJbkNvbnRleHRTdGFjay5zd2FwKG1fZm9ySW5D
b250ZXh0U3RhY2spOwogICAgICAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2suc2hyaW5r
KGZpbmFsbHlDb250ZXh0LmZvckluQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoZmxpcFRyaWVzKSB7CkBAIC0yMjI4LDcgKzIyNDAsNyBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjCiAgICAgICAgICAgICBpZiAoZmxpcFN3
aXRjaGVzKQogICAgICAgICAgICAgICAgIG1fc3dpdGNoQ29udGV4dFN0YWNrID0gc2F2ZWRTd2l0
Y2hDb250ZXh0U3RhY2s7CiAgICAgICAgICAgICBpZiAoZmxpcEZvcklucykKLSAgICAgICAgICAg
ICAgICBtX2ZvckluQ29udGV4dFN0YWNrID0gc2F2ZWRGb3JJbkNvbnRleHRTdGFjazsKKyAgICAg
ICAgICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNrLnN3YXAoc2F2ZWRGb3JJbkNvbnRleHRTdGFj
ayk7CiAgICAgICAgICAgICBpZiAoZmxpcFRyaWVzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fdHJ5Q29udGV4dFN0YWNrLnNpemUoKSA9PSBmaW5hbGx5Q29udGV4dC50cnlDb250ZXh0U3Rh
Y2tTaXplKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwb3BwZWRUcnlDb250
ZXh0cy5zaXplKCk7IGktLTspIHsKQEAgLTI1NjEsNCArMjU3MywxMjEgQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgIGVtaXRMYWJlbChzY29wZS0+YnJlYWtU
YXJnZXQoKSk7CiB9CiAKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51
bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpCit7CisgICAg
ZW1pdE9wY29kZShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5p
bmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2hh
c19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFtZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRz
dDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJbmRleGVkUHJv
cGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3
QXJyYXlQcm9maWxlKCk7CisgICAgZW1pdE9wY29kZShvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChw
cm9wZXJ0eU5hbWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcnJheVBy
b2ZpbGUpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SGFzU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3Ip
Cit7CisgICAgZW1pdE9wY29kZShvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFt
ZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmluZGV4
KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoKQoreworICAgIGVtaXRPcGNvZGUob3Bf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5k
ZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxlbmd0aC0+aW5kZXgoKSk7CisgICAg
cmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRH
ZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogbGVuZ3RoLCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yKQor
eworICAgIGVtaXRPcGNvZGUob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChsZW5n
dGgtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdHJ1Y3R1cmVFbnVtZXJh
dG9yLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCit7CisgICAgZW1p
dE9wY29kZShvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChlbnVtZXJhdG9y
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgtPmluZGV4KCkpOwor
ICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGluZGV4KQoreworICAg
IGVtaXRPcGNvZGUob3BfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgtPmluZGV4
KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJ
bmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBp
bmRleFJlZ2lzdGVyKQoreworICAgIGlmICghbG9jYWxSZWdpc3RlcikKKyAgICAgICAgcmV0dXJu
OworICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5kZXhl
ZEZvckluQ29udGV4dD4obG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3RlcikpOworfQorCit2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2Nh
bFJlZ2lzdGVyKQoreworICAgIGlmICghbG9jYWxSZWdpc3RlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJl
Z2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ+KGxvY2FsUmVnaXN0ZXIsIGlu
ZGV4UmVnaXN0ZXIsIHByb3BlcnR5UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlcikpOworfQor
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVy
SUQqIGxvY2FsUmVnaXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChSZWdpc3Rl
cklEKiBsb2NhbFJlZ2lzdGVyKQoreworICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9y
SW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCdzIHN1ZmZpY2llbnRseSAK
KyAgICAvLyByYXJlIHRvIGVpdGhlciAoMSkgcmUtYXNzaWduIHRoZSBsb29wIGl0ZXJhdGlvbiB2
YXJpYWJsZSBpbiB0aGUgYm9keSBvZiB0aGUgbG9vcAorICAgIC8vIG9yICgyKSBjYXB0dXJlIHRo
ZSBsb29wIHRoZSBpdGVyYXRpb24gdmFyaWFibGUuIEJlY2F1c2Ugb2YgdGhlIHJhcml0eSBvZiBl
aXRoZXIgb2YgCisgICAgLy8gdGhlc2Ugc2l0dWF0aW9ucywgaXQncyBva2F5IHRvIHBvaXNvbiB0
aGUgcmVtYWluZGVyIG9mIHRoZSBsb29wIGJvZHkgd2hlbmV2ZXIgd2UgZW5jb3VudGVyIHRoZW0u
CisgICAgZm9yIChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpID4gMDsg
aS0tKSB7CisgICAgICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3Rh
Y2tbaSAtIDFdLmdldCgpOworICAgICAgICBpZiAoY29udGV4dC0+bG9jYWwoKSAhPSBsb2NhbFJl
Z2lzdGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnRleHQtPmludmFsaWRh
dGUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTcs
MTEgKzk3LDc2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5h
bGx5Q29udGV4dDsKICAgICB9OwogCi0gICAgc3RydWN0IEZvckluQ29udGV4dCB7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdFJlZ2lzdGVyOwotICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gaXRlclJlZ2lzdGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gaW5kZXhSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5UmVn
aXN0ZXI7CisgICAgY2xhc3MgRm9ySW5Db250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZv
ckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBtX2xv
Y2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9pc1ZhbGlkKHRydWUp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWYWxpZDsgfQorICAgICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNWYWxp
ZCA9IGZhbHNlOyB9CisKKyAgICAgICAgZW51bSBGb3JJbkNvbnRleHRUeXBlIHsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZUZvckluQ29udGV4dFR5cGUsCisgICAgICAgICAgICBJbmRleGVkRm9ySW5D
b250ZXh0VHlwZQorICAgICAgICB9OworICAgICAgICB2aXJ0dWFsIEZvckluQ29udGV4dFR5cGUg
dHlwZSgpIGNvbnN0ID0gMDsKKworICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxSZWdpc3Rlci5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgYm9vbCBtX2lzVmFs
aWQ7CisgICAgfTsKKworICAgIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dCA6IHB1YmxpYyBG
b3JJbkNvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0
KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJl
Z2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3Rl
cikKKyAgICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAg
ICAsIG1faW5kZXhSZWdpc3RlcihpbmRleFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX3Byb3Bl
cnR5UmVnaXN0ZXIocHJvcGVydHlSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9lbnVtZXJhdG9y
UmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lzdGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIEZvckluQ29udGV4dFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBlOworICAg
ICAgICB9CisKKyAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0ZXIuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvclJlZ2lzdGVyLmdldCgp
OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJl
Z2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eVJlZ2lzdGVyOwor
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yUmVnaXN0ZXI7CisgICAgfTsK
KworICAgIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEluZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9j
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlcikKKyAgICAgICAgICAgIDogRm9y
SW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAgICAsIG1faW5kZXhSZWdpc3Rlcihp
bmRleFJlZ2lzdGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIEZv
ckluQ29udGV4dFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBJbmRleGVkRm9ySW5Db250ZXh0VHlwZTsKKyAgICAgICAgfQorCisgICAgICAg
IFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJlZ2lzdGVyLmdldCgp
OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJl
Z2lzdGVyOwogICAgIH07CiAKICAgICBzdHJ1Y3QgVHJ5RGF0YSB7CkBAIC00MzEsNiArNDk2LDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlO
YW1lcyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJl
Z2lzdGVySUQqIHNpemUsIExhYmVsKiBicmVha1RhcmdldCk7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXROZXh0UHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwg
UmVnaXN0ZXJJRCogaSwgUmVnaXN0ZXJJRCogc2l6ZSwgUmVnaXN0ZXJJRCogaXRlciwgTGFiZWwq
IHRhcmdldCk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVn
aXN0ZXJJRCogZW51bWVyYXRvcik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNHZW5lcmlj
UHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RW51bWVyYWJsZUxlbmd0
aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOworICAgICAgICBSZWdpc3RlcklE
KiBlbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1l
cmF0b3IpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5h
bWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBp
bmRleCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhj
ZXB0aW9uSWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0
JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgpAQCAtNDYwLDE2ICs1MzQsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZp
bmFsbHlCbG9jayk7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRleHQoKTsKIAotICAgICAg
ICB2b2lkIHB1c2hPcHRpbWlzZWRGb3JJbihSZWdpc3RlcklEKiBleHBlY3RlZFN1YnNjcmlwdCwg
UmVnaXN0ZXJJRCogaXRlciwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5
UmVnaXN0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0ID0g
eyBleHBlY3RlZFN1YnNjcmlwdCwgaXRlciwgaW5kZXgsIHByb3BlcnR5UmVnaXN0ZXIgfTsKLSAg
ICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBwb3BPcHRpbWlzZWRGb3JJbigpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICB9CisgICAgICAg
IHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBpbmRleCk7CisgICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCog
bG9jYWwpOworICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQq
IGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVy
SUQqIGVudW1lcmF0b3IpOworICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOworICAgICAgICB2b2lkIGludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JM
b2NhbChSZWdpc3RlcklEKiBsb2NhbCk7CiAKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1Rh
cmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVU
YXJnZXQoY29uc3QgSWRlbnRpZmllciYpOwpAQCAtNjY4LDcgKzczNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIFZlY3RvcjxDb250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX3Njb3BlQ29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5m
bz4gbV9zd2l0Y2hDb250ZXh0U3RhY2s7Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1f
Zm9ySW5Db250ZXh0U3RhY2s7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5D
b250ZXh0Pj4gbV9mb3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+
IG1fdHJ5Q29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdp
c3RlcklEPiwgY29uc3QgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0
ZWRQYXJhbWV0ZXJzOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTUwNSwxMiArMTUwNSwxNCBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5
UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUocmVzdWx0
LmdldCgpLCBsb2NhbC5nZXQoKSk7CiAgICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFzc2lnbm1l
bnQoZ2VuZXJhdG9yLCByZXN1bHQuZ2V0KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwgbV9vcGVy
YXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJl
c3VsdERlc2NyaXB0b3IoKSkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2Fs
LmdldCgpLCByZXN1bHQuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVG
b3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJh
dG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdu
bWVudChnZW5lcmF0b3IsIGxvY2FsLmdldCgpLCBsb2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVy
YXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJl
c3VsdERlc2NyaXB0b3IoKSkpOworICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29u
dGV4dEZvckxvY2FsKGxvY2FsLmdldCgpKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3Zl
VG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE1NDAsMTEg
KzE1NDIsMTMgQEAgUmVnaXN0ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5nZXQo
KSwgbV9yaWdodCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCks
IHRlbXBEc3QuZ2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNv
bnRleHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIHRlbXBEc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAg
IFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9y
aWdodCk7CisgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwo
bG9jYWwuZ2V0KCkpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCByZXN1bHQpOwogICAgIH0KIApAQCAtMTkyMCwxMDIgKzE5MjQsMjE4IEBA
IHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvckluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCitSZWdpc3RlcklEKiBGb3JJbk5vZGU6
OnRyeUdldEJvdW5kTG9jYWwoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBM
YWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6
TG9vcCk7Ci0KLSAgICBpZiAoIW1fbGV4cHItPmlzQXNzaWdubWVudExvY2F0aW9uKCkpIHsKLSAg
ICAgICAgZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiTGVmdCBzaWRlIG9mIGZv
ci1pbiBzdGF0ZW1lbnQgaXMgbm90IGEgcmVmZXJlbmNlLiIpOwotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZp
ZXIoKTsKKyAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAg
ICAgICBpZiAobG9jYWwuaXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBsb2NhbC5nZXQoKTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0
KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlv
bk5vZGUoKSkgeworICAgICAgICBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25O
b2RlID0gc3RhdGljX2Nhc3Q8RGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIp
OworICAgICAgICBhdXRvIGJpbmRpbmcgPSBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpOworICAgICAg
ICBpZiAoIWJpbmRpbmctPmlzQmluZGluZ05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7Ci0gICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNpemUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGV4cGVjdGVkU3Vic2NyaXB0OwotICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBpdGVyID0gZ2VuZXJhdG9yLmVtaXRHZXRQcm9wZXJ0eU5hbWVzKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgYmFzZS5nZXQoKSwgaS5nZXQoKSwgc2l6ZS5nZXQoKSwgc2NvcGUtPmJyZWFrVGFy
Z2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7
CisgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4o
YmluZGluZyk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc2ltcGxlQmluZGlu
Zy0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2Nh
bChpZGVudCk7CisgICAgICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGxvY2FsLmdldCgpOworICAgIH0KIAotICAg
IFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TG9v
cEhpbnQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAotICAgIFJlZ2lzdGVySUQqIHByb3Bl
cnR5TmFtZTsKLSAgICBib29sIG9wdGltaXplZEZvcmluQWNjZXNzID0gZmFsc2U7Cit2b2lkIEZv
ckluTm9kZTo6ZW1pdExvb3BIZWFkZXIoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogcHJvcGVydHlOYW1lKQorewogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2Rl
KCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIExvY2FsIGxvY2FsID0g
Z2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKLSAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSkgewotICAg
ICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAg
IGlmIChsb2NhbC5nZXQoKSkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5n
ZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoZ2Vu
ZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAg
ICAgIFJlZ2lzdGVySUQqIHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCBpZGVudCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUsIGlkZW50LCBwcm9wZXJ0eU5hbWUs
IGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJ
Zk5vdEZvdW5kKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2Ny
aXB0ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgcHJvcGVydHlOYW1l
ID0gZXhwZWN0ZWRTdWJzY3JpcHQuZ2V0KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1v
dmUobG9jYWwuZ2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHVz
aE9wdGltaXNlZEZvckluKGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdl
dCgpLCBsb2NhbC5nZXQoKSk7Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRy
dWU7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNzb3JOb2Rl
KCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9sZXhwci0+aXNEb3RBY2Nl
c3Nvck5vZGUoKSkgewogICAgICAgICBEb3RBY2Nlc3Nvck5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0
aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUqPihtX2xleHByKTsKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQgPSBhc3NpZ25Ob2RlLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIHByb3BlcnR5
TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CiAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+YmFzZSgpKTsKLQogICAgICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRp
dm90U3RhcnQoKSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0UHV0QnlJZChiYXNlLCBpZGVudCwgcHJvcGVydHlOYW1lKTsKLSAgICB9IGVsc2UgaWYgKG1f
bGV4cHItPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKG1fbGV4cHItPmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJy
YWNrZXRBY2Nlc3Nvck5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNz
b3JOb2RlKj4obV9sZXhwcik7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0
eU5hbWU7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9
IGdlbmVyYXRvci5lbWl0Tm9kZShhc3NpZ25Ob2RlLT5zdWJzY3JpcHQoKSk7Ci0gICAgICAgIAog
ICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCks
IGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0
eU5hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX2xleHByLT5pc0RlY29uc3Ry
dWN0aW9uTm9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xleHBy
LT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKSB7CiAgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdu
bWVudE5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1l
bnROb2RlKj4obV9sZXhwcik7CiAgICAgICAgIGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJp
bmRpbmdzKCk7Ci0gICAgICAgIGlmIChiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAg
ICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmlu
ZGluZyk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91
bmRQcm9wZXJ0eSgpOwotICAgICAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwo
aWRlbnQpOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogU2hvdWxkIEkgZW1pdCBleHByZXNzaW9uIGluZm8gaGVyZT8KLSAgICAg
ICAgICAgIGlmICghcHJvcGVydHlOYW1lIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSB8fCBnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgICAgICAgICBn
b3RvIGdlbmVyaWNCaW5kaW5nOwotICAgICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwot
ICAgICAgICAgICAgZ2VuZXJhdG9yLnB1c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlw
dC5nZXQoKSwgaXRlci5nZXQoKSwgaS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAg
IG9wdGltaXplZEZvcmluQWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gY29tcGxldGVk
U2ltcGxlQmluZGluZzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2VuZXJpY0JpbmRpbmc6
Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0g
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdGVjdChwcm9wZXJ0eU5hbWUpOworICAg
ICAgICBpZiAoIWJpbmRpbmctPmlzQmluZGluZ05vZGUoKSkgewogICAgICAgICAgICAgYXNzaWdu
Tm9kZS0+YmluZGluZ3MoKS0+YmluZFZhbHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBjb21wbGV0ZWRTaW1wbGVCaW5k
aW5nOgotICAgICAgICA7CisKKyAgICAgICAgYXV0byBzaW1wbGVCaW5kaW5nID0gc3RhdGljX2Nh
c3Q8QmluZGluZ05vZGUqPihiaW5kaW5nKTsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBzaW1wbGVCaW5kaW5nLT5ib3VuZFByb3BlcnR5KCk7CisgICAgICAgIExvY2FsIGxvY2Fs
ID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKKyAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSB8fCBs
b2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIGFzc2lnbk5vZGUtPmJpbmRpbmdzKCkt
PmJpbmRWYWx1ZShnZW5lcmF0b3IsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9w
ZXJ0eU5hbWUpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRO
b2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CiAKLSAgICBpZiAob3B0aW1pemVkRm9yaW5BY2Nlc3MpCi0gICAgICAgIGdlbmVyYXRvci5w
b3BPcHRpbWlzZWRGb3JJbigpOwordm9pZCBGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAg
aWYgKCFtX2xleHByLT5pc0Fzc2lnbm1lbnRMb2NhdGlvbigpKSB7CisgICAgICAgIGVtaXRUaHJv
d1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50
IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5l
eHRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLCBiYXNlLmdldCgpLCBpLmdldCgpLCBzaXplLmdl
dCgpLCBpdGVyLmdldCgpLCBsb29wU3RhcnQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwg
bGluZVN0YXJ0T2Zmc2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFr
VGFyZ2V0KCkpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxlbmd0aDsKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc3RydWN0dXJlRW51bWVyYXRvcjsKKyAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
YmFzZS5nZXQoKSwgbV9leHByKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlz
LT50cnlHZXRCb3VuZExvY2FsKGdlbmVyYXRvcik7CisKKyAgICAvLyBJbmRleGVkIHByb3BlcnR5
IGxvb3AuCisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5l
d0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9v
cFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9v
cEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAgIGxlbmd0aCA9IGdlbmVyYXRv
ci5lbWl0R2V0RW51bWVyYWJsZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2Uu
Z2V0KCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9h
ZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVz
dWx0ID0gZ2VuZXJhdG9yLmVtaXRFcXVhbGl0eU9wKG9wX2xlc3MsIGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0
cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICB0aGlzLT5lbWl0TG9v
cEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJh
dG9yLnB1c2hJbmRleGVkRm9ySW5TY29wZShsb2NhbC5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9y
LnBvcEluZGV4ZWRGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0
KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBTdHJ1Y3R1cmUg
cHJvcGVydHkgbG9vcC4KKyAgICB7CisgICAgICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5l
cmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPExh
YmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisKKyAgICAgICAgc3RydWN0dXJl
RW51bWVyYXRvciA9IGdlbmVyYXRvci5lbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9y
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBz
dHJ1Y3R1cmVFbnVtZXJhdG9yLmdldCgpLCBpLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhp
bnQoKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVt
aXRVbmFyeU9wKG9wX2VxX251bGwsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlO
YW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQo
KSwgbG9vcEVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzU3RydWN0dXJlUHJv
cGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVj
dHVyZUVudW1lcmF0b3IuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworCisgICAgICAgIHRoaXMt
PmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKKworICAgICAg
ICBnZW5lcmF0b3IucHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCks
IHByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9y
LnBvcFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEluYyhpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclBy
b3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCks
IGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsK
KyAgICAgICAgCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBHZW5lcmlj
IHByb3BlcnR5IGxvb3AuCisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxM
YWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxM
YWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBnZW5lcmljRW51bWVyYXRvciA9IGdlbmVyYXRvci5lbWl0R2V0R2VuZXJpY1By
b3BlcnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGxl
bmd0aC5nZXQoKSwgc3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwganNOdW1iZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1l
ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4
dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmljRW51bWVy
YXRvci5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQg
PSBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3BfZXFfbnVsbCwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRy
dWUocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQo
KTsKKworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFt
ZS5nZXQoKSk7CisKKyAgICAgICAgLy8gVE9ETzogT3B0aW1pemUgZm9yLWluCisgICAgICAgIGdl
bmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKKworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9w
ZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmljRW51bWVyYXRvci5nZXQoKSwgaS5n
ZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9lcV9udWxsLCByZXN1bHQu
Z2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
VHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5l
bWl0SGFzR2VuZXJpY1Byb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlO
YW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQo
KSwgbG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
c2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKKyAgICB9
CisKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7Cit9CisKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAg
IHRoaXMtPmVtaXRNdWx0aUxvb3BCeXRlY29kZShnZW5lcmF0b3IsIGRzdCk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JPZk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcg
Kzk0LDcgQEAgcHJpdmF0ZToKIAogICAgIEpTU2NvcGUqIGpzU2NvcGUoKSBjb25zdCB7IHJldHVy
biBtX3Njb3BlLmdldCgpOyB9CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2NvcGU+IG1fc2NvcGU7CiAgICAg
V3JpdGVCYXJyaWVyPERlYnVnZ2VyU2NvcGU+IG1fbmV4dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3NywxMyArMTc3
Nyw1MSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBJbjoKKyAgICBjYXNlIEluOiB7CiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdoZW4gdGhlIHByb3BlcnR5IGRlZmlu
aXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CiAgICAgICAgIC8vIHZhbHVlIGluZm9ybWF0
aW9uLgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVy
TGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwogICAg
ICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKKyAgICBjYXNlIEdldEVudW1lcmFibGVM
ZW5ndGg6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0RGlyZWN0UG5h
bWU6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgzLDYgKzMxODMsODIgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfaW4pOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJs
ZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgCisg
ICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxl
X2xlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3Bl
cnR5OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEhhc0dlbmVyaWNQcm9wZXJ0eSwgCisgICAgICAg
ICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19n
ZW5lcmljX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChIYXNTdHJ1Y3R1cmVQcm9wZXJ0
eSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkpKTsKKyAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9k
ZUNvbnNpZGVyaW5nU2xvd1BhdGgoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
LCBBcnJheTo6UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgICAgICAgICAg
Tm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoSGFzSW5kZXhlZFByb3BlcnR5
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
aGFzSXRlcmFibGVQcm9wZXJ0eSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eSk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2dldF9kaXJlY3Rf
cG5hbWU6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVk
aWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIGluZGV4
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSk7
CisgICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSk7CisKKyAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGJhc2UpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOworICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
ZW51bWVyYXRvcik7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLCAKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6
OlZhckFyZywgR2V0RGlyZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7
CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6
IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yLCAK
KyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
YWRkVG9HcmFwaChHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yLCAKKyAgICAgICAgICAgICAg
ICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwK
KyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZTogeworICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChO
ZXh0RW51bWVyYXRvclBuYW1lLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7CisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dy
YXBoKFRvSW5kZXhTdHJpbmcsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF90b19pbmRleF9zdHJpbmcpOworICAgICAgICB9CisKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBzaG91bGQgbm90IGhhcHBlbiBiZWNh
dXNlIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tlcgogICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUg
Y2F1Z2h0IGl0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDE1IEBA
IENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3N3
aXRjaF9jaGFyOgogICAgIGNhc2Ugb3BfaW46CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToK
KyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKKyAgICBjYXNlIG9wX2hhc19nZW5l
cmljX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBj
YXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFt
ZToKKyAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBj
YXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9uZXh0
X2VudW1lcmF0b3JfcG5hbWU6CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgICAg
IHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogCiAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw4MyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAg
ICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5
OgorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgR2V0
R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIEdldERpcmVjdFBuYW1lOgorICAg
IGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZToKKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAg
ICAgICAgLy8gVE9ETzogRG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBlYWNoIG9mIHRoZXNlIG9wcy4K
KyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAgIHJl
YWQoSlNDZWxsX2luZGV4aW5nVHlwZSk7CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5
KTsKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAg
c3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGll
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAg
IHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAg
ICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKElu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShX
b3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkg
eworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAg
ICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBy
ZWFkKEFycmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUo
V29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
Y2FzZSBBcml0aEFkZDoKICAgICBjYXNlIEFyaXRoU3ViOgogICAgIGNhc2UgQXJpdGhOZWdhdGU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAx
NzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4Nyw2ICsxODcsMTEgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0
ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgIGNhc2UgR2V0RW51bWVyYWJs
ZUxlbmd0aDoKKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKKyAgICBjYXNlIEhhc1N0cnVj
dHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2UgR2V0
RGlyZWN0UG5hbWU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0
aXZhdGlvbjoKQEAgLTIwOSw2ICsyMTQsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3
VHlwZWRBcnJheToKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgY2FzZSBHZXRT
dHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlF
bnVtZXJhdG9yOgorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZToKKyAgICBjYXNlIFRvSW5k
ZXhTdHJpbmc6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzAsNiArMTAzMCw2NCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlPFN0cmluZ1VzZT4o
bm9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBIYXNHZW5lcmljUHJvcGVydHk6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7CisgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ1Vz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
CisgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBub2RlLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+cHJl
ZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwgbm9kZS0+ZmxhZ3MoKSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgZml4
RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3du
SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKKyAgICAgICAgICAgIEVkZ2UmIGJhc2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRnZSYgcHJvcGVy
dHkgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgRWRnZSYgaW5k
ZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICAgICAgRWRnZSYgZW51
bWVyYXRvciA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7CisgICAgICAgICAgICBmaXhF
ZGdlPENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KHBy
b3BlcnR5KTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGVudW1lcmF0b3IpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3I6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0
eUVudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBOZXh0RW51bWVyYXRvclBu
YW1lOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6
IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3Vy
ZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTcxMTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MDEsNiArMTAwMSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICBib29sIGhhc0hlYXBQcmVkaWN0aW9u
KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEdldERpcmVj
dFBuYW1lOgogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNo
OgogICAgICAgICBjYXNlIEdldEJ5VmFsOgpAQCAtMTI2MSw2ICsxMjYyLDcgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgogICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiArMjg4LDE3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBXcml0ZSBiYXJyaWVycyAhICovXAog
ICAgIG1hY3JvKFN0b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFN0
b3JlQmFycmllcldpdGhOdWxsQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBcCisgICAg
LyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCisgICAgbWFjcm8oR2V0RW51bWVyYWJs
ZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEhh
c0luZGV4ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBc
CisgICAgbWFjcm8oSGFzU3RydWN0dXJlUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKEhhc0dlbmVyaWNQcm9wZXJ0eSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8oR2V0RGlyZWN0UG5hbWUs
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3Is
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhOZXh0RW51bWVy
YXRvclBuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8o
VG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKQogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEg
bW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBp
cyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nl
c3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAg
IGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBD
b25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKQEAgLTU1MCw2ICs1NTEsMzkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVh
bik7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5n
dGg6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNHZW5lcmljUHJv
cGVydHk6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVh
bik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc1N0cnVj
dHVyZVByb3BlcnR5OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBI
YXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgVG9JbmRleFN0cmlu
ZzogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogI2lmbmRlZiBOREVCVUcKICAgICAgICAg
Ly8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4K
ICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
NCw2ICsyNTQsMTUgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAog
ICAgIGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBHZXRHZXR0ZXI6CiAgICAgY2FzZSBHZXRTZXR0
ZXI6CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2UgSGFzR2VuZXJpY1By
b3BlcnR5OgorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6CisgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKKyAgICBjYXNlIEdldFN0cnVj
dHVyZVByb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3I6CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0
cmluZzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIE5hdGl2ZUNhbGw6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2lu
Y2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKIApAQCAtNDU0OCw2ICs0NTQ5LDI0OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgR2V0RW51bWVy
YWJsZUxlbmd0aDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEVudW1lcmFibGVMZW5ndGgs
IHJlc3VsdEdQUiwgYmFzZS5ncHIoKSk7CisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0
eTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BS
UmVzdWx0MiByZXN1bHRUYWcodGhpcyk7CisgICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiA9
IGJhc2UucGF5bG9hZEdQUigpOworICAgICAgICBHUFJSZWcgYmFzZVRhZ0dQUiA9IGJhc2UudGFn
R1BSKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKwor
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNl
VGFnR1BSLCBiYXNlUGF5bG9hZEdQUiwgcHJvcGVydHkuZ3ByKCkpOworICAgICAgICBib29sZWFu
UmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMp
OworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKworICAgICAgICBHUFJSZWcg
YmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQ
UiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisKKyAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgc2NyYXRjaEdQUiwgCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKworICAgICAgICBtb3ZlVHJ1ZVRv
KHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3Bl
cmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIs
IGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCBwcm9wZXJ0eUdQUikpOworICAgICAgICBib29s
ZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsK
KworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBp
bmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9
IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1
bHRUYWcuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAg
c3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgICAgIEFTU0VSVCgh
IW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRE
b3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkLCBzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VH
UFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBkZWZhdWx0OiB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbW92
ZVRydWVUbyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBib29sZWFuUmVzdWx0KHJl
c3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
ZXREaXJlY3RQbmFtZTogeworICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0
LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgIEVkZ2UmIGluZGV4RWRnZSA9
IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CisgICAgICAgIEVkZ2UmIGVudW1l
cmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKKworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgcHJvcGVydHlFZGdlKTsKKyAgICAgICAg
U3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIGluZGV4RWRnZSk7CisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOworICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0MiBy
ZXN1bHRUYWcodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4
LmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgIC8vIENoZWNrIHRo
ZSBzdHJ1Y3R1cmUKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIC8vIENv
bXB1dGUgdGhlIG9mZnNldAorICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVu
dW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNj
ZXNzCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIAorICAgICAgICAgICAgaW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgICAg
IG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5zaWduRXh0
ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUdQUiwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdFBheWxvYWRHUFIpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBv
dXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOworICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBtX2ppdC5t
b3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0
Lm5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0QnV0dGVy
Zmx5UHJvcGVydHkgPSAtMiAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOyAKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
cmVzdWx0UGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RCdXR0ZXJmbHlQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0UGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RCdXR0ZXJmbHlQcm9wZXJ0eSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxv
YWRHUFIpOworICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9u
Z1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIsIGJhc2VHUFIsIHNjcmF0Y2hHUFIsIHByb3BlcnR5R1BSKSk7CisKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVu
dW1lcmF0b3I6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBsZW5ndGgodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0U3RydWN0dXJlUHJvcGVy
dHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIGxlbmd0aC5ncHIoKSk7CisgICAg
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlSW50MzJPcGVyYW5kIGxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvciwgcmVzdWx0R1BS
LCBiYXNlLmdwcigpLCBsZW5ndGguZ3ByKCksIGVudW1lcmF0b3IuZ3ByKCkpOworICAgICAgICBj
ZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
ZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsK
KworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQ
UiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
aW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIAorICAgICAg
ICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc0xlbmd0aE9mZnNldCgp
KSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6Ok51bGxUYWcpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGluQm91
bmRzLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BS
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UGF5bG9hZEdQUik7
CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgcmVzdWx0VGFnR1BSKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCByZXN1bHRHUFIsIGluZGV4Lmdw
cigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisKICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewogICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDAp
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogCkBAIC00NTgyLDYgKzQ1ODMsMjM0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
R2V0RW51bWVyYWJsZUxlbmd0aCwgcmVzdWx0R1BSLCBiYXNlLmdwcigpKTsKKyAgICAgICAgaW50
MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNHZW5lcmlj
UHJvcGVydHksIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSwgcHJvcGVydHkuZ3ByKCkpOworICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICBzY3JhdGNo
R1BSLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3By
KCksIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
OworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1
Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0R1BSLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUikpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGlu
ZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3
aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2Ny
YXRjaEdQUikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsK
KyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgRlBS
UmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNoLmZwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0KSwgc2NyYXRjaEZQUik7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgc2Ny
YXRjaEZQUiwgc2NyYXRjaEZQUikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBBU1NFUlQoISFu
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OworCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRHUFIpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgcmVzdWx0R1BSLCBiYXNlR1BSLCBpbmRleEdQUikpOworICAgICAgICAKKyAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgR2V0RGlyZWN0UG5hbWU6IHsKKyAgICAgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICBFZGdlJiBpbmRleEVk
Z2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICBFZGdlJiBl
bnVtZXJhdG9yRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7CisKKyAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5RWRnZSk7CisgICAg
ICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsK
KyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0g
ZW51bWVyYXRvci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAg
IC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICBzY3Jh
dGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIAorICAg
ICAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OworCisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBt
X2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShpbmRl
eEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5uZWczMihz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwg
c2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIAor
ICAgICAgICAgICAgLTIgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSksIHJlc3VsdEdQUik7CisgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikp
OworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgbGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvciwg
cmVzdWx0R1BSLCBiYXNlLmdwcigpLCBsZW5ndGguZ3ByKCkpOworICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldEdl
bmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFu
ZCBsZW5ndGgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSwg
bGVuZ3RoLmdwcigpLCBlbnVtZXJhdG9yLmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOZXh0RW51bWVy
YXRvclBuYW1lOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgo
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgZW51
bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIAorICAgICAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlO
YW1lc0xlbmd0aE9mZnNldCgpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgaW5Cb3VuZHMubGlu
aygmbV9qaXQpOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGlu
ZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2Ny
YXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5k
IGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5k
ZXhTdHJpbmcsIHJlc3VsdEdQUiwgaW5kZXguZ3ByKCkpOworICAgICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogI2lmIEVOQUJMRShGVExf
SklUKSAgICAgICAgCiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDogewogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdTbG93UGF0
aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAi
U2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyQnVmZmVy
LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTU1MzAsNiArNTUzMSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKIH0KICNlbmRpZiAvLyBFTkFC
TEUoR0dDKQogCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzQsNiArMTAzNCwxNiBAQCBwdWJsaWM6CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKENfSklUT3BlcmF0aW9uX0VDWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDWkMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQor
ICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGNlbGwpKTsKQEAgLTEx
MzIsNiArMTE0MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxiYWNr
T25FeGNlcHRpb25TZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlwZTE+
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihGdW5jdGlvblR5cGUgb3BlcmF0
aW9uLCBOb1Jlc3VsdFRhZywgQXJndW1lbnRUeXBlMSBhcmcxKQpAQCAtMTI0OCw2ICsxMjYzLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNaIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVy
YXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3R1
YkluZm8pLCBhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwpAQCAtMTI2Myw2ICsxMjgzLDE2IEBA
IHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpaIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsK
KyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTMxMSw2ICsxMzQxLDIxIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRP
cGVyYXRpb25fRUpKQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSlog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0pJVE9wZXJhdGlvbl9FSlpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3Bl
cmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwpAQCAtMTQ4NCw2ICsxNTI5LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIGFyZzEpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkMgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFU
YWcsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpzc1ogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTUxNSw2ICsxNTcwLDExIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoY2Vs
bCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0K
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VTc2lD
SSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBsKiB1
aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0cihzdHViSW5mbyksIGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw2ICszMDMsMTYg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfcmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX3Njb3BlKQog
ICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX3Njb3BlKQorCisgICAgICAgIERFRklORV9PUChv
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfZ2VuZXJp
Y19wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkp
CisgICAgICAgIERFRklORV9PUChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKKyAgICAgICAgREVG
SU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCisgICAgICAgIERFRklORV9PUChvcF9nZXRfc3Ry
dWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZ2Vu
ZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgICAgICBERUZJTkVfT1Aob3BfbmV4dF9lbnVt
ZXJhdG9yX3BuYW1lKQorICAgICAgICBERUZJTkVfT1Aob3BfdG9faW5kZXhfc3RyaW5nKQogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgfQpAQCAtNDIwLDYgKzQzMCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF90b19udW1iZXIpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF90b19wcmltaXRpdmUpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZGlyZWN0X3Bu
YW1lKQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9yZXNvbHZlX3Njb3BlKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMg
dm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBqaXQo
dm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CisgICAg
ICAgIH0KKwogICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChWTSog
dm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghdm0t
PmNhblVzZUpJVCgpKSB7CkBAIC0yNTYsNiArMjYzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNz
UHRyLCBKSVRBcnJheU1vZGUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAorICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyosIFJldHVybkFk
ZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKFZNKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKICAgICAgICAgQ29k
ZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qLCBOYXRpdmVGdW5jdGlvbik7CiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcyk7CkBAIC0zMzYsNiArMzQ1LDExIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4g
QmFzZSBpcyBjZWxsIGNoZWNrZWQuCiAgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5IHBy
b2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKICAgICAgICAgLy8g
Y2FzZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2ZpbGVk
LgorICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJMb2FkKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkgeyByZXR1cm4gZW1pdENvbnRpZ3VvdXNMb2FkKGlu
c3RydWN0aW9uLCBiYWRUeXBlLCBJbnQzMlNoYXBlKTsgfQorICAgICAgICBKdW1wTGlzdCBlbWl0
RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAg
ICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7
CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisKICAgICAgICAgSnVtcExpc3QgZW1pdEludDMyR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKSB7IHJl
dHVybiBlbWl0Q29udGlndW91c0dldEJ5VmFsKGluc3RydWN0aW9uLCBiYWRUeXBlLCBJbnQzMlNo
YXBlKTsgfQogICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3Vv
dXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5n
VHlwZSBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlKTsKQEAgLTU0OSw2ICs1NjMsMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91cnNoaWZ0KEluc3RydWN0aW9uKik7CisgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBlbWl0X29wX2hhc19nZW5lcmljX3Byb3BlcnR5KEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiopOwor
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGVtaXRfb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3Ry
dWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVt
ZXJhdG9yKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXh0X2VudW1lcmF0
b3JfcG5hbWUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3RvX2luZGV4X3N0
cmluZyhJbnN0cnVjdGlvbiopOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2JpdGFuZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKQEAgLTYwMiw2ICs2MjUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdW5zaWduZWQo
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAg
IHZvaWQgZW1pdFNsb3dfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3Ry
dWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2
aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDMzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisj
aWYgVVNFKEpTVkFMVUU2NCkKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjpl
bWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXREb3VibGVMb2FkKGlu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICBtb3ZlRG91YmxlVG82NChmcFJlZ1QwLCByZWdUMCk7
CisgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgcmV0dXJuIHNs
b3dDYXNlczsKK30KKyNlbHNlCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6
ZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9hZChp
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZWdU
MCwgcmVnVDEpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisjZW5kaWYgLy8gVVNFKEpTVkFM
VUU2NCkKKworaW5saW5lIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1
b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKK3sKKyAgICByZXR1cm4gZW1pdENvbnRp
Z3VvdXNMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlLCBleHBlY3RlZFNoYXBlKTsKK30KKworaW5s
aW5lIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZh
bChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7Cisg
ICAgcmV0dXJuIGVtaXRBcnJheVN0b3JhZ2VMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlKTsKK30K
KwogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVEb3Vi
bGUoaW50IHNyYykKIHsKICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlz
aW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEyIEBACiAjaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgor
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNp
bmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIApAQCAtMTE3Niw2ICsxMTc4LDI4NSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgY2FsbE9wZXJhdGlvbihX
aXRoUHJvZmlsZSwgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBkc3QsIHJlZ1QxLCByZWdUMCwg
cmVnVDMsIHJlZ1QyKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVu
Z3RoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGgpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisg
ICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSk7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEp
OworCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2dlbmVyaWNfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAg
IEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICAvLyBUT0RPOiBGYWN0b3Igb3V0IGludG8g
YSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBzaGFyZSB3aXRoIGdldF9ieV92YWwuCisgICAgc3dpdGNo
IChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVEludDMyOgorICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0SW50MzJMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSklURG91YmxlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9h
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzTG9hZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJ
VEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUxvYWQo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlw
ZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5s
YWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7
CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1w
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIAorICAg
IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgaGFzX2luZGV4
ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9j
b2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSk7CisKKyAgICBlbWl0TG9hZFBheWxvYWQocHJvcGVydHksIHJlZ1QxKTsKKworICAgIC8v
IFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4g
aW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgorICAgIC8vIFdlIGNo
ZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JM
ZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCisgICAgLy8gbnVtYmVyIHdhcyBzaWdu
ZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNl
IHRoZSB0b3RhbCBhbGxvY2F0aW9uCisgICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRH
YikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4
dGVuZGluZyB0aGUgdmFsdWUKKyAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBp
dCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhl
ciB0aGFuIHNpZ24KKyAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRv
IHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KKyAgICB6ZXJvRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOworCisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hh
cGVNYXNrKSwgcmVnVDIpOworCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2Rl
KHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUSW50MzI6CisgICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMkxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVREb3VibGU6CisgICAgICAgIHNsb3dDYXNl
cyA9IGVtaXREb3VibGVMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dENvbnRpZ3VvdXNMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
QXJyYXlTdG9yYWdlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKworICAgIGFkZFNs
b3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAg
TGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1Qw
KTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVy
dHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAg
ICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNr
CisgICAgSnVtcCBub25DZWxsID0ganVtcCgpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
YmFzZSBhcnJheSBjaGVjaworICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoU3RydWN0dXJlKE5v
dEVxdWFsLCAKKyAgICAgICAgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgCisgICAgICAgIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CisgICAgYnJlYWtw
b2ludCgpOworLyoKKyAgICBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gZm9yIHN0cmluZ3Mu
CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbChtX3ZtLT5nZXRDVElTdHViKHN0
cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CisgICAgSnVtcCBmYWlsZWQgPSBi
cmFuY2hUZXN0NjQoWmVybywgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZWdUMCk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9w
X2dldF9ieV92YWwpKTsKKyAgICBmYWlsZWQubGluayh0aGlzKTsKKyovCisgICAgbm90U3RyaW5n
LmxpbmsodGhpcyk7CisgICAgbm9uQ2VsbC5saW5rKHRoaXMpOworICAgIAorICAgIEp1bXAgc2tp
cFByb2ZpbGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZl
Y3RvciBsZW5ndGggY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVl
CisgICAgCisgICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmls
ZSk7CisgICAgCisgICAgc2tpcFByb2ZpbGluZy5saW5rKHRoaXMpOworICAgIAorICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKKyAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0
LCByZWdUMSwgcmVnVDAsIHJlZ1QzLCByZWdUMik7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwor
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVy
bkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAg
aW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51
bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisKKyAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CisKKyAgICAvLyBDaGVjayB0
aGUgc3RydWN0dXJlCisgICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgZW1pdExvYWRQYXlsb2FkKGlu
ZGV4LCByZWdUMik7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9y
J3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAg
IEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVn
VDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVnVDEpOworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7CisgICAg
CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9m
IGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzdWIz
MihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgbmVnMzIocmVnVDIpOworICAgIGxvYWQzMihC
YXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCAtMiAqIHN0YXRpY19jYXN0PGludDMy
X3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZWdUMSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIs
IFRpbWVzRWlnaHQsIC0yICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdU
MCk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X3N0cnVjdHVy
ZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9w
ZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAg
IGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChlbnVt
ZXJhdG9yLCByZWdUMSk7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdU
MCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0
eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Ok51bGxUYWcpLCByZWdUMik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKwor
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBpbkJvdW5kcy5saW5rKHRoaXMpOworCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRl
eChyZWdUMSwgcmVnVDAsIHRpbWVzUHRyKCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90
b19pbmRleF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX3RvX2luZGV4X3N0cmluZyk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNzExOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw5ICszNiwxMSBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJK
U0NlbGwuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENh
bGwuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIApAQCAtMTIxMCw2ICsxMjEyLDI4
MiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FwdHVyZWRfbW92KEluc3RyCiAgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZWdUMCk7CisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
KyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJv
cGVydHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2hhc19nZW5lcmljX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJ
VEludDMyOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJMb2FkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURG91YmxlOgorICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRDb250aWd1b3VzTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gVE9ETzogQWRkIHN1
cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVnVDApOworCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBh
dGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgp
KSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Cisg
ICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAK
KyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGhhc19p
bmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlW
YWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJh
c2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOworCisg
ICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGlu
ZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCisgICAgLy8g
V2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3Zl
Y3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKKyAgICAvLyBudW1iZXIgd2Fz
IHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAo
c2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KKyAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRo
YW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChh
bmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQorICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNp
bmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQg
cmF0aGVyIHRoYW4gc2lnbgorICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNp
ZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgorICAgIHplcm9FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwg
cmVnVDIsIHByb2ZpbGUpOworICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFz
ayksIHJlZ1QyKTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CisKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9m
aWxlKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpJVEludDMyOgorICAgICAgICBz
bG93Q2FzZXMgPSBlbWl0SW50MzJMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURG91YmxlOgorICAgICAgICBzbG93Q2FzZXMgPSBl
bWl0RG91YmxlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250
aWd1b3VzTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5
U3RvcmFnZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwgcmVnVDApOworCisgICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nh
c2Uoc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKyAgICAKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFk
VHlwZSwgbW9kZSwgZG9uZSkpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRl
ciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsK
KyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKKyAgICBKdW1wIG5v
dFN0cmluZyA9IGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgCisgICAgICAgIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAorICAgICAgICBtX3ZtLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpOworICAgIGJyZWFrcG9pbnQoKTsKKy8qCisgICAgVE9ETzogRmlndXJl
IG91dCB3aGF0IHRvIGRvIGZvciBzdHJpbmdzLgorICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0
aW9uTGFiZWwobV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNv
ZGUoKSkpOworICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CisgICAgZmFpbGVkLmxp
bmsodGhpcyk7CisqLworICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOworICAgIG5vbkNlbGwubGlu
ayh0aGlzKTsKKyAgICAKKyAgICBKdW1wIHNraXBQcm9maWxpbmcgPSBqdW1wKCk7CisgICAgCisg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgIAorICAgIGVtaXRBcnJheVByb2ZpbGVP
dXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIHNraXBQcm9maWxpbmcu
bGluayh0aGlzKTsKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisgICAgCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwgcmVnVDEp
OworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
c2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3Bu
YW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NV0udS5vcGVyYW5kOworCisgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKwor
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3In
cyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVn
VDEpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOworICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIC8vIE90aGVyd2lzZSBp
dCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsKKyAg
ICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAtMiAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpKSwgcmVnVDApOworICAgIAorICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5h
bWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7Cisg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsK
KyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc3Ry
dWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7Cisg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dlbmVy
aWNfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9lbnVtZXJhdG9y
X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
MSk7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3Ro
T2Zmc2V0KCkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlZ1QwKTsK
KworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBpbkJvdW5kcy5saW5rKHRoaXMpOworCisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMCwgcmVnVDApOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBU
aW1lc0VpZ2h0KSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3Ry
aW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90b19p
bmRleF9zdHJpbmcpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkpTU3RhY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIK
QEAgLTE1MDIsNiArMTUwMyw2NCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogICAgIAorRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZh
dWx0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIAorICAgIEFT
U0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgQVNTRVJUKHN1YnNjcmlwdC5pc1VJbnQz
MigpKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAg
IGJvb2wgZGlkT3B0aW1pemUgPSBmYWxzZTsKKworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
ID0gZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgQVNTRVJUKGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5n
ZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQoIWJ5VmFsSW5mby5z
dHViUm91dGluZSk7CisgICAgCisgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0
LT5zdHJ1Y3R1cmUodm0pKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAg
ICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9i
amVjdC0+c3RydWN0dXJlKHZtKSk7CisgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZv
LmFycmF5TW9kZSkgeworICAgICAgICAgICAgSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VS
X1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIGRpZE9wdGltaXplID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWRpZE9wdGltaXplKSB7Cisg
ICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0
IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCisgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBt
aXN0YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUg
b2JqZWN0CisgICAgICAgIC8vIHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24n
dCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuIEZvciBjYXNlcworICAgICAgICAvLyB3aGVyZSB3
ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJh
dGlvbnMgd29ydGggb2YKKyAgICAgICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUg
dGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuCisgICAgICAgIGlmICgrK2J5
VmFsSW5mby5zbG93UGF0aENvdW50ID49IDEwCisgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVj
dHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhF
dmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7CisgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRy
eSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihl
eGVjLT5jb2RlQmxvY2soKSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24oUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlv
blB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQuYXNVSW50MzIoKSkpKTsKK30KKyAgICAKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJp
YyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICAKKyAgICBBU1NF
UlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOworICAgIEFTU0VSVChzdWJzY3JpcHQuaXNVSW50MzIo
KSk7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IHN1YnNjcmlwdC5hc1VJbnQzMigpKSkpOworfQorICAgIAogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xODAyLDYgKzE4NjEsMTE5IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKICAgICBnZW5lcmljVW53aW5kKHZtLCBl
eGVjLCB2bS0+ZXhjZXB0aW9uKCkpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4gYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRFbnVt
ZXJhYmxlTGVuZ3RoKGV4ZWMsIGFzT2JqZWN0KGJhc2UpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisK
KyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBhc1N0
cmluZyhwcm9wZXJ0eU5hbWUpLT50b0lkZW50aWZpZXIoZXhlYykpKSk7Cit9CisKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VDZWxsKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IHN1YnNjcmlwdCkpKTsKK30KKyAgICAKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNl
bGwsIGludDMyX3QgbGVuZ3RoKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworLyoKKyAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBpZiAoYmFz
ZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisqLworICAgICAgICAKKyAgICBKU09iamVjdCogYmFz
ZSA9IGFzT2JqZWN0KGNlbGwpOy8vYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIEFTU0VS
VChsZW5ndGggPj0gMCk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVj
dHVyZSh2bSk7CisgICAgaWYgKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9
IHN0cnVjdHVyZS0+Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAg
ICAgICByZXR1cm4gZW51bWVyYXRvcjsKKworICAgIGlmICghc3RydWN0dXJlLT5jYW5BY2Nlc3NQ
cm9wZXJ0aWVzUXVpY2tseSgpIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90PihsZW5ndGgpICE9IGJh
c2UtPmdldEFycmF5TGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZSh2bSk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVz
KGV4ZWMpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZXMpOwor
ICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRv
cigpKQorICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVu
dW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworICAgIHJldHVybiBlbnVtZXJhdG9yOworfQorCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3QgbGVuZ3RoLCBKU0Nl
bGwqIHN0cnVjdHVyZUVudW1lcmF0b3JDZWxsKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworLyoKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAg
ICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisgICAgCisqLworICAgIEpTT2JqZWN0
KiBiYXNlID0gYXNPYmplY3QoYmFzZUNlbGwpOworICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CisK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYg
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IHN0cnVjdHVyZS0+Y2FjaGVk
R2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkgeworICAgICAgICBpZiAoIWxlbmd0aCAm
JiBlbnVtZXJhdG9yLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpID09IHN0cnVjdHVyZS0+cHJvdG90
eXBlQ2hhaW4oZXhlYykpCisgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvcjsKKyAgICB9CisK
KyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHN0cnVjdHVyZUVudW1lcmF0b3IgPSBqc0Nh
c3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oc3RydWN0dXJlRW51bWVyYXRvckNlbGwpOwor
CisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKKyAgICBwcm9wZXJ0
eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKGxlbmd0aCk7CisgICAgcHJvcGVy
dHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoc3RydWN0dXJlRW51bWVy
YXRvcik7CisKKyAgICAvLyBJZiB3ZSBzdGlsbCBoYXZlIHRoZSBzYW1lIFN0cnVjdHVyZSB0aGF0
IHdlIHN0YXJ0ZWQgd2l0aCwgd2UgZG9uJ3QgbmVlZCB0byByZXZpc2l0IHRoZSBKU09iamVjdCBw
cm9wZXJ0aWVzLgorICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJlID0gc3RydWN0dXJlRW51
bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlID09IGNhY2hl
ZFN0cnVjdHVyZSAmJiBzdHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgJiYg
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCkgPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkK
KyAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhi
YXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAg
ICBlbHNlCisgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhi
YXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAg
ICAKKyAgICBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlKTsKKworICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y3JlYXRlKHZtLCBiYXNlLT5zdHJ1Y3R1cmUodm0pLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBl
bnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjKSk7CisgICAgaWYgKCFsZW5ndGggJiYgc3RydWN0dXJlLT5jYW5DYWNoZUdl
bmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHN0cnVjdHVyZS0+c2V0Q2Fj
aGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworICAgIHJl
dHVybiBlbnVtZXJhdG9yOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5leHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGVudW1lcmF0
b3JDZWxsLCBpbnQzMl90IGluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqPihlbnVtZXJhdG9yQ2VsbCk7CisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IGVudW1l
cmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOworfQorCitKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IGludDMyX3QgaW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLnN0cmluZygpKTsKK30KKwogfSAvLyBl
eHRlcm4gIkMiCiAKIC8vIE5vdGU6IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRl
KCkgbmVlZHMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTAg
Kzk2LDEzIEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkoKIHR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDQykoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmlu
Z0ltcGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3Bl
cmF0aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNaKShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VEQSkoRXhlY1N0YXRlKiwgZG91YmxlLCBKU0FycmF5
Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FRSkoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSSkoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCop
OwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25f
RUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgq
Sl9KSVRPcGVyYXRpb25fRUpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7
CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9F
SkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7CiB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSklkYykoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIqKTsKIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTExOCw5ICsxMjEsMTQgQEAgdHlwZWRl
ZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSgogdHlwZWRlZiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3Qp
OwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQykoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklU
T3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Cit0eXBlZGVmIEpT
Q2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDWkMpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIGludDMyX3QsIEpTQ2VsbCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
KCpDX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlw
ZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSWNmKShFeGVjU3Rh
dGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgq
Q19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAo
KkNfSklUT3BlcmF0aW9uX0VKWkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90
LCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRp
b25fRUpKQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBKU0Nl
bGwqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpz
c1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogdHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUqLCBKU1N0
cmluZyosIEpTU3RyaW5nKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklU
T3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBK
U1N0cmluZyopOwpAQCAtMTM0LDYgKzE0Miw3IEBAIHR5cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJ
T04gKCpEX0pJVE9wZXIKIHR5cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJVE9wZXJh
dGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBpbnQzMl90IEpJ
VF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5cGVkZWYg
aW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VD
QykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BF
UkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsK
IHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0yNzcsNiArMjg2LDgg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbERlZmF1bHQoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQp
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBX
VEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJp
YyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNTdGF0ZSos
IEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBiYXNl
LCBjb25zdCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwpAQCAtMzAwLDYgKzMxMSwxNCBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyCiAKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ29uc3QoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qKTsK
IAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEVudW1lcmFibGVMZW5ndGgoRXhl
Y1N0YXRlKiwgSlNDZWxsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0
eShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0R2VuZXJpY1By
b3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90LCBKU0NlbGwqKTsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV4dEVudW1lcmF0b3JQbmFt
ZShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOworCiB9IC8vIGV4dGVy
biAiQyIKIAogaW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0ZvcigKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3
Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2Rl
T2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7CiB9CiAKKy8qCiBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKQEAgLTE4OCw3ICsxODksMjIgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1
b3VzR2V0QnlWYQogICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CisqLworSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQoreworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKyAgICAKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOworICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWQzMihCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZAorICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAg
ICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQogCisvKgogSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7
CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpAQCAtMjA0LDcgKzIyMCwzNiBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKEluCiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNl
czsKIH0KKyovCiAKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlTG9hZChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgIAorICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihEb3VibGVTaGFwZSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCksIGZwUmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsK
KyAgICAKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEFycmF5U3RvcmFnZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQor
eworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIo
LUFycmF5U3RvcmFnZVNoYXBlKSwgcmVnVDEsIHJlZ1QzKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hh
YmxlQnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoU2xvd1B1dEFycmF5U3RvcmFn
ZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEp
OyAvLyB0YWcKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBwYXlsb2FkCisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgIAorICAgIHJldHVybiBzbG93Q2FzZXM7Cit9Cisv
KgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpA
QCAtMjIxLDYgKzI2Niw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlR2V0
QnkKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQorKi8KICAgICAKIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTcx
MTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKEluc3RydWN0aW9uCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkp
OwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9u
KiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RG91Ymxl
TG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwogICAgIApAQCAtMTYwLDEzICsxNjAsMTEgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXREb3VibGVHZXRCeVZhbChJbgogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSkpOwogICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwg
VGltZXNFaWdodCksIGZwUmVnVDApOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91Ymxl
KERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKLSAgICBtb3Zl
RG91YmxlVG82NChmcFJlZ1QwLCByZWdUMCk7Ci0gICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWdUMCk7CiAgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKK0pJVDo6SnVtcExpc3Qg
SklUOjplbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAgICAgCkBAIC0xNzksNyArMTc3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250
aWd1b3VzR2V0QnlWYQogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3Qg
SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTIx
MCw2ICsxMjEwLDUwIEBAIF9sbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgogX2xsaW50X25h
dGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBuYXRpdmVDYWxsVHJhbXBvbGluZShOYXRp
dmVFeGVjdXRhYmxlOjptX2NvbnN0cnVjdG9yKQogCitfbGxpbnRfb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0
aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisgICAgZGlzcGF0Y2goMykKKworX2xsaW50X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg1KQorCitf
bGxpbnRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisg
ICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyAgICBk
aXNwYXRjaCg1KQorCitfbGxpbnRfb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3Bl
cnR5KQorICAgIGRpc3BhdGNoKDQpCisKK19sbGludF9vcF9nZXRfZGlyZWN0X3BuYW1lOgorICAg
IHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfZGlyZWN0
X3BuYW1lKQorICAgIGRpc3BhdGNoKDcpCisKK19sbGludF9vcF9nZXRfc3RydWN0dXJlX3Byb3Bl
cnR5X2VudW1lcmF0b3I6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChf
c2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikKKyAgICBkaXNwYXRj
aCg0KQorCitfbGxpbnRfb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICB0
cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0X2dlbmVyaWNf
cHJvcGVydHlfZW51bWVyYXRvcikKKyAgICBkaXNwYXRjaCg1KQorCitfbGxpbnRfb3BfbmV4dF9l
bnVtZXJhdG9yX3BuYW1lOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgo
X3Nsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpCisgICAgZGlzcGF0Y2goNCkKKworX2xs
aW50X29wX3RvX2luZGV4X3N0cmluZzoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNs
b3dQYXRoKF9zbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQorICAgIGRpc3BhdGNoKDMpCiAKICMg
TGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBz
dXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3
aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgwLDYgKzEyODAs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZvckluTm9kZShWTSosIGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYsIERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9kZSos
IFN0YXRlbWVudE5vZGUqKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQqIHRy
eUdldEJvdW5kTG9jYWwoQnl0ZWNvZGVHZW5lcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0TG9v
cEhlYWRlcihCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIHZvaWQgZW1pdE11bHRpTG9vcEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogZHN0KTsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKICAgICB9OwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZp
c2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBBcmd1bWVudHM6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwogICAgIH0KLSAgICBp
ZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSB7CisgICAgaWYgKHNob3VsZElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpIHsKICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlZSk7CiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxNzExOTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtODIsNiArODIsMTIgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB0eXBlZGVmIHZvaWQg
KCpHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEdldFByb3BlcnR5TmFtZXNG
dW5jdGlvblB0ciBnZXRQcm9wZXJ0eU5hbWVzOwogCisgICAgdHlwZWRlZiB1aW50MzJfdCAoKkdl
dEVudW1lcmFibGVMZW5ndGhGdW5jdGlvblB0cikoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKKyAg
ICBHZXRFbnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIgZ2V0RW51bWVyYWJsZUxlbmd0aDsKKwor
ICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVz
OworICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRHZW5lcmljUHJvcGVydHlOYW1l
czsKKwogICAgIHR5cGVkZWYgU3RyaW5nICgqQ2xhc3NOYW1lRnVuY3Rpb25QdHIpKGNvbnN0IEpT
T2JqZWN0Kik7CiAgICAgQ2xhc3NOYW1lRnVuY3Rpb25QdHIgY2xhc3NOYW1lOwogCkBAIC0xMzcs
NiArMTQzLDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0
T3duUHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAor
ICAgICAgICAmQ2xhc3NOYW1lOjpnZXRFbnVtZXJhYmxlTGVuZ3RoLCBcCisgICAgICAgICZDbGFz
c05hbWU6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6
Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1l
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmN1c3RvbUhhc0luc3RhbmNlLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmRlZmluZU93blByb3BlcnR5LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MTE5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05hbWVTY29w
ZS5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUg
IkpTV2l0aFNjb3BlLmgiCkBAIC01NDIsNiArNTQzLDE0NSBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZW50ZXIpCiAgICAgRU5EKCk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisKKyAgICBKU09iamVjdCogYmFz
ZSA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICBSRVRVUk4oanNOdW1iZXIoYmFzZS0+
bWV0aG9kVGFibGUodm0pLT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGV4ZWMsIGJhc2UpKSk7Cit9CisK
K1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKK3sKKyAgICBC
RUdJTigpOworICAgIEpTT2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1ZSgpLnRvT2JqZWN0KGV4
ZWMpOworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgcGNbNF0u
dS5hcnJheVByb2ZpbGUtPm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0dXJlKHZtKSk7Cisg
ICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMyKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFz
ZS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkuYXNVSW50MzIoKSkpKTsKK30KKworU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCit7CisgICAgQkVHSU4o
KTsKKyAgICBKU09iamVjdCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsK
KyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIEFTU0VSVChwcm9w
ZXJ0eS5pc1N0cmluZygpKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0
b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oT1AoNCkuanNWYWx1ZSgpLmFz
Q2VsbCgpKTsKKyAgICBpZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9y
LT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsK
KyAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHBy
b3BlcnR5LmFzQ2VsbCgpKS0+dG9JZGVudGlmaWVyKGV4ZWMpKSkpOworfQorCitTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvcGVydHkpCit7CisgICAgQkVHSU4oKTsKKyAg
ICBKU09iamVjdCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBK
U1ZhbHVlIHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIGJvb2wgcmVzdWx0OworICAg
IGlmIChwcm9wZXJ0eS5pc1N0cmluZygpKQorICAgICAgICByZXN1bHQgPSBiYXNlLT5oYXNQcm9w
ZXJ0eShleGVjLCBhc1N0cmluZyhwcm9wZXJ0eS5hc0NlbGwoKSktPnRvSWRlbnRpZmllcihleGVj
KSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMigpKTsKKyAg
ICAgICAgcmVzdWx0ID0gYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkuYXNVSW50MzIo
KSk7CisgICAgfQorICAgIFJFVFVSTihqc0Jvb2xlYW4ocmVzdWx0KSk7Cit9CisKK1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQoreworICAgIEJFR0lOKCk7CisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICAvL3VpbnQzMl90IGluZGV4ID0gT1AoNCkuanNWYWx1
ZSgpLmFzVUludDMyKCk7CisgICAgLy9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0
b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oT1AoNSkuanNWYWx1ZSgpLmFz
Q2VsbCgpKTsKKyAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7CisgICAgUkVUVVJOKGJh
c2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnRvSWRlbnRpZmllcihl
eGVjKSkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3N0cnVjdHVyZV9wcm9w
ZXJ0eV9lbnVtZXJhdG9yKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0pKTsK
KyAgICAgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7
CisgICAgdWludDMyX3QgbGVuZ3RoID0gT1AoMykuanNWYWx1ZSgpLmFzVUludDMyKCk7CisKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IHN0cnVjdHVyZS0+Y2FjaGVkU3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICBSRVRVUk4oZW51bWVyYXRv
cik7CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSB8
fCBsZW5ndGggIT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtKSk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3Ry
dWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVy
YXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZXMpOworICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlU3RydWN0dXJlUHJvcGVy
dHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZFN0cnVjdHVy
ZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworICAgIFJFVFVSTihlbnVt
ZXJhdG9yKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3Bl
cnR5X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgIFJFVFVSTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSkpOwor
ICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAg
IHVpbnQzMl90IGVudW1lcmF0ZWRMZW5ndGggPSBPUCgzKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsK
KworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBp
ZiAoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5jYWNo
ZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKSB7CisgICAgICAgIGlmICghZW51bWVy
YXRlZExlbmd0aCAmJiBlbnVtZXJhdG9yLT5jYWNoZWRQcm90b3R5cGVDaGFpbigpID09IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYykpCisgICAgICAgICAgICBSRVRVUk4oZW51bWVyYXRv
cik7CisgICAgfQorCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBzdHJ1Y3R1cmVFbnVt
ZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDQpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMp
OworICAgIHByb3BlcnR5TmFtZXMuc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgoZW51bWVy
YXRlZExlbmd0aCk7CisgICAgcHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRlZFBy
b3BlcnRpZXMoc3RydWN0dXJlRW51bWVyYXRvcik7CisKKyAgICAvLyBJZiB3ZSBzdGlsbCBoYXZl
IHRoZSBzYW1lIFN0cnVjdHVyZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aCwgd2UgZG9uJ3QgbmVlZCB0
byByZXZpc2l0IHRoZSBKU09iamVjdCBwcm9wZXJ0aWVzLgorICAgIFN0cnVjdHVyZSogY2FjaGVk
U3RydWN0dXJlID0gc3RydWN0dXJlRW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlKHZtKTsKKyAg
ICBpZiAoc3RydWN0dXJlID09IGNhY2hlZFN0cnVjdHVyZSAKKyAgICAgICAgJiYgZW51bWVyYXRl
ZExlbmd0aCA9PSBiYXNlLT5nZXRBcnJheUxlbmd0aCgpKQorICAgICAgICBiYXNlLT5tZXRob2RU
YWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIGVsc2UKKyAgICAgICAgYmFzZS0+
bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorICAgIG5vcm1hbGl6ZVByb3Rv
dHlwZUNoYWluKGV4ZWMsIGJhc2UpOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lcyk7CisgICAgZW51bWVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hh
aW4odm0sIHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYykpOworICAgIGlmICghZW51bWVy
YXRlZExlbmd0aCAmJiBzdHJ1Y3R1cmUtPmNhbkNhY2hlR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJlLT5zZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1l
RW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7CisgICAgUkVUVVJOKGVudW1lcmF0b3IpOworfQor
CitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKQoreworICAg
IEJFR0lOKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganND
YXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDIpLmpzVmFsdWUoKS5hc0NlbGwoKSk7
CisgICAgdWludDMyX3QgaW5kZXggPSBPUCgzKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKKyAgICBK
U1N0cmluZyogcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChp
bmRleCk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgp
KTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKK3sKKyAg
ICBCRUdJTigpOworICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIE9QKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJpbmcoKSkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDYgKzIyNiwxNSBAQCBTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfZGVsX2J5X3ZhbCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNh
dCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19pbmRleGVkX3Byb3BlcnR5KTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSk7CitTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7
CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZXh0X2VudW1lcmF0
b3JfcG5hbWUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJp
bmcpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTEsMTQgKzExMSwxNCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0CiAgICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQWN0aXZhdGlv
bio+KG9iamVjdCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IENhbGxGcmFtZTo6Y3Jl
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPih0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykp
OwotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgJiYgIXRoaXNPYmpl
Y3QtPmlzVG9ybk9mZigpICYmIChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRz
KCkgfHwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dXNlc0V2YWwoKSkpCisgICAgaWYgKHNob3Vs
ZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkgJiYgIXRoaXNPYmplY3QtPmlzVG9ybk9m
ZigpICYmIChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkgfHwgY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+dXNlc0V2YWwoKSkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpOwogCiAgICAgewogICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2sp
OwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFw
OjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1
dGVzKCkgJiBEb250RW51bSAmJiBtb2RlICE9IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisg
ICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmICFz
aG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcs
NyBAQCB2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lCiB7CiAgICAgSlNB
cnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKIAotICAgIGlmICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNob3VsZEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCiAgICAgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIuY3Bw
CShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgSlNB
cnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXIKIHsKICAgICBKU0FycmF5QnVmZmVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOwogICAgIAotICAgIGlm
IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNob3VsZEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7CiAgICAgCiAgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJ
KHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQg
SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHIKICAgICBKU0FycmF5QnVmZmVyVmll
dyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVjdCk7CiAgICAg
CiAgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVudW0sIGF0IGxl
YXN0IGluIEZpcmVmb3guCi0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykgeworICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSB7CiAg
ICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNldCk7CiAgICAg
ICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7CiAgICAgICAg
IGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM2LDQgKzIzNiwxOSBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlNDZWxsOjpnZXRU
CiAgICAgcmV0dXJuIDA7CiB9CiAKK3VpbnQzMl90IEpTQ2VsbDo6Z2V0RW51bWVyYWJsZUxlbmd0
aChFeGVjU3RhdGUqLCBKU09iamVjdCopCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpTQ2VsbDo6Z2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVB
cnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsNTggQEAgY2xh
c3MgU3RydWN0dXJlOwogCiBlbnVtIEVudW1lcmF0aW9uTW9kZSB7CiAgICAgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllcywKLSAgICBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzCisgICAgRXhjbHVk
ZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdCwKKyAgICBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzLAorICAgIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3QK
IH07CiAKK2lubGluZSBib29sIHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzOgorICAgIGNhc2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllc0Fu
ZFNraXBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgc2hvdWxkRXhjbHVkZURv
bnRFbnVtUHJvcGVydGllcyhFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXM6CisgICAgY2FzZSBFeGNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxp
bmUgYm9vbCBzaG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllczoKKyAgICBjYXNlIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXM6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBK
U09iamVjdDoKKyAgICBjYXNlIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmpl
Y3Q6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBFbnVtZXJhdGlv
bk1vZGUgbW9kZVRoYXRTa2lwc0pTT2JqZWN0KEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllczoKKyAg
ICAgICAgcmV0dXJuIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q7Cisg
ICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAgICAgICByZXR1cm4gRXhjbHVk
ZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDsKKyAgICBjYXNlIEV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgY2FzZSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gbW9kZTsKKyAgICB9Cit9
CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVfdCk7CiAKQEAg
LTIwOSw2ICsyNTgsMTEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgTk9fUkVUVVJO
X0RVRV9UT19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBz
dGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisK
KyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB1aW50MzJfdCBnZXRFbnVtZXJhYmxl
TGVuZ3RoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisK
ICAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNyAr
MzkwLDcgQEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYgogdm9pZCBK
U0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4ob2JqZWN0KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRp
bkZ1bmN0aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKKyAg
ICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgJiYgc2hvdWxkSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgICAgICAvLyBNYWtlIHN1cmUgcHJvdG90eXBlIGhhcyBiZWVuIHJlaWZpZWQuCiAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6ZwogewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKICAgICAKLSAgICBpZiAobW9kZSA9
PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCk7CiAgICAgCiAgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUs
NyArNzUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdp
bih2bSk7IGl0ZXIgIT0gdGFibGUtPmVuZCh2bSk7ICsraXRlcikgewotICAgICAgICAgICAgaWYg
KCghKGl0ZXItPmF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKSkgJiYgISgoaXRlci0+YXR0cmlidXRlcygpICYgQnVpbHRpbk9yRnVu
Y3Rpb24pICYmIGRpZFJlaWZ5KSkKKyAgICAgICAgICAgIGlmICgoIShpdGVyLT5hdHRyaWJ1dGVz
KCkgJiBEb250RW51bSkgfHwgc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkg
JiYgISgoaXRlci0+YXR0cmlidXRlcygpICYgQnVpbHRpbk9yRnVuY3Rpb24pICYmIGRpZFJlaWZ5
KSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpdGVyLmtleSgpKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTEyODQsNiArMTI4NCwxMiBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Q
cm9wZXJ0eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlz
KS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0
PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKK2Jvb2wg
SlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKSBjb25zdAoreworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOworICAgIHJldHVy
biBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwogYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogewog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC0x
NDY0LDYgKzE0NzAsMTIgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVj
dAogCiB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogeworICAgIGlmICghc2hvdWxkSW5jbHVkZUpTT2JqZWN0UHJvcGVy
dHlOYW1lcyhtb2RlKSkgeworICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIHRvIGdldCBub24taW5k
ZXhlZCBwcm9wZXJ0aWVzIGZyb20gYW55IHN1YmNsYXNzZXMgb2YgSlNPYmplY3QgdGhhdCBoYXZl
IHRoZW0uCisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gQWRkIG51bWVyaWMgcHJvcGVydGllcyBm
aXJzdC4gVGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252ZW50aW9uLgogICAgIC8v
IEZJWE1FOiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3Ig
ZXZlcnkgaW50ZWdlcgogICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdl
IGFycmF5cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKQEAgLTE0ODAsNyArMTQ5Miw3
IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYg
KCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkp
OworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMTQ5Miw3ICsxNTA0LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE1MDMsNyArMTUx
NSw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3Zl
Y3RvcltpXSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9
IHN0b3JhZ2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CkBAIC0xNTEyLDEzICsxNTI0LDEzIEBAIHZv
aWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAg
IGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+dmFsdWUuYXR0
cmlidXRlcyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcyhtb2RlKSB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVu
dW0pKQogICAgICAgICAgICAgICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaXQtPmtleSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOwor
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGtleXNbaV0pOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE1MjYsNyArMTUzOCw3IEBAIHZvaWQgSlNPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICAKKyAgIAogICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0xNTM0LDEyICsxNTQ2LDExIEBA
IHZvaWQgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW0KIHsKICAgICBnZXRDbGFz
c1Byb3BlcnR5TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywg
bW9kZSwgb2JqZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwogCisgICAgaWYgKCFzaG91
bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKG1vZGUpKQorICAgICAgICByZXR1cm47Cisg
ICAgCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBib29sIGNhbkNhY2hlUHJvcGVydGll
c0Zyb21TdHJ1Y3R1cmUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7CiAgICAgb2JqZWN0LT5zdHJ1
Y3R1cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1l
cywgbW9kZSk7Ci0KLSAgICBpZiAoY2FuQ2FjaGVQcm9wZXJ0aWVzRnJvbVN0cnVjdHVyZSkKLSAg
ICAgICAgcHJvcGVydHlOYW1lcy5zZXROdW1DYWNoZWFibGVTbG90c0Zvck9iamVjdChvYmplY3Qs
IHByb3BlcnR5TmFtZXMuc2l6ZSgpKTsKIH0KIAogZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBAIC0yNjUyLDQgKzI2NjMsODUgQEAgSlNPYmplY3QqIHRo
cm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYwogICAgIHJldHVybiBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CiB9CiAKK3Vp
bnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1Y3R1cmUt
PmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCisgICAgICAgIHJldHVybiAwOworICAg
IHN3aXRjaCAob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lO
REVYSU5HX1RZUEVTOgorICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICB1bnNp
Z25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYg
KCFidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXNlZExlbmd0aDsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IG9iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRM
ZW5ndGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBkb3VibGUgdmFsdWUg
PSBidXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZSAhPSB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdXNlZExlbmd0aDsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdl
ID0gb2JqZWN0LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9y
YWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxl
bmd0aCgpLCBzdG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3Rv
cmFnZS0+bV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHVzZWRWZWN0b3JMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldFByb3BlcnR5TmFtZXNG
cm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU09iamVj
dDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGVUaGF0U2tpcHNKU09iamVjdChtb2RlKSk7CisKKyAgICBpZiAob2JqZWN0LT5wcm90b3R5cGUo
KS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9
IGFzT2JqZWN0KG9iamVjdC0+cHJvdG90eXBlKCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIGlmIChwcm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcygpKSB7CisgICAgICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0UHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcHJvdG90eXBlLT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPnBy
b3RvdHlwZSgpOworICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7CisgICAgfQor
fQorCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjIsNiArNDYyLDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1By
b3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgYm9v
bCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGJv
b2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQpIGNvbnN0OwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKTsKQEAgLTQ3NSw2ICs0NzYsMTAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0
YXRlKiwgSlNPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCiAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2
ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25z
dDsKICAgICBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJl
ciwgSlNWYWx1ZSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJl
cihFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIK
KworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpzX2luZm8gPSB7ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IiLCAwLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcikgfTsKKworSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0p
Cit7CisgICAgaWYgKCF2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IuZ2V0KCkpIHsKKyAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0pOworICAgICAgICB2bS5l
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IgPSBTdHJvbmc8SlNDZWxsPih2bSwgY3JlYXRlKHZt
LCAwLCBwcm9wZXJ0eU5hbWVzKSk7CisgICAgfQorICAgIHJldHVybiBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4odm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpKTsK
K30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcykKK3sKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IHN0cnVjdHVy
ZSA/IHN0cnVjdHVyZS0+aWQoKSA6IDA7CisgICAgdWludDMyX3QgaW5saW5lQ2FwYWNpdHkgPSBz
dHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkgOiAwOworICAgIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IG5ldyAoTm90TnVsbCwgCisgICAgICAgIGFs
bG9jYXRlQ2VsbDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I+KHZtLmhlYXApKSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3Iodm0sIHN0cnVjdHVyZUlELCBpbmxpbmVDYXBhY2l0eSwgcHJvcGVydHlO
YW1lcy5pZGVudGlmaWVyU2V0KCkpOworICAgIGVudW1lcmF0b3ItPmZpbmlzaENyZWF0aW9uKHZt
LCBwcm9wZXJ0eU5hbWVzLmRhdGEoKSk7CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwg
U3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIHVpbnQzMl90IGlubGluZUNhcGFjaXR5LCBSZWZDb3Vu
dGVkSWRlbnRpZmllclNldCogc2V0KQorICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9pZGVudGlmaWVyU2V0KHNldCkKKyAg
ICAsIG1fY2FjaGVkU3RydWN0dXJlSUQoc3RydWN0dXJlSUQpCisgICAgLCBtX2NhY2hlZElubGlu
ZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5KQoreworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBQYXNzUmVmUHRyPFByb3BlcnR5TmFtZUFy
cmF5RGF0YT4gaWRlbnRzKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAg
IFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IGlkZW50aWZpZXJzID0gaWRlbnRzOworICAg
IFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiB2ZWN0b3IgPSBpZGVu
dGlmaWVycy0+cHJvcGVydHlOYW1lVmVjdG9yKCk7CisgICAgbV9wcm9wZXJ0eU5hbWVzLnJlc2l6
ZSh2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB2ZWN0
b3JbaV07CisgICAgICAgIG1fcHJvcGVydHlOYW1lc1tpXS5zZXQodm0sIHRoaXMsIGpzU3RyaW5n
KCZ2bSwgaWRlbnRpZmllci5zdHJpbmcoKSkpOworICAgIH0KK30KKwordm9pZCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxsKS0+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp+
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCk7Cit9CisKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKj4oY2VsbCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3Qt
Pm1fcHJvcGVydHlOYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fcHJvcGVydHlOYW1lc1tpXSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fcHJvdG90eXBlQ2hhaW4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9o
CisjZGVmaW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9oCisKKyNpbmNsdWRlICJKU0NlbGwu
aCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSWRlbnRpZmllcjsKKworY2xhc3MgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNy
ZWF0ZShWTSYpOworICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CisKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJ
bW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZUF0SW5k
ZXgodWludDMyX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gbV9w
cm9wZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gbV9wcm9wZXJ0eU5hbWVzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICBSZWZD
b3VudGVkSWRlbnRpZmllclNldCogaWRlbnRpZmllclNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pZGVudGlmaWVyU2V0LmdldCgpOworICAgIH0KKworICAgIFN0cnVjdHVyZUNo
YWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlQ2hh
aW4uZ2V0KCk7IH0KKyAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKFZNJiB2bSwgU3Ry
dWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKSB7IHJldHVybiBtX3Byb3RvdHlwZUNoYWluLnNl
dCh2bSwgdGhpcywgcHJvdG90eXBlQ2hhaW4pOyB9CisKKyAgICBTdHJ1Y3R1cmUqIGNhY2hlZFN0
cnVjdHVyZShWTSYgdm0pIGNvbnN0IHsgcmV0dXJuIHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChtX2NhY2hlZFN0cnVjdHVyZUlEKTsgfQorICAgIFN0cnVjdHVyZUlEIGNhY2hlZFN0cnVj
dHVyZUlEKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdHJ1Y3R1cmVJRDsgfQorICAgIHVpbnQz
Ml90IGNhY2hlZElubGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbmxpbmVD
YXBhY2l0eTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2Nh
Y2hlZFN0cnVjdHVyZUlEKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qg
Y2FjaGVkUHJvcGVydHlOYW1lc0xlbmd0aE9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVz
KSArIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Pjo6c2l6ZU1lbW9yeU9mZnNldCgpOwor
ICAgIH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZz
ZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcykgKyBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTU3Ry
aW5nPj46OmRhdGFNZW1vcnlPZmZzZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbjsKKworICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcihWTSYsIFN0cnVjdHVyZUlELCB1aW50MzJfdCwgUmVmQ291bnRl
ZElkZW50aWZpZXJTZXQqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUGFzc1JlZlB0
cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+KTsKKworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNT
dHJpbmc+PiBtX3Byb3BlcnR5TmFtZXM7CisgICAgUmVmUHRyPFJlZkNvdW50ZWRJZGVudGlmaWVy
U2V0PiBtX2lkZW50aWZpZXJTZXQ7CisgICAgU3RydWN0dXJlSUQgbV9jYWNoZWRTdHJ1Y3R1cmVJ
RDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47Cisg
ICAgdWludDMyX3QgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAxNzExOTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDYgKzExOCwyNCBAQCB2b2lkIEpTUHJveHk6OmdldFByb3BlcnR5TmFtZXMoSlNP
YmplY3QqCiAgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKIH0KIAordWludDMyX3QgSlNQcm94eTo6Z2V0RW51bWVyYWJsZUxlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgSlNQcm94eSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+
dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGV4
ZWMsIHRoaXNPYmplY3QtPnRhcmdldCgpKTsKK30KKwordm9pZCBKU1Byb3h5OjpnZXRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAg
IEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7CisgICAgdGhp
c09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKK30KKwordm9pZCBKU1Byb3h5OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTUHJveHkqPihvYmplY3QpOworICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRo
b2RUYWJsZShleGVjLT52bSgpKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXModGhpc09iamVjdC0+
dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCiB2b2lkIEpTUHJveHk6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgJKHJldmlzaW9uIDE3MTE5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1l
cmFibGVMZW5ndGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29s
IHNob3VsZFRocm93KTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxNzEx
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIEpTU3ltYm9sVGFibGVP
YmplY3Q6OmdldE93bk5vbkluZGV4CiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRl
cmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmIChpdC0+a2V5LT5pc0VtcHR5VW5pcXVlKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIShpdC0+dmFsdWUu
Z2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpKQorICAgICAgICAgICAgaWYgKCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAm
IERvbnRFbnVtKSB8fCBzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5n
ZXQoKSkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAkocmV2aXNpb24gMTcxMTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMywzMyArMjMsMzIgQEAKIAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWlu
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgY29uc3Qgc2l6ZV90IHNldFRocmVzaG9s
ZCA9IDIwOwotCiB2b2lkIFByb3BlcnR5TmFtZUFycmF5OjphZGQoU3RyaW5nSW1wbCogaWRlbnRp
ZmllcikKIHsKICAgICBBU1NFUlQoIWlkZW50aWZpZXIgfHwgaWRlbnRpZmllciA9PSBTdHJpbmdJ
bXBsOjplbXB0eSgpIHx8IGlkZW50aWZpZXItPmlzQXRvbWljKCkpOwotCi0gICAgc2l6ZV90IHNp
emUgPSBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA8
IHNldFRocmVzaG9sZCkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIgPT0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVW
ZWN0b3IoKVtpXS5pbXBsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICAgICAgbV9zZXQu
YWRkKG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV0uaW1wbCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIW1fc2V0LmFkZChpZGVudGlmaWVyKS5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgcmV0dXJuOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIHVpbnQzMl90
IGluZGV4ID0gUHJvcGVydHlOYW1lKElkZW50aWZpZXIobV92bSwgaWRlbnRpZmllcikpLmFzSW5k
ZXgoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpbmRleCwgaW5kZXggPT0gUHJvcGVydHlOYW1l
OjpOb3RBbkluZGV4IHx8IGluZGV4ID49IG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpOwog
ICAgIH0KIAorICAgIGlmIChtX2FsdGVybmF0ZVNldCAmJiBtX2FsdGVybmF0ZVNldC0+Y29udGFp
bnMoaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9zZXQtPmFkZChp
ZGVudGlmaWVyKS5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm47CisKICAgICBhZGRLbm93blVu
aXF1ZShpZGVudGlmaWVyKTsKIH0KIAordm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlv
dXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKGNvbnN0IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
ZW51bWVyYXRvcikKK3sKKyAgICBtX2FsdGVybmF0ZVNldCA9IGVudW1lcmF0b3ItPmlkZW50aWZp
ZXJTZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgJKHJldmlzaW9uIDE3MTE5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAg
IAorICAgIGNsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKICAgICBjbGFzcyBTdHJ1Y3R1
cmU7CiAgICAgY2xhc3MgU3RydWN0dXJlQ2hhaW47CiAKKyAgICBjbGFzcyBSZWZDb3VudGVkSWRl
bnRpZmllclNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFJlZkNvdW50ZWRJZGVudGlmaWVyU2V0PiB7
CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nSW1wbCosIFB0ckhh
c2g8U3RyaW5nSW1wbCo+PiBTZXQ7CisKKyAgICAgICAgYm9vbCBjb250YWlucyhTdHJpbmdJbXBs
KiBpbXBsKSBjb25zdCB7IHJldHVybiBtX3NldC5jb250YWlucyhpbXBsKTsgfQorICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0ICB7IHJldHVybiBtX3NldC5zaXplKCk7IH0KKyAgICAgICAgU2V0
OjpBZGRSZXN1bHQgYWRkKFN0cmluZ0ltcGwqIGltcGwpIHsgcmV0dXJuIG1fc2V0LmFkZChpbXBs
KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2V0IG1fc2V0OworICAgIH07CisKICAgICAv
LyBGSVhNRTogUmVuYW1lIHRvIFByb3BlcnR5TmFtZUFycmF5LgogICAgIGNsYXNzIFByb3BlcnR5
TmFtZUFycmF5RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFByb3BlcnR5TmFtZUFycmF5RGF0YT4g
ewogICAgIHB1YmxpYzoKQEAgLTUzLDI1ICs2Niw0MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5KFZNKiB2bSkKICAgICAgICAgICAgIDog
bV9kYXRhKFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3JlYXRlKCkpCisgICAgICAgICAgICAsIG1f
c2V0KGFkb3B0UmVmKG5ldyBSZWZDb3VudGVkSWRlbnRpZmllclNldCkpCiAgICAgICAgICAgICAs
IG1fdm0odm0pCiAgICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAgICAg
ICAgICwgbV9iYXNlT2JqZWN0KDApCisgICAgICAgICAgICAsIG1fcHJldmlvdXNseUVudW1lcmF0
ZWRMZW5ndGgoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgUHJvcGVydHlOYW1l
QXJyYXkoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgOiBtX2RhdGEoUHJvcGVydHlOYW1l
QXJyYXlEYXRhOjpjcmVhdGUoKSkKKyAgICAgICAgICAgICwgbV9zZXQoYWRvcHRSZWYobmV3IFJl
ZkNvdW50ZWRJZGVudGlmaWVyU2V0KSkKICAgICAgICAgICAgICwgbV92bSgmZXhlYy0+dm0oKSkK
ICAgICAgICAgICAgICwgbV9udW1DYWNoZWFibGVTbG90cygwKQogICAgICAgICAgICAgLCBtX2Jh
c2VPYmplY3QoMCkKKyAgICAgICAgICAgICwgbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCgw
KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBWTSogdm0oKSB7IHJldHVybiBtX3Zt
OyB9CiAKKyAgICAgICAgdm9pZCBhZGQodWludDMyX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChpbmRleCA8IG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYWRkKElkZW50aWZpZXI6OmZyb20obV92bSwg
aW5kZXgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgYWRkKGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIpIHsgYWRkKGlkZW50aWZpZXIuaW1wbCgpKTsgfQogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGFkZChTdHJpbmdJbXBsKik7Ci0gICAgICAgIHZvaWQgYWRkS25vd25V
bmlxdWUoU3RyaW5nSW1wbCogaWRlbnRpZmllcikgeyBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3Rv
cigpLmFwcGVuZChJZGVudGlmaWVyKG1fdm0sIGlkZW50aWZpZXIpKTsgfQorICAgICAgICB2b2lk
IGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fc2V0LT5hZGQoaWRlbnRpZmllcik7CisgICAgICAgICAgICBtX2RhdGEtPnByb3Bl
cnR5TmFtZVZlY3RvcigpLmFwcGVuZChJZGVudGlmaWVyKG1fdm0sIGlkZW50aWZpZXIpKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIElkZW50aWZpZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgeyBy
ZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXTsgfQogICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+
cHJvcGVydHlOYW1lVmVjdG9yKClbaV07IH0KQEAgLTgwLDcgKzEwOCwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXlEYXRhKiBkYXRhKCkgeyByZXR1cm4gbV9k
YXRhLmdldCgpOyB9CiAgICAgICAgIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBy
ZWxlYXNlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5yZWxlYXNlKCk7IH0KIAorICAgICAgICBSZWZD
b3VudGVkSWRlbnRpZmllclNldCogaWRlbnRpZmllclNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
LmdldCgpOyB9CisKICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGVzZSBmdW5jdGlvbnMuCisg
ICAgICAgIGJvb2wgY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVy
biAhbV9zZXQtPnNpemUoKSAmJiAoIW1fYWx0ZXJuYXRlU2V0IHx8ICFtX2FsdGVybmF0ZVNldC0+
c2l6ZSgpKTsgfQogICAgICAgICB0eXBlZGVmIFByb3BlcnR5TmFtZUFycmF5RGF0YTo6UHJvcGVy
dHlOYW1lVmVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLnNp
emUoKTsgfQogICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYmVnaW4oKTsgfQpAQCAtMTAwLDE0ICsxMzEsMTcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2Jhc2VPYmplY3QgPSBvYmplY3Q7CiAg
ICAgICAgIH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmdJ
bXBsKiwgUHRySGFzaDxTdHJpbmdJbXBsKj4+IElkZW50aWZpZXJTZXQ7CisgICAgICAgIHZvaWQg
c2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgodWludDMyX3QgbGVuZ3RoKSB7IG1fcHJldmlv
dXNseUVudW1lcmF0ZWRMZW5ndGggPSBsZW5ndGg7IH0KKyAgICAgICAgdm9pZCBzZXRQcmV2aW91
c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7
CiAKKyAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBt
X2RhdGE7Ci0gICAgICAgIElkZW50aWZpZXJTZXQgbV9zZXQ7CisgICAgICAgIFJlZlB0cjxSZWZD
b3VudGVkSWRlbnRpZmllclNldD4gbV9zZXQ7CisgICAgICAgIFJlZlB0cjxSZWZDb3VudGVkSWRl
bnRpZmllclNldD4gbV9hbHRlcm5hdGVTZXQ7CiAgICAgICAgIFZNKiBtX3ZtOwogICAgICAgICBz
aXplX3QgbV9udW1DYWNoZWFibGVTbG90czsKICAgICAgICAgSlNPYmplY3QqIG1fYmFzZU9iamVj
dDsKKyAgICAgICAgdWludDMyX3QgbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aDsKICAgICB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDE4ICsxMDksMjUgQEAgYm9vbCBSZWdFeHBPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bAogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMobW9kZSkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sYXN0SW5kZXgpOwogICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6
Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAg
ICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKICAgICBCYXNlOjpnZXRQcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK3ZvaWQgUmVn
RXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyht
b2RlKSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxh
c3RJbmRleCk7CisgICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwogc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0
ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAg
ICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEzICs3
NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhw
T2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw3
ICsxNTAsNyBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAg
aW50IHNpemUgPSB0aGlzT2JqZWN0LT5pbnRlcm5hbFZhbHVlKCktPmxlbmd0aCgpOwogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1v
ZGUpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNs
dWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1
ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCkBAIC05NTYsMTIgKzk1NiwxMiBAQCB2b2lkIFN0cnVj
dHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wga25vd25VbmlxdWUgPSAhcHJvcGVydHlOYW1l
cy5zaXplKCk7CisgICAgYm9vbCBrbm93blVuaXF1ZSA9IHByb3BlcnR5TmFtZXMuY2FuQWRkS25v
d25VbmlxdWVGb3JTdHJ1Y3R1cmUoKTsKIAogICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVu
ZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CiAgICAgICAgIEFTU0VSVChoYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpIHx8ICEoaXRl
ci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSk7Ci0gICAgICAgIGlmICghaXRlci0+a2V5LT5pc0Vt
cHR5VW5pcXVlKCkgJiYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSB8fCBtb2RlID09
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CisgICAgICAgIGlmICghaXRlci0+a2V5LT5p
c0VtcHR5VW5pcXVlKCkgJiYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSB8fCBzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSkgewogICAgICAgICAgICAgaWYgKGtu
b3duVW5pcXVlKQogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkS25vd25VbmlxdWUo
aXRlci0+a2V5KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTEyMjMsNCArMTIyMyw3OSBAQCBib29s
IENsYXNzSW5mbzo6aGFzU3RhdGljU2V0dGVyT3JSZWFkb25sCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCit2b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVy
YXRvcihWTSYgdm0sIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAg
ICBBU1NFUlQoIWlzRGljdGlvbmFyeSgpKTsKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAg
ICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOworICAgIHJhcmVEYXRhKCktPnNldENhY2hlZFN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworfQorCitKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIFN0cnVjdHVyZTo6Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1l
RW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmFyZURhdGEoKS0+Y2FjaGVkU3RydWN0dXJlUHJv
cGVydHlOYW1lRW51bWVyYXRvcigpOworfQorCit2b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkR2Vu
ZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IpCit7CisgICAgQVNTRVJUKCFpc0RpY3Rpb25hcnkoKSk7CisgICAgaWYg
KCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICByYXJl
RGF0YSgpLT5zZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVy
YXRvcik7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlOjpjYWNoZWRH
ZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmFyZURhdGEoKS0+
Y2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKworYm9vbCBTdHJ1Y3R1
cmU6OmNhbkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBU
T0RPOiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgc2luY2Ugb3ZlcnJpZGVuIHByb3BlcnR5
IG5hbWVzIGFyZSBwYXJ0IG9mIHRoZSBnZW5lcmljIHByb3BlcnR5IGxvb3AuCisgICAgaWYgKHR5
cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5DYWNo
ZUdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWNhbkNh
Y2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4g
PSBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIEFTU0VSVChzdHJ1Y3R1cmVDaGFp
bik7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNo
YWluLT5oZWFkKCk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
PmdldCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdldCgp
LT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgc3RydWN0dXJlKys7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpIGNv
bnN0Cit7CisgICAgaWYgKGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2
aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMsMTUgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVy
YXRpb25DYWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAg
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUoKTsgLy8gRGVmaW5lZCBp
biBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCisKKyAgICB2b2lkIHNldENhY2hlZFN0cnVjdHVy
ZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsK
KyAgICB2b2lkIHNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBj
YWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigp
IGNvbnN0OworICAgIGJvb2wgY2FuQ2FjaGVTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KCkgY29uc3Q7CisgICAgYm9vbCBjYW5DYWNoZUdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KCkgY29uc3Q7CisgICAgYm9vbCBjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpIGNvbnN0Owor
CiAgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYsIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIEpTU3RyaW5nKiBvYmplY3RUb1N0cmlu
Z1ZhbHVlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJh
cmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVJh
cmVEYXRhLmgiCiAKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC02OCw2ICs2OSwyOCBAQCB2b2lkIFN0cnVjdHVyZVJh
cmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fcHJldmlvdXMpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX29iamVjdFRv
U3RyaW5nVmFsdWUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2VudW1lcmF0
aW9uQ2FjaGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhY2hlZFN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2NhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKK30KKworSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3RydWN0dXJlUHJv
cGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkU3RydWN0
dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvci5nZXQoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVSYXJl
RGF0YTo6c2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0sIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBtX2NhY2hlZFN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iuc2V0KHZtLCB0aGlzLCBlbnVtZXJhdG9yKTsKK30K
KworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkR2Vu
ZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hl
ZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpOworfQorCit2b2lkIFN0cnVjdHVy
ZVJhcmVEYXRhOjpzZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0s
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBtX2NhY2hlZEdl
bmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCh2bSwgdGhpcywgZW51bWVyYXRvcik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogY2xhc3Mg
U3RydWN0dXJlOwogCkBAIC02MSw2ICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAorICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2FjaGVkU3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OworICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsK
KyAgICB2b2lkIHNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsKKyAgICB2b2lkIHNldENhY2hlZEdlbmVyaWNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKICAgICAKQEAgLTcxLDYgKzc3LDgg
QEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwogICAg
IFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdyaXRl
QmFycmllcjxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7CisgICAg
V3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNoZWRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I+IG1fY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAgICAgCiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBSZWZQdHI8V2F0Y2hwb2ludFNldD4s
IFdURjo6SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9wZXJ0eVdhdGNocG9pbnRNYXA7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFByb3BlcnR5V2F0Y2hwb2ludE1hcD4gbV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24g
MTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlUmVhY3Rpb24u
aCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRl
ICJMZXhlci5oIgpAQCAtMjU4LDYgKzI1OSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmluZzo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIG5vdEFuT2JqZWN0U3Ry
dWN0dXJlLnNldCgqdGhpcywgSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgqdGhp
cywgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOworICAgIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBHZXR0ZXJTZXR0ZXI6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhcGlXcmFwcGVyU3Ry
dWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICAgICBKU1Njb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNTY29w
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVyZTsK
ICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlOworICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlOwogICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IEpTU2NvcGVTdHJ1Y3R1cmU7CkBAIC0yOTEsNiArMjkyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsK
ICNlbmRpZgogICAgICAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOworICAg
ICAgICBTdHJvbmc8SlNDZWxsPiBlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAKICAgICAg
ICAgQXRvbWljU3RyaW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgICAgIENvbW1v
bklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcx
MjA4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzAgQEAKKzIwMTQtMDctMTcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxl
LmNvbT4KKworICAgICAgICBSZWZhY3RvciBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBm
b3ItaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDE0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHNwbGl0cyBmb3ItaW4gbG9vcHMgaW50
byB0aHJlZSBkaXN0aW5jdCBwYXJ0czoKKworICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIHRoZSBp
bmRleGVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGlu
ZyBvdmVyIHRoZSBTdHJ1Y3R1cmUgcHJvcGVydGllcyBpbiB0aGUgYmFzZSBvYmplY3QuCisgICAg
ICAgIC0gSXRlcmF0aW5nIG92ZXIgYW55IG90aGVyIGVudW1lcmFibGUgcHJvcGVydGllcyBmb3Ig
dGhhdCBvYmplY3QgYW5kIGFueSBvYmplY3RzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisgCisg
ICAgICAgIEl0IGRvZXMgdGhpcyBieSBlbWl0dGluZyB0aGVzZSBleHBsaWNpdCBsb29wcyBpbiBi
eXRlY29kZSwgdXNpbmcgYSBuZXcgc2V0IG9mIGJ5dGVjb2RlcyB0byAKKyAgICAgICAgc3VwcG9y
dCB0aGUgdmFyaW91cyBvcGVyYXRpb25zIHJlcXVpcmVkIGZvciBlYWNoIGxvb3AuCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6Z2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIp
OgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6UnVu
dGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKwogMjAxNC0wNy0wMSAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0gRGVidWdnZXJDYWxsRnJh
bWU6OnNjb3BlKCkgc2hvdWxkIHJldHVybiBhIERlYnVnZ2VyU2NvcGUuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lv
biAxNzExOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MSw2ICszODEsMzMgQEAgYm9vbCBKU0RPTVdpbmRv
dzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAordWludDMyX3Qg
SlNET01XaW5kb3c6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogb2JqZWN0KQoreworICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9N
V2luZG93Kj4ob2JqZWN0KTsKKyAgICAvLyBPbmx5IGFsbG93IHRoZSB3aW5kb3cgdG8gZW51bWVy
YXRlZCBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgorICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwo
KSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBCYXNlOjpnZXRFbnVtZXJhYmxlTGVu
Z3RoKGV4ZWMsIHRoaXNPYmplY3QpOworfQorCit2b2lkIEpTRE9NV2luZG93OjpnZXRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAg
IEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsK
KyAgICAvLyBPbmx5IGFsbG93IHRoZSB3aW5kb3cgdG8gZW51bWVyYXRlZCBieSBmcmFtZXMgaW4g
dGhlIHNhbWUgb3JpZ2luLgorICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBCYXNlOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTRE9NV2luZG93OjpnZXRHZW5lcmlj
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBK
U0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7Cisg
ICAgLy8gT25seSBhbGxvdyB0aGUgd2luZG93IHRvIGVudW1lcmF0ZWQgYnkgZnJhbWVzIGluIHRo
ZSBzYW1lIG9yaWdpbi4KKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICByZXR1cm47
CisgICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7Cit9CisKIHZvaWQgSlNET01XaW5kb3c6OmdldFByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNET01XaW5kb3cq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3QpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNiArOTcyLDkgQEAgc3ViIEdlbmVy
YXRlSGVhZGVyCiAgICAgIyBDdXN0b20gZ2V0UHJvcGVydHlOYW1lcyBmdW5jdGlvbiBleGlzdHMg
b24gRE9NV2luZG93CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
dm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9
IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBK
U0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB1aW50MzJf
dCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCopO1xu
Iik7CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzIn0gPSAxOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
YXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2Fy
cmF5LmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgUnVudGlt
ZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oZXhlYywgaSkpOwogCi0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykKKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAKICAg
ICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235107</attachid>
            <date>2014-07-17 18:45:15 -0700</date>
            <delta_ts>2014-07-18 12:35:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140717184459.patch</filename>
            <type>text/plain</type>
            <size>216265</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1MCBA
QAorMjAxNC0wNy0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwpOgor
ICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6fkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNWYWxpZCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6
OkZvckluQ29udGV4dDo6bG9jYWwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvcklu
Q29udGV4dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4
dCk6CisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hPcHRpbWlzZWRGb3JJbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpbWlzZWRGb3JJbik6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChK
U0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9k
ZTo6dHJ5R2V0Qm91bmRMb2NhbCk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdExvb3BI
ZWFkZXIpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1
Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAg
ICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50MzJMb2FkKToKKyAgICAgICAgKiBq
aXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0
X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3RvX2luZGV4X3N0cmluZyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3N0cnVjdHVy
ZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9n
ZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
bmV4dF9lbnVtZXJhdG9yX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX2lu
ZGV4X3N0cmluZyk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RG91YmxlTG9hZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdENvbnRpZ3VvdXNMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9y
YWdlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwpOiBEZWxldGVkLgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0Q29udGlndW91c0xvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVM
b2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZCk6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcGFyc2VyL05vZGVz
Lmg6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpBcmd1
bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZv
Lmg6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0
aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHA6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRFbnVtZXJhYmxlTGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAg
ICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6c2hvdWxkSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNob3VsZEV4Y2x1ZGVEb250RW51bVByb3BlcnRp
ZXMpOgorICAgICAgICAoSlNDOjpzaG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6bW9kZVRoYXRTa2lwc0pTT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25Ob25JbmRl
eFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpnZXRDbGFzc1Byb3BlcnR5TmFtZXMpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6aGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RW51bWVy
YWJsZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6cHJvcGVydHlOYW1lQXRJbmRleCk6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6aWRlbnRpZmllclNldCk6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnNldENhY2hlZFByb3RvdHlwZUNoYWluKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlND
OjpKU1Byb3h5OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6
Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N5
bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheTo6YWRkKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OnNldFByZXZp
b3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oOgorICAgICAgICAoSlNDOjpSZWZDb3VudGVkSWRlbnRpZmllclNldDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpSZWZDb3VudGVkSWRlbnRpZmllclNldDo6c2l6ZSk6CisgICAg
ICAgIChKU0M6OlJlZkNvdW50ZWRJZGVudGlmaWVyU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheTo6UHJvcGVydHlOYW1lQXJyYXkpOgorICAgICAgICAoSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheTo6YWRkKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFk
ZEtub3duVW5pcXVlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmlkZW50aWZp
ZXJTZXQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6Y2FuQWRkS25vd25Vbmlx
dWVGb3JTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJl
dmlvdXNseUVudW1lcmF0ZWRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5n
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYWNoZWRHZW5lcmljUHJv
cGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQ2FjaGVT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpjYW5DYWNoZUdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSk6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRTdHJ1
Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFy
ZURhdGE6OmNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlUmFyZURhdGE6OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6CisgICAgICAgICog
cnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGlt
ZS9WTS5oOgorCiAyMDE0LTA3LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW2Z0bG9wdF0gQ29uc3RhbnQgZm9sZCBHZXRHZXR0ZXIgYW5kIEdldFNldHRlciBp
ZiB0aGUgR2V0dGVyU2V0dGVyIGlzIGEgY29uc3RhbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCShyZXZpc2lv
biAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgSlNDYWxs
YmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob24KICAgICAgICAgICAgIGZvciAoaXRlcmF0b3Ig
aXQgPSBzdGF0aWNWYWx1ZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAg
ICAgICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBpdC0+a2V5LmdldCgpOwogICAgICAgICAgICAgICAg
IFN0YXRpY1ZhbHVlRW50cnkqIGVudHJ5ID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICAgICAg
ICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKSkpCisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAmJiAoIShl
bnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSkpCiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgbmFtZSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46OmdldE93bk5vbgogICAgICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IHN0YXRpY0Z1
bmN0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICAgICAgU3Ry
aW5nSW1wbCogbmFtZSA9IGl0LT5rZXkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgU3RhdGljRnVu
Y3Rpb25FbnRyeSogZW50cnkgPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCAo
bW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICBpZiAo
IShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8IChz
aG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSkKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODEzLDYgKzgxMyw4IEBACiAJ
CTFDQUE5QTIzMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQUE5QTIx
MThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCAqLzsgfTsK
IAkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0MTUyQkFBQTcw
MDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3MTUyQkFBQTcw
MDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9p
bmVyLmggKi87IH07CisJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5jcHAgKi87IH07CisJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCAqLzsgfTsKIAkJMkEyODI1RDAxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2Nv
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMjgy
NUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi87IH07CiAJCTJB
NDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAw
RTJBMjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OwogCQkyQTRCQjdGMzE4QTQxMTc5
MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpT
TWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTI5NjEsNiArMjk2Myw4IEBACiAJCTFD
QUE5QTIxMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxPYmplY3RQcm9maWxlckFn
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MDBCNUE0MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1N0cmluZ0pvaW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0pvaW5lci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJB
MDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAv
KiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlbGF5ZWRSZWxlYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEz
NDNGNzQxOEExNzQ4QjAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJyYXkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NTZWdtZW50ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTM0M0Y3NzE4QTE3NDlEMDAzOUIwODUgLyogR0NTZWdtZW50ZWRBcnJh
eUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NTZWdtZW50ZWRB
cnJheUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ5NzUsNiArNDk3
OSw4IEBACiAJCQkJMTQyMEJFN0ExMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLywK
IAkJCQlBN0RDQjc3OTEyRTNEOTA1MDA5MTE5NDAgLyogV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
QzJCNkQ3NTIxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCAqLywKKwkJ
CQkyQTA1QUJEMzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNw
cCAqLywKKwkJCQkyQTA1QUJENDE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNjU5Niw2ICs2NjAyLDcgQEAKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFi
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRTE2NkFE
MzYwMDAwRjVCQTMgLyogUHJvZmlsZXJFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjE5MENBRDE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkYxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
T3JpZ2luLmggaW4gSGVhZGVycyAqLywKQEAgLTc3NDMsNiArNzc1MCw3IEBACiAJCQkJODY4ODBG
MUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklU
NjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyQTA1QUJENTE5NjFE
RjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzIwQ0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFj
a0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3
QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEy
NSwxNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV93aWxsX2NhbGwiLCAi
bGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Byb2ZpbGVfZGlkX2Nh
bGwiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2VuZCIsICJs
ZW5ndGgiIDogMiB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV90eXBlc193
aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6IDQgfQorICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkiLCAibGVuZ3RoIiA6IDQgfSwK
KyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCIsICJsZW5n
dGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2hhc19nZW5lcmljX3Byb3BlcnR5IiwgImxlbmd0aCIgOiA0IH0sCisgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9nZXRfZGlyZWN0X3BuYW1lIiwgImxlbmd0aCIgOiA3IH0sCisgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IiLCAi
bGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9nZW5lcmljX3By
b3BlcnR5X2VudW1lcmF0b3IiLCAibGVuZ3RoIiA6IDUgfSwKKyAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX25leHRfZW51bWVyYXRvcl9wbmFtZSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfdG9faW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0KICAgICAg
ICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsNiArMTE4LDggQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhc2Ug
b3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6
CiAgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CkBAIC0xNTAsNiArMTUyLDEwIEBAIHZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ss
IGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAg
IGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ugb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6
CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgogICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
bDoKICAgICBjYXNlIG9wX2luOgpAQCAtMTc5LDYgKzE4NSw4IEBAIHZvaWQgY29tcHV0ZVVzZXNG
b3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3Zh
cmFyZ3M6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKICAgICAgICAgZnVuY3Rvcihjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
QEAgLTE4Niw2ICsxOTQsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9n
ZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogewogICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwpAQCAtMjk4LDYgKzMwNywxNSBAQCB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAjdW5kZWYgTExJTlRfSEVMUEVSX09Q
Q09ERVMKICAgICAgICAgcmV0dXJuOwogICAgIC8vIFRoZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRl
c3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgY2FzZSBvcF90b19pbmRleF9z
dHJpbmc6CisgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAg
IGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIGNhc2Ug
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgor
ICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIGNhc2Ug
b3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOgogICAgIGNhc2Ugb3BfbmV4dF9wbmFtZToKICAgICBj
YXNlIG9wX3Jlc29sdmVfc2NvcGU6CiAgICAgY2FzZSBvcF9zdHJjYXQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTcxMTkw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOTksNiArMTM5OSw5MSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKAogICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9uZXh0X3BuYW1lKSAtIDE7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aDogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoIik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5h
bWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkpOworICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpIC0gMTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9wZXJ0
eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5
UHJvZmlsZSA9IGl0WzRdLnUuYXJyYXlQcm9maWxlOworICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX2luZGV4ZWRfcHJvcGVydHki
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1l
KGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJv
cGVydHlOYW1lKS5kYXRhKCksIGFycmF5UHJvZmlsZSk7CisgICAgICAgICAgICBpdCArPSBPUENP
REVfTEVOR1RIKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KSAtIDE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6IHsK
KyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
YmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBp
dFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzRdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgIm9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5h
bWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xF
TkdUSChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KSAtIDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7CisgICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2Ug
PSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10u
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiKTsKKyAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSk7CisgICAg
ICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KSAtIDE7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9kaXJl
Y3RfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBwcm9w
ZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFs0
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzVdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGl0WzZdLnUucHJvZmlsZTsK
KyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
Im9wX2dldF9kaXJlY3RfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShi
YXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGluZGV4KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9yKS5kYXRhKCksIHByb2Zp
bGUpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZGlyZWN0X3BuYW1l
KSAtIDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBpbnQgZHN0
ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IiKTsKKyAgICAgICAgICAg
IG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKGJhc2UpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJh
dG9yOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAg
ICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0g
aXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHN0cnVjdHVyZUVudW1lcmF0b3IgPSBp
dFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3Qp
LmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGxlbmd0aCku
ZGF0YSgpLCByZWdpc3Rlck5hbWUoc3RydWN0dXJlRW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVy
YXRvcikgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZW51bWVyYXRvciA9IGl0WzJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX25leHRfZW51bWVy
YXRvcl9wbmFtZSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJlZ2lz
dGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdU
SChvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOiB7CisgICAgICAgICAgICBp
bnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4ID0gaXRbMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAib3BfdG9faW5kZXhfc3RyaW5nIik7CisgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfdG9faW5kZXhfc3Ry
aW5nKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X3B1c2hfd2l0aF9zY29wZTogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uT3BBbmRSZWdpc3Rlck9wZXJhbmQob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJwdXNoX3dpdGhfc2NvcGUiLCByMCk7CkBAIC0xNzk5LDYgKzE4
ODQsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51Lm9wZXJhbmQgPSBwY1tqXS51Lm9wZXJhbmQ7CiAg
ICAgICAgIH0KICAgICAgICAgc3dpdGNoIChwY1swXS51Lm9wY29kZSkgeworICAgICAgICBjYXNl
IG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxl
SW5kZXggPSBwY1tvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fYXJyYXlQ
cm9maWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7CisKKyAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJy
YXlQcm9maWxlSW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6
CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKQEAgLTE4MDksNiArMTkwMSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5k
ZXhdOwogICAgICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDogewogICAgICAg
ICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1twY1tvcExlbmd0
aCAtIDFdLnUub3BlcmFuZF07CiAgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29k
ZU9mZnNldCA9PSAtMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTcxMTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzYsMTggKzE0MzYsMzAgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRBcgogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5KQogewogICAgIGZvciAoc2l6ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNr
LnNpemUoKTsgaSA+IDA7IGktLSkgewotICAgICAgICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBt
X2ZvckluQ29udGV4dFN0YWNrW2kgLSAxXTsKLSAgICAgICAgaWYgKGNvbnRleHQucHJvcGVydHlS
ZWdpc3RlciA9PSBwcm9wZXJ0eSkgewotICAgICAgICAgICAgZW1pdE9wY29kZShvcF9nZXRfYnlf
cG5hbWUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7Ci0gICAg
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwotICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbnRleHQuZXhwZWN0ZWRTdWJzY3JpcHRSZWdp
c3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4
dC5pdGVyUmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGNvbnRleHQuaW5kZXhSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZHN0OworICAgICAgICBGb3JJbkNvbnRleHQqIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNr
W2kgLSAxXS5nZXQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxvY2FsKCkgIT0gcHJvcGVydHkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWNvbnRleHQtPmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChjb250ZXh0LT50eXBlKCkgPT0g
Rm9ySW5Db250ZXh0OjpJbmRleGVkRm9ySW5Db250ZXh0VHlwZSkgeworICAgICAgICAgICAgcHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxJbmRleGVkRm9ySW5Db250ZXh0Kj4oY29udGV4dCktPmluZGV4
KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChjb250
ZXh0LT50eXBlKCkgPT0gRm9ySW5Db250ZXh0OjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBlKTsK
KyAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBzdHJ1Y3R1cmVDb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4oY29udGV4dCk7CisgICAgICAgIFVubGlua2Vk
VmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2RpcmVjdF9w
bmFtZSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzdHJ1Y3R1cmVDb250ZXh0LT5pbmRleCgpLT5pbmRleCgpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKS0+aW5kZXgo
KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKKyAgICAgICAgcmV0
dXJuIGRzdDsKICAgICB9CisKICAgICBVbmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUg
PSBuZXdBcnJheVByb2ZpbGUoKTsKICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0g
ZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9ieV92YWwpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChraWxsKGRzdCkpOwpAQCAtMjE2MSw3ICsyMTczLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAKICAgICAgICAgVmVjdG9yPENvbnRyb2xG
bG93Q29udGV4dD4gc2F2ZWRTY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFN3aXRj
aEluZm8+IHNhdmVkU3dpdGNoQ29udGV4dFN0YWNrOwotICAgICAgICBWZWN0b3I8Rm9ySW5Db250
ZXh0PiBzYXZlZEZvckluQ29udGV4dFN0YWNrOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEZvckluQ29udGV4dD4+IHNhdmVkRm9ySW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3Rv
cjxUcnlDb250ZXh0PiBwb3BwZWRUcnlDb250ZXh0czsKICAgICAgICAgTGFiZWxTY29wZVN0b3Jl
IHNhdmVkTGFiZWxTY29wZXM7CiAgICAgICAgIHdoaWxlICh0b3BTY29wZSA+IGJvdHRvbVNjb3Bl
ICYmIHRvcFNjb3BlLT5pc0ZpbmFsbHlCbG9jaykgewpAQCAtMjE4OCw3ICsyMjAwLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAgICAgICAgIG1f
c3dpdGNoQ29udGV4dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4dC5zd2l0Y2hDb250ZXh0U3Rh
Y2tTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwRm9ySW5zKSB7Ci0g
ICAgICAgICAgICAgICAgc2F2ZWRGb3JJbkNvbnRleHRTdGFjayA9IG1fZm9ySW5Db250ZXh0U3Rh
Y2s7CisgICAgICAgICAgICAgICAgc2F2ZWRGb3JJbkNvbnRleHRTdGFjay5zd2FwKG1fZm9ySW5D
b250ZXh0U3RhY2spOwogICAgICAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2suc2hyaW5r
KGZpbmFsbHlDb250ZXh0LmZvckluQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoZmxpcFRyaWVzKSB7CkBAIC0yMjI4LDcgKzIyNDAsNyBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjCiAgICAgICAgICAgICBpZiAoZmxpcFN3
aXRjaGVzKQogICAgICAgICAgICAgICAgIG1fc3dpdGNoQ29udGV4dFN0YWNrID0gc2F2ZWRTd2l0
Y2hDb250ZXh0U3RhY2s7CiAgICAgICAgICAgICBpZiAoZmxpcEZvcklucykKLSAgICAgICAgICAg
ICAgICBtX2ZvckluQ29udGV4dFN0YWNrID0gc2F2ZWRGb3JJbkNvbnRleHRTdGFjazsKKyAgICAg
ICAgICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNrLnN3YXAoc2F2ZWRGb3JJbkNvbnRleHRTdGFj
ayk7CiAgICAgICAgICAgICBpZiAoZmxpcFRyaWVzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KG1fdHJ5Q29udGV4dFN0YWNrLnNpemUoKSA9PSBmaW5hbGx5Q29udGV4dC50cnlDb250ZXh0U3Rh
Y2tTaXplKTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwb3BwZWRUcnlDb250
ZXh0cy5zaXplKCk7IGktLTspIHsKQEAgLTI1NjEsNCArMjU3MywxMjEgQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKAogICAgIGVtaXRMYWJlbChzY29wZS0+YnJlYWtU
YXJnZXQoKSk7CiB9CiAKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51
bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpCit7CisgICAg
ZW1pdE9wY29kZShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5p
bmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2hh
c19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFtZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRz
dDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNJbmRleGVkUHJv
cGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3
QXJyYXlQcm9maWxlKCk7CisgICAgZW1pdE9wY29kZShvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChw
cm9wZXJ0eU5hbWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcnJheVBy
b2ZpbGUpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SGFzU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3Ip
Cit7CisgICAgZW1pdE9wY29kZShvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoYmFzZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFt
ZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmluZGV4
KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoKQoreworICAgIGVtaXRPcGNvZGUob3Bf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5k
ZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxlbmd0aC0+aW5kZXgoKSk7CisgICAg
cmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRH
ZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogbGVuZ3RoLCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yKQor
eworICAgIGVtaXRPcGNvZGUob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChsZW5n
dGgtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdHJ1Y3R1cmVFbnVtZXJh
dG9yLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCit7CisgICAgZW1p
dE9wY29kZShvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChlbnVtZXJhdG9y
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgtPmluZGV4KCkpOwor
ICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGluZGV4KQoreworICAg
IGVtaXRPcGNvZGUob3BfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgtPmluZGV4
KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJ
bmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBp
bmRleFJlZ2lzdGVyKQoreworICAgIGlmICghbG9jYWxSZWdpc3RlcikKKyAgICAgICAgcmV0dXJu
OworICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SW5kZXhl
ZEZvckluQ29udGV4dD4obG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3RlcikpOworfQorCit2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2Nh
bFJlZ2lzdGVyKQoreworICAgIGlmICghbG9jYWxSZWdpc3RlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJl
Z2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ+KGxvY2FsUmVnaXN0ZXIsIGlu
ZGV4UmVnaXN0ZXIsIHByb3BlcnR5UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlcikpOworfQor
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVy
SUQqIGxvY2FsUmVnaXN0ZXIpCit7CisgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChSZWdpc3Rl
cklEKiBsb2NhbFJlZ2lzdGVyKQoreworICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9y
SW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCdzIHN1ZmZpY2llbnRseSAK
KyAgICAvLyByYXJlIHRvIGVpdGhlciAoMSkgcmUtYXNzaWduIHRoZSBsb29wIGl0ZXJhdGlvbiB2
YXJpYWJsZSBpbiB0aGUgYm9keSBvZiB0aGUgbG9vcAorICAgIC8vIG9yICgyKSBjYXB0dXJlIHRo
ZSBsb29wIHRoZSBpdGVyYXRpb24gdmFyaWFibGUuIEJlY2F1c2Ugb2YgdGhlIHJhcml0eSBvZiBl
aXRoZXIgb2YgCisgICAgLy8gdGhlc2Ugc2l0dWF0aW9ucywgaXQncyBva2F5IHRvIHBvaXNvbiB0
aGUgcmVtYWluZGVyIG9mIHRoZSBsb29wIGJvZHkgd2hlbmV2ZXIgd2UgZW5jb3VudGVyIHRoZW0u
CisgICAgZm9yIChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpID4gMDsg
aS0tKSB7CisgICAgICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3Rh
Y2tbaSAtIDFdLmdldCgpOworICAgICAgICBpZiAoY29udGV4dC0+bG9jYWwoKSAhPSBsb2NhbFJl
Z2lzdGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnRleHQtPmludmFsaWRh
dGUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTcs
MTEgKzk3LDc2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5h
bGx5Q29udGV4dDsKICAgICB9OwogCi0gICAgc3RydWN0IEZvckluQ29udGV4dCB7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdFJlZ2lzdGVyOwotICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gaXRlclJlZ2lzdGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gaW5kZXhSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5UmVn
aXN0ZXI7CisgICAgY2xhc3MgRm9ySW5Db250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZv
ckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBtX2xv
Y2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9pc1ZhbGlkKHRydWUp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWYWxpZDsgfQorICAgICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNWYWxp
ZCA9IGZhbHNlOyB9CisKKyAgICAgICAgZW51bSBGb3JJbkNvbnRleHRUeXBlIHsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZUZvckluQ29udGV4dFR5cGUsCisgICAgICAgICAgICBJbmRleGVkRm9ySW5D
b250ZXh0VHlwZQorICAgICAgICB9OworICAgICAgICB2aXJ0dWFsIEZvckluQ29udGV4dFR5cGUg
dHlwZSgpIGNvbnN0ID0gMDsKKworICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxSZWdpc3Rlci5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgYm9vbCBtX2lzVmFs
aWQ7CisgICAgfTsKKworICAgIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dCA6IHB1YmxpYyBG
b3JJbkNvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0
KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJl
Z2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3Rl
cikKKyAgICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAg
ICAsIG1faW5kZXhSZWdpc3RlcihpbmRleFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX3Byb3Bl
cnR5UmVnaXN0ZXIocHJvcGVydHlSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9lbnVtZXJhdG9y
UmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lzdGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB2aXJ0dWFsIEZvckluQ29udGV4dFR5cGUgdHlwZSgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBlOworICAgICAgICB9CisK
KyAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0
ZXIuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBtX3Byb3BlcnR5UmVnaXN0ZXIuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVy
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvclJlZ2lzdGVyLmdldCgpOyB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOwor
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eVJlZ2lzdGVyOworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yUmVnaXN0ZXI7CisgICAgfTsKKworICAgIGNs
YXNzIEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEluZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlcikKKyAgICAgICAgICAgIDogRm9ySW5Db250ZXh0
KGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRleFJlZ2lz
dGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIEZvckluQ29udGV4
dFR5cGUgdHlwZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBJbmRleGVk
Rm9ySW5Db250ZXh0VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQqIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOwogICAgIH07CiAK
ICAgICBzdHJ1Y3QgVHJ5RGF0YSB7CkBAIC00MzEsNiArNDk2LDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlOYW1lcyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIExh
YmVsKiBicmVha1RhcmdldCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXh0UHJvcGVydHlO
YW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVn
aXN0ZXJJRCogc2l6ZSwgUmVnaXN0ZXJJRCogaXRlciwgTGFiZWwqIHRhcmdldCk7CiAKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRv
cik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNHZW5lcmljUHJvcGVydHkoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVn
aXN0ZXJJRCogbGVuZ3RoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEdlbmVyaWNQcm9w
ZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBsZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpOworICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
aW5kZXgpOworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsK
IAogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBl
bWl0dGVkLgpAQCAtNDYwLDE2ICs1MzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgcHVzaEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7CiAgICAg
ICAgIHZvaWQgcG9wRmluYWxseUNvbnRleHQoKTsKIAotICAgICAgICB2b2lkIHB1c2hPcHRpbWlz
ZWRGb3JJbihSZWdpc3RlcklEKiBleHBlY3RlZFN1YnNjcmlwdCwgUmVnaXN0ZXJJRCogaXRlciwg
UmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0ID0geyBleHBlY3RlZFN1YnNjcmlw
dCwgaXRlciwgaW5kZXgsIHByb3BlcnR5UmVnaXN0ZXIgfTsKLSAgICAgICAgICAgIG1fZm9ySW5D
b250ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBw
b3BPcHRpbWlzZWRGb3JJbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0
U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRG
b3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAg
IHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAgICB2
b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwor
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIGludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChSZWdpc3RlcklEKiBs
b2NhbCk7CiAKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1RhcmdldChjb25zdCBJZGVudGlm
aWVyJik7CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVUYXJnZXQoY29uc3QgSWRlbnRp
ZmllciYpOwpAQCAtNjY4LDcgKzczNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFZl
Y3RvcjxDb250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Njb3Bl
Q29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250ZXh0
U3RhY2s7Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9ySW5Db250ZXh0U3RhY2s7
CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9mb3JJbkNv
bnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4dFN0YWNr
OwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29uc3QgRGVj
b25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUw
NSwxMiArMTUwNSwxNCBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRC
CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUocmVzdWx0LmdldCgpLCBsb2NhbC5nZXQo
KSk7CiAgICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCByZXN1
bHQuZ2V0KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVz
KFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkp
OwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCByZXN1bHQuZ2V0
KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2Nh
bChsb2NhbC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5l
ZWRlZChkc3QsIHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJl
Z2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxv
Y2FsLmdldCgpLCBsb2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVz
KFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkp
OworICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2Fs
LmdldCgpKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVl
ZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE1NDAsMTEgKzE1NDIsMTMgQEAgUmVnaXN0
ZXJJRCogQXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAgICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5nZXQoKSwgbV9yaWdodCk7CiAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHRlbXBEc3QuZ2V0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2Nh
bC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHRlbXBEc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3Vs
dCA9IGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7CisgICAgICAgIGdl
bmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1
bHQpOwogICAgIH0KIApAQCAtMTkyMCwxMDIgKzE5MjQsMjE3IEBAIHZvaWQgRm9yTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEZvckluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9p
ZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCitSZWdpc3RlcklEKiBGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3Bl
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0KLSAgICBpZiAo
IW1fbGV4cHItPmlzQXNzaWdubWVudExvY2F0aW9uKCkpIHsKLSAgICAgICAgZW1pdFRocm93UmVm
ZXJlbmNlRXJyb3IoZ2VuZXJhdG9yLCAiTGVmdCBzaWRlIG9mIGZvci1pbiBzdGF0ZW1lbnQgaXMg
bm90IGEgcmVmZXJlbmNlLiIpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fbGV4cHItPmlz
UmVzb2x2ZU5vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRp
Y19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKKyAgICAgICAgTG9j
YWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAobG9jYWwuaXND
YXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBs
b2NhbC5nZXQoKTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhl
Y3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNl
dCgpKTsKKyAgICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgeworICAgICAg
ICBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8
RGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIpOworICAgICAgICBhdXRvIGJp
bmRpbmcgPSBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlz
QmluZGluZ05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJh
dG9yLmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGkgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNp
emUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4
cGVjdGVkU3Vic2NyaXB0OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyID0gZ2VuZXJhdG9y
LmVtaXRHZXRQcm9wZXJ0eU5hbWVzKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQo
KSwgaS5nZXQoKSwgc2l6ZS5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgIGdlbmVy
YXRvci5lbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGF1dG8gc2lt
cGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgp
OworICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAg
IGlmIChsb2NhbC5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIGxvY2FsLmdldCgpOworICAgIH0KIAotICAgIFJlZlB0cjxMYWJlbD4gbG9v
cFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChs
b29wU3RhcnQuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KIAotICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKLSAgICBib29s
IG9wdGltaXplZEZvcmluQWNjZXNzID0gZmFsc2U7Cit2b2lkIEZvckluTm9kZTo6ZW1pdExvb3BI
ZWFkZXIoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcHJvcGVydHlO
YW1lKQorewogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIp
LT5pZGVudGlmaWVyKCk7CiAgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlk
ZW50KTsKLSAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSkgewotICAgICAgICAgICAgcHJvcGVydHlO
YW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAgIGlmIChsb2NhbC5nZXQoKSkK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9k
ZSgpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNj
b3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBpZGVudCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dFB1dFRvU2NvcGUoc2NvcGUsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIGdlbmVyYXRvci5pc1N0cmlj
dE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZXhwZWN0ZWRTdWJzY3Jp
cHQuZ2V0KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGltaXNlZEZvckluKGV4
cGVjdGVkU3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdldCgpLCBsb2NhbC5nZXQoKSk7
Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7CiAgICAgICAgIH0KLSAg
ICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAobV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSkgewogICAg
ICAgICBEb3RBY2Nlc3Nvck5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nv
ck5vZGUqPihtX2xleHByKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBhc3Np
Z25Ob2RlLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9w
ZXJ0eU5hbWU7CiAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
YXNzaWduTm9kZS0+YmFzZSgpKTsKLQogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWdu
Tm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBp
ZGVudCwgcHJvcGVydHlOYW1lKTsKLSAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzQnJhY2tldEFj
Y2Vzc29yTm9kZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHIt
PmlzQnJhY2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUq
IGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7
Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CiAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJh
c2UoKSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShhc3NpZ25Ob2RlLT5zdWJzY3JpcHQoKSk7Ci0gICAgICAgIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEV4cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90
U3RhcnQoKSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0
UHV0QnlWYWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9u
Tm9kZSgpKSB7CiAgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqIGFzc2lnbk5v
ZGUgPSBzdGF0aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKj4obV9sZXhwcik7
CiAgICAgICAgIGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJpbmRpbmdzKCk7Ci0gICAgICAg
IGlmIChiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2ltcGxl
QmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7Ci0gICAgICAgICAg
ICBJZGVudGlmaWVyIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAg
ICAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICAg
ICAgcHJvcGVydHlOYW1lID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIEkgZW1pdCBleHByZXNzaW9uIGluZm8gaGVyZT8KLSAgICAgICAgICAgIGlmICghcHJvcGVy
dHlOYW1lIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSB8fCBnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNCaW5kaW5n
OwotICAgICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2VuZXJh
dG9yLnB1c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQo
KSwgaS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZvcmluQWNj
ZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gY29tcGxldGVkU2ltcGxlQmluZGluZzsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgZ2VuZXJpY0JpbmRpbmc6Ci0gICAgICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcHJvdGVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIWJpbmRpbmct
PmlzQmluZGluZ05vZGUoKSkgeworICAgICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3MoKS0+
YmluZFZhbHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJp
bmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
c2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICBMb2NhbCBsb2NhbCA9IGdl
bmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmICghbG9jYWwuZ2V0KCkgfHwgbG9jYWwu
aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpLT5iaW5k
VmFsdWUoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIGNvbXBsZXRlZFNpbXBsZUJpbmRpbmc6Ci0gICAgICAgIDsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1l
bnQpOworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBpZiAob3B0
aW1pemVkRm9yaW5BY2Nlc3MpCi0gICAgICAgIGdlbmVyYXRvci5wb3BPcHRpbWlzZWRGb3JJbigp
Owordm9pZCBGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKCFtX2xleHByLT5pc0Fz
c2lnbm1lbnRMb2NhdGlvbigpKSB7CisgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdl
bmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5j
ZS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxMYWJlbD4gZW5kID0g
Z2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5leHRQcm9wZXJ0eU5hbWUocHJv
cGVydHlOYW1lLCBiYXNlLmdldCgpLCBpLmdldCgpLCBzaXplLmdldCgpLCBpdGVyLmdldCgpLCBs
b29wU3RhcnQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkp
OwotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworCisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGxlbmd0aDsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RydWN0
dXJlRW51bWVyYXRvcjsKKyAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9leHBy
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlzLT50cnlHZXRCb3VuZExvY2Fs
KGdlbmVyYXRvcik7CisKKyAgICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AuCisgICAgeworICAg
ICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxT
Y29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOworCisgICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3Bl
cnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhp
bnQoKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVt
aXRFcXVhbGl0eU9wKG9wX2xlc3MsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwg
bGVuZ3RoLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQu
Z2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0luZGV4ZWRQ
cm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUu
Z2V0KCksIGkuZ2V0KCkpOworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3Is
IHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hJbmRleGVkRm9y
SW5TY29wZShsb2NhbC5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEluZGV4ZWRGb3JJblNj
b3BlKGxvY2FsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworCisgICAgICAgIGdl
bmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29w
RW5kLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBTdHJ1Y3R1cmUgcHJvcGVydHkgbG9vcC4KKyAg
ICB7CisgICAgICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29w
ZShMYWJlbFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBn
ZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wRW5kID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7CisKKyAgICAgICAgc3RydWN0dXJlRW51bWVyYXRvciA9IGdlbmVy
YXRvci5lbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgYmFzZS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBq
c051bWJlcigwKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1l
cmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmVFbnVtZXJhdG9y
LmdldCgpLCBpLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFy
dC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251
bGwsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzU3RydWN0dXJlUHJvcGVydHkocmVzdWx0LmdldCgp
LCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworCisgICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdl
bmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IucHVzaFN0
cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQo
KSwgc3RydWN0dXJlRW51bWVyYXRvci5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcFN0cnVjdHVyZUZvcklu
U2NvcGUobG9jYWwuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhpLmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShwcm9wZXJ0
eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgCisgICAgICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChs
b29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBHZW5lcmljIHByb3BlcnR5IGxvb3AuCisg
ICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2Nv
cGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0g
Z2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBnZW5lcmlj
RW51bWVyYXRvciA9IGdlbmVyYXRvci5lbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGxlbmd0aC5nZXQoKSwgc3RydWN0
dXJlRW51bWVyYXRvci5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2Vu
ZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOwor
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0
eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmljRW51bWVyYXRvci5nZXQoKSwgaS5nZXQo
KSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFVu
YXJ5T3Aob3BfZXFfbnVsbCwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUu
Z2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBs
b29wRW5kLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5n
ZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICB0aGlz
LT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworCisgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEluYyhpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRv
clByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyaWNFbnVtZXJhdG9yLmdldCgp
LCBpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHJl
c3VsdC5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIYXNHZW5lcmljUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBwcm9w
ZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0
LmdldCgpLCBsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChl
bmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOwor
ICAgIH0KKworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50
LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdl
bmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKK30KKwordm9pZCBGb3JJbk5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7
CisgICAgdGhpcy0+ZW1pdE11bHRpTG9vcEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0KTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvck9mTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNyArOTQsNyBAQCBwcml2YXRlOgogCiAgICAgSlNTY29wZSoganNTY29wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NvcGUuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU09iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9zY29wZTsK
ICAgICBXcml0ZUJhcnJpZXI8RGVidWdnZXJTY29wZT4gbV9uZXh0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzExOTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlKSBcCiAgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVy
Zmx5KSBcCiAgICAgbWFjcm8oSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpIFwKKyAgICBtYWNy
byhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lcykgXAogICAgIG1h
Y3JvKE5hbWVkUHJvcGVydGllcykgXAogICAgIG1hY3JvKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMp
IFwKICAgICBtYWNybyhJbmRleGVkRG91YmxlUHJvcGVydGllcykgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc3LDEz
ICsxNzc3LDUxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEluOgorICAgIGNhc2UgSW46
IHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkg
ZGVmaW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKICAgICAgICAgLy8gdmFsdWUgaW5m
b3JtYXRpb24uCiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNs
b2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7
CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAorICAgIGNhc2UgR2V0RW51bWVy
YWJsZUxlbmd0aDogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7Cisg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXREaXJl
Y3RQbmFtZTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjog
eworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRHbG9i
YWxWYXI6CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxODMsNiArMzE4Myw4MiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9pbik7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIG9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aDogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRFbnVtZXJhYmxlTGVuZ3Ro
LCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNf
cHJvcGVydHk6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSGFzR2VuZXJpY1Byb3BlcnR5LCAKKyAg
ICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aGFzX2dlbmVyaWNfcHJvcGVydHkpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEhhc1N0cnVjdHVyZVBy
b3BlcnR5LCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSkpOwor
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAg
ICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJy
YXlNb2RlQ29uc2lkZXJpbmdTbG93UGF0aChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVBy
b2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBOb2RlKiBoYXNJdGVyYWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChIYXNJbmRleGVkUHJv
cGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBiYXNlLCBwcm9wZXJ0eSk7CisgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLCBoYXNJdGVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hh
c19pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZ2V0X2Rp
cmVjdF9wbmFtZTogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBO
b2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSog
aW5kZXggPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpKTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKTsKKworICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIAorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlv
bikpKTsKKworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2RpcmVjdF9wbmFtZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVy
YXRvcjogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0
b3IsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLCBhZGRUb0dyYXBoKEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IsIAorICAgICAgICAg
ICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkpLAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOiB7CisgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dy
YXBoKE5leHRFbnVtZXJhdG9yUG5hbWUsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAg
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKSk7
CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKKyAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFk
ZFRvR3JhcGgoVG9JbmRleFN0cmluZywgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmluZyk7CisgICAgICAgIH0KKwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgLy8gUGFyc2UgZmFpbGVkISBUaGlzIHNob3VsZCBub3QgaGFwcGVu
IGJlY2F1c2UgdGhlIGNhcGFiaWxpdGllcyBjaGVja2VyCiAgICAgICAgICAgICAvLyBzaG91bGQg
aGF2ZSBjYXVnaHQgaXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMs
MTUgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ug
b3Bfc3dpdGNoX2NoYXI6CiAgICAgY2FzZSBvcF9pbjoKICAgICBjYXNlIG9wX2dldF9mcm9tX3Nj
b3BlOgorICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIGNhc2Ugb3BfaGFz
X2dlbmVyaWNfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Ogor
ICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfZGlyZWN0
X3BuYW1lOgorICAgIGNhc2Ugb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yOgor
ICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9w
X25leHRfZW51bWVyYXRvcl9wbmFtZToKKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAg
ICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX3B1dF90b19z
Y29wZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNiArMTQ1LDkxIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6
CisgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNlIEdldEVudW1lcmFibGVM
ZW5ndGg6CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2Fz
ZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6
IHsKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICByZWFk
KEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAg
ICAgICAgcmVhZChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTog
eworICAgICAgICByZWFkKEpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICByZWFkKEpTT2Jq
ZWN0X2J1dHRlcmZseSk7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAg
ICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVh
ZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJ
bnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29ybGQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAg
ICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAg
ICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJ
bmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3Js
ZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91
bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAg
ICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgcmVhZChBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAg
ICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAg
d3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgY2FzZSBBcml0aFN1YjoKICAgICBjYXNl
IEFyaXRoTmVnYXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3LDExIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2Ug
R2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICBjYXNl
IEdldEVudW1lcmFibGVMZW5ndGg6CisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6CisgICAg
Y2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToK
KyAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBj
YXNlIENyZWF0ZUFjdGl2YXRpb246CkBAIC0yMDksNiArMjE0LDEwIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoK
ICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgor
ICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgR2V0R2Vu
ZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6Cisg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMwLDYg
KzEwMzAsNjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBvYnNlcnZlVXNlS2luZE9uTm9k
ZTxTdHJpbmdVc2U+KG5vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAgICAgICAgICBmaXhFZGdl
PFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgICAgICAgICAgZml4
RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICAgICAgbm9kZS0+
c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsIG5v
ZGUtPmZsYWdzKCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYmxlc3NBcnJheU9wZXJh
dGlvbihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMygpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgICAg
ICBFZGdlJiBiYXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAg
IEVkZ2UmIHByb3BlcnR5ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAg
ICAgIEVkZ2UmIGluZGV4ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAg
ICAgIEVkZ2UmIGVudW1lcmF0b3IgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpOworICAg
ICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihwcm9wZXJ0eSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+
KGluZGV4KTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihlbnVtZXJhdG9yKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRH
ZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTmV4
dEVudW1lcmF0b3JQbmFtZTogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBU
b0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMg
aGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5l
dyBvcGNvZGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAxLDYgKzEwMDEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgYm9vbCBoYXNI
ZWFwUHJlZGljdGlvbigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAg
Y2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNl
IEdldEJ5SWRGbHVzaDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKQEAgLTEyNjEsNiArMTI2Miw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAg
ICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDYgKzI4
OCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogV3JpdGUgYmFy
cmllcnMgISAqL1wKICAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgXAorICAgIC8qIEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAorICAgIG1hY3Jv
KEdldEVudW1lcmFibGVMZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKEhhc1N0cnVjdHVyZVByb3BlcnR5LCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhIYXNHZW5lcmljUHJvcGVy
dHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKEdl
dERpcmVjdFBuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhHZXRHZW5lcmljUHJvcGVy
dHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFj
cm8oTmV4dEVudW1lcmF0b3JQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykg
XAorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKIAogLy8gVGhpcyBlbnVt
IGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlw
ZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRo
ZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgw
LDYgKzE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2Fm
ZToKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zm
c2V0OgorICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6CiAg
ICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CkBAIC01NTAs
NiArNTUxLDM5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBHZXRF
bnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
U3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
SGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0
b3I6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE5leHRFbnVtZXJhdG9y
UG5hbWU6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8
IFNwZWNPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICNpZm5kZWYgTkRF
QlVHCiAgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1
cm4gYW55dGhpbmcuCiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE3MTE5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTQsNiArMjU0LDE1IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIEludDUyUmVwOgogICAgIGNhc2UgR2V0R2V0dGVyOgogICAg
IGNhc2UgR2V0U2V0dGVyOgorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNl
IEhhc0dlbmVyaWNQcm9wZXJ0eToKKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAg
IGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CisgICAg
Y2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2FzZSBHZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZToKKyAgICBj
YXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBOYXRp
dmVDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJHZXR0ZXJT
ZXR0ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQ1NDgsNiArNDU0OSwyNDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhp
cyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRFbnVt
ZXJhYmxlTGVuZ3RoLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCkpOworICAgICAgICBpbnQzMlJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNH
ZW5lcmljUHJvcGVydHk6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7
CisgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICBHUFJSZWcgYmFz
ZVBheWxvYWRHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VUYWdH
UFIgPSBiYXNlLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJl
c3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRU
YWcuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5
bG9hZEdQUiwgYmFzZVRhZ0dQUiwgYmFzZVBheWxvYWRHUFIsIHByb3BlcnR5LmdwcigpKTsKKyAg
ICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJhc2VUYWdHUFIgPSBiYXNlLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcg
YmFzZVBheWxvYWRHUFIgPSBiYXNlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXls
b2FkLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigp
OworCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUGF5
bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIsIAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAg
ICAgbW92ZVRydWVUbyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1
cmUsIHRoaXMsIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSLCBiYXNlVGFnR1BSLCBiYXNlUGF5bG9hZEdQUiwgcHJvcGVydHlHUFIpKTsK
KyAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0MiByZXN1
bHRUYWcodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIEFT
U0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAg
ICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNo
LmZwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwor
CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
aW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRjaEZQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgc2NyYXRjaEZQUiwgc2NyYXRjaEZQUikpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOiB7CisgICAgICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5LCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGJhc2VHUFIsIGluZGV4
R1BSKSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYm9v
bGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKKyAgICAgICAgRWRnZSYgYmFzZUVkZ2UgPSBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICBFZGdlJiBwcm9wZXJ0
eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICBFZGdl
JiBpbmRleEVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAg
ICBFZGdlJiBlbnVtZXJhdG9yRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
Myk7CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5RWRn
ZSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2Up
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVudW1lcmF0
b3JFZGdlKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAg
IEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgaW5k
ZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVt
ZXJhdG9yLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVB
Y2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCAKKyAg
ICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKKworICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
bV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VHUFIsIHNjcmF0Y2hH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFRhZ0dQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KGJhc2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgLy8gT3Ro
ZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAg
ICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LnN1
YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc2lnbkV4dGVu
ZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdEJ1dHRlcmZseVByb3BlcnR5ID0gLTIgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsgCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0QnV0dGVyZmx5UHJvcGVydHkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0QnV0dGVy
Zmx5UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRQYXlsb2FkR1BSKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHNjcmF0Y2hHUFIpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0
VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNlR1BSLCBzY3JhdGNoR1BSLCBwcm9wZXJ0eUdQ
UikpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgbGVu
Z3RoKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFN0cnVj
dHVyZVByb3BlcnR5RW51bWVyYXRvciwgcmVzdWx0R1BSLCBiYXNlLmdwcigpLCBsZW5ndGguZ3By
KCkpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBsZW5ndGgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxk
MygpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3Is
IHJlc3VsdEdQUiwgYmFzZS5ncHIoKSwgbGVuZ3RoLmdwcigpLCBlbnVtZXJhdG9yLmdwcigpKTsK
KyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVj
dWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBH
UFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRU
YWcodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdw
cigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCAKKyAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNMZW5n
dGhPZmZzZXQoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAg
ICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0
UGF5bG9hZEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFBh
eWxvYWRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFRhZ0dQUik7CisKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVG9JbmRleFN0
cmluZzogeworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgcmVzdWx0R1BS
LCBpbmRleC5ncHIoKSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6IHsKICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVl
UmVncygpLCAwKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1
ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKIApAQCAtNDU4Miw2ICs0NTgzLDIzNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BS
UmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEVudW1lcmFibGVMZW5ndGgsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSk7Cisg
ICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIHByb3BlcnR5Lmdwcigp
KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1
cmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICAg
ICAgc2NyYXRjaEdQUiwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVt
ZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKTsKKworICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdEdQUik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJlc3Vs
dEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwor
ICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBBU1NFUlQo
ISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGlu
ZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAg
ICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCksIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQsIHNjcmF0Y2hGUFIsIHNjcmF0Y2hGUFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAg
QVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKKworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BSKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHJlc3VsdEdQUiwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgIEVkZ2UmIGJhc2VFZGdlID0g
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgRWRnZSYgcHJvcGVy
dHlFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAgRWRn
ZSYgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAg
ICAgRWRnZSYgZW51bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDMpOworCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2Up
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVk
Z2UpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgaW5kZXhFZGdl
KTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBlbnVtZXJh
dG9yRWRnZSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
KworICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1
Y3R1cmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAg
ICAgICAgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
dXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCAKKyAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VHUFIs
IHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRHUFIpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICAvLyBPdGhlcndp
c2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQp
OworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0
Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9q
aXQubmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCAKKyAgICAgICAgICAgIC0yICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVj
dHVyZSwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdEdQUiwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRv
cjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGxlbmd0aCh0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3IsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSwgbGVuZ3RoLmdwcigpKTsKKyAgICAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQz
Mk9wZXJhbmQgbGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQ
UlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25HZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2Uu
Z3ByKCksIGxlbmd0aC5ncHIoKSwgZW51bWVyYXRvci5ncHIoKSk7CisgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTmV4
dEVudW1lcmF0b3JQbmFtZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJh
dG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5k
IGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BS
UmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworICAgICAgICBHUFJSZWcgaW5k
ZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCAKKyAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNMZW5ndGhPZmZzZXQoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGluQm91
bmRzLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRv
UHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Ub0luZGV4U3RyaW5nLCByZXN1bHRHUFIsIGluZGV4LmdwcigpKTsKKyAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICNpZiBFTkFC
TEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaEFkZDMyKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZH
U2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2lu
Y2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmll
ckJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC01NTMwLDYgKzU1MzEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKEdHQykKIAorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM0LDYgKzEwMzQsMTYgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihj
ZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ1pDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcg
YXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihjZWxsKSk7
CkBAIC0xMTMyLDYgKzExNDIsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVS
b2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FQyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBBcmd1bWVu
dFR5cGUxPgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRnVuY3Rpb25UeXBl
IG9wZXJhdGlvbiwgTm9SZXN1bHRUYWcsIEFyZ3VtZW50VHlwZTEgYXJnMSkKQEAgLTEyNDgsNiAr
MTI2MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDWiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VTc2lDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIGFyZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKHN0dWJJbmZvKSwgYXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKQEAgLTEyNjMsNiArMTI4
MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQyBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAgLTEzMTEsNiArMTM0MSwyMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KENfSklUT3BlcmF0aW9uX0VKSkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRp
b25fRUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpaQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihT
X0pJVE9wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50cyhhcmcxKTsKQEAgLTE0ODQsNiArMTUy
OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBh
cmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpDIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2Fk
LCBhcmcxVGFnLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAg
IH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VK
c3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAgLTE1MTUsNiArMTU3MCwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VDWiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsK
KyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FU3NpQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5n
SW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNiAr
MzAzLDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVG
SU5FX09QKG9wX3Jlc29sdmVfc2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfZnJvbV9z
Y29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF90b19zY29wZSkKKworICAgICAgICBERUZJ
TkVfT1Aob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorICAgICAgICBERUZJTkVfT1Aob3BfaGFz
X2dlbmVyaWNfcHJvcGVydHkpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpCisgICAg
ICAgIERFRklORV9PUChvcF9nZXRfZGlyZWN0X3BuYW1lKQorICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcikKKyAgICAgICAgREVGSU5FX09QKG9wX25l
eHRfZW51bWVyYXRvcl9wbmFtZSkKKyAgICAgICAgREVGSU5FX09QKG9wX3RvX2luZGV4X3N0cmlu
ZykKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KQEAgLTQyMCw2ICs0MzAsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfdG9fbnVtYmVyKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfdG9fcHJpbWl0aXZlKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Rp
cmVjdF9wbmFtZSkKIAogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcmVzb2x2ZV9zY29w
ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlW
YWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKKyAgICAgICAg
c3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBK
SVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQg
PSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNh
bGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewpAQCAtMjU2LDYgKzI2Myw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKKyAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qLCBS
ZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOworCiAgICAgICAgIExhYmVsIHByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbChWTSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7CiAgICAg
ICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rp
b24pOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwpAQCAtMzM2LDYgKzM0NSwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgLy8gUHJvcGVydHkgaXMgaW50LWNoZWNrZWQgYW5kIHplcm8gZXh0
ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLgogICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxy
ZWFkeSBwcm9maWxlZC4gUmV0dXJucyB0aGUgc2xvdyBjYXNlcy4gRmFsbC10aHJvdWdoCiAgICAg
ICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0IGluIHJlZ1QwLCBhbmQgaXQgaXMgbm90IHlldCBw
cm9maWxlZC4KKyAgICAgICAgSnVtcExpc3QgZW1pdEludDMyTG9hZChJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpIHsgcmV0dXJuIGVtaXRDb250aWd1b3Vz
TG9hZChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgSW50MzJTaGFwZSk7IH0KKyAgICAgICAgSnVtcExp
c3QgZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsK
KyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3Vz
U2hhcGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJyYXlTdG9yYWdlTG9hZChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0TG9hZEZv
ckFycmF5TW9kZShJbnN0cnVjdGlvbiosIEpJVEFycmF5TW9kZSwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7CisKICAgICAgICAgSnVtcExpc3QgZW1pdEludDMyR2V0QnlWYWwoSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKSB7IHJldHVybiBlbWl0Q29udGln
dW91c0dldEJ5VmFsKGluc3RydWN0aW9uLCBiYWRUeXBlLCBJbnQzMlNoYXBlKTsgfQogICAgICAg
ICBKdW1wTGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNo
YXBlID0gQ29udGlndW91c1NoYXBlKTsKQEAgLTU0OSw2ICs1NjQsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF91cnNoaWZ0KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9n
ZXRfZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2hhc19nZW5lcmljX3Byb3BlcnR5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRf
b3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnVjdGlv
biopOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Jp
dGFuZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAg
LTYwMiw2ICs2MjYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdXJzaGlmdChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9k
aXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMTcxMTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDUwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisjaWYgVVNFKEpTVkFMVUU2
NCkKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorewor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXREb3VibGVMb2FkKGluc3RydWN0aW9uLCBiYWRU
eXBlKTsKKyAgICBtb3ZlRG91YmxlVG82NChmcFJlZ1QwLCByZWdUMCk7CisgICAgc3ViNjQodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKyNl
bHNlCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5
VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9hZChpbnN0cnVjdGlvbiwgYmFk
VHlwZSk7CisgICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZWdUMCwgcmVnVDEpOworICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKworQUxXQVlT
X0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9k
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBKSVRBcnJheU1vZGUgYXJyYXlNb2Rl
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Cisg
ICAgY2FzZSBKSVRJbnQzMjoKKyAgICAgICAgcmV0dXJuIGVtaXRJbnQzMkxvYWQoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICBjYXNlIEpJVERvdWJsZToKKyAgICAgICAgcmV0dXJu
IGVtaXREb3VibGVMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgY2FzZSBK
SVRDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gZW1pdENvbnRpZ3VvdXNMb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAg
IHJldHVybiBlbWl0QXJyYXlTdG9yYWdlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKworaW5saW5lIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKK3sKKyAg
ICByZXR1cm4gZW1pdENvbnRpZ3VvdXNMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlLCBleHBlY3Rl
ZFNoYXBlKTsKK30KKworaW5saW5lIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpCit7CisgICAgcmV0dXJuIGVtaXRBcnJheVN0b3JhZ2VMb2FkKGluc3RydWN0
aW9uLCBiYWRUeXBlKTsKK30KKwogQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVEb3VibGUoaW50IHNyYykKIHsKICAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYyku
aXNEb3VibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2LDEyIEBA
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVj
dC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZv
clNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJT
bG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIApAQCAtMTE3Niw2
ICsxMTc4LDIzNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAg
ICAgY2FsbE9wZXJhdGlvbihXaXRoUHJvZmlsZSwgb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBk
c3QsIHJlZ1QxLCByZWdUMCwgcmVnVDMsIHJlZ1QyKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2VudW1lcmFibGVfbGVuZ3RoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CisKKyAgICBlbWl0TG9hZFBheWxvYWQo
ZW51bWVyYXRvciwgcmVnVDEpOworCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2dlbmVyaWNfcHJvcGVydHkoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3Bl
cnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIg
dHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgorICAgIEp1bXBMaXN0IHNsb3dDYXNl
cyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBi
YWRUeXBlKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1f
Y29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2Nh
dGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJh
ZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwK
KyAgICAgICAgKCJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9j
b2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRk
cmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZTsKKyAgICAKKyAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKKworICAgIGVtaXRMb2FkUGF5bG9h
ZChwcm9wZXJ0eSwgcmVnVDEpOworCisgICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJl
Y3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMg
ZG9lc24ndCBtYXR0ZXIuCisgICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBh
IHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZh
aWwgaWYKKyAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBh
bHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KKyAgICAv
LyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3
aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQorICAgIC8vIHRv
IDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxj
dWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgorICAgIC8vIGV4dGVuZGlu
ZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xv
dyBjYXNlLgorICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisKKyAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CisKKyAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVz
IGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlw
ZSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNl
KGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwg
ZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKKyAg
ICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5m
byhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCisgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCisgICAgCisgICAgSnVtcCBz
a2lwUHJvZmlsaW5nID0ganVtcCgpOworICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
dmVjdG9yIGxlbmd0aCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFs
dWUKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9m
aWxlKTsKKyAgICAKKyAgICBza2lwUHJvZmlsaW5nLmxpbmsodGhpcyk7CisgICAgCisgICAgTGFi
ZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAgIAorICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBk
c3QsIHJlZ1QxLCByZWdUMCwgcmVnVDMsIHJlZ1QyKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0
dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCBl
bnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKworICAgIC8vIENo
ZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDAp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKKworICAgIC8vIENoZWNr
IHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7CisKKyAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICBlbWl0TG9hZFBheWxvYWQo
aW5kZXgsIHJlZ1QyKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisg
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZWdUMSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAg
ICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQg
b2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIHN1
YjMyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBuZWczMihyZWdUMik7CisgICAgbG9hZDMy
KEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIC0yICogc3RhdGljX2Nhc3Q8aW50
MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MiwgVGltZXNFaWdodCwgLTIgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJl
Z1QwKTsKKyAgICAKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSgpOworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfc3RydWN0
dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9nZW5lcmljX3By
b3BlcnR5X2VudW1lcmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisg
ICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNMZW5ndGhPZmZzZXQoKSkpOworCisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TnVsbFRhZyksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwor
CisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIGluQm91bmRzLmxpbmsodGhpcyk7CisKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOworICAgIGxvYWRQdHIoQmFzZUlu
ZGV4KHJlZ1QxLCByZWdUMCwgdGltZXNQdHIoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDIpOworCisgICAgZG9uZS5saW5rKHRoaXMpOwor
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X3RvX2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE3MTE5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDkgKzM2LDExIEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1Bh
dGhDYWxsLmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNsb3dQYXRo
Q2FsbC5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCkBAIC0xMjEwLDYgKzEyMTIs
MjM0IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJlZF9tb3YoSW5zdHIKICAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBzbG93UGF0aENh
bGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAg
IAorICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfc3Ry
dWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklU
QXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIAorICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBh
bmQgQXJndW1lbnRzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDM0LgorICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0
aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBD
b2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5m
by0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9t
RXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChi
eVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZm
ZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hC
dWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0
dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJl
dHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVy
aWMpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFz
ZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7CisKKyAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5
IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBh
dGggdGhpcyBkb2Vzbid0IG1hdHRlci4KKyAgICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYg
aXQgd2FzIGEgdWludDMyIGFnYWluc3QgdGhlIG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBh
bHdheXMgZmFpbCBpZgorICAgIC8vIG51bWJlciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVu
Z3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4gaW50bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlv
bgorICAgIC8vIHNpemUgaXMgYWx3YXlzIGxlc3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0
ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNvcnJlY3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCisg
ICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nhcnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRy
ZXNzIGNhbGN1bGF0aW9uLiBXZSB6ZXJvIGV4dGVuZCByYXRoZXIgdGhhbiBzaWduCisgICAgLy8g
ZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2VzIGl0IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGlu
IHRoZSBzbG93IGNhc2UuCisgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworCisgICAgSklUQXJy
YXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAg
ICAKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5
cGUsIG1vZGUsIGRvbmUpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRd
LnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIs
IGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJh
c2UgYXJyYXkgY2hlY2sKKyAgICAKKyAgICBKdW1wIHNraXBQcm9maWxpbmcgPSBqdW1wKCk7Cisg
ICAgCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgIAorICAgIGVtaXRBcnJheVBy
b2ZpbGVPdXRPZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIHNraXBQcm9m
aWxpbmcubGluayh0aGlzKTsKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Cisg
ICAgCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwg
cmVnVDEpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGly
ZWN0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5vcGVyYW5kOworCisgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKKworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1l
cmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNz
CisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0
KSwgcmVnVDApOworICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIC8vIE90aGVy
d2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1Qx
KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAtMiAqIHN0YXRpY19jYXN0PGludDMyX3Q+
KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwgcmVnVDApOworICAgIAorICAgIGRvbmUubGluayh0
aGlzKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJl
Y3RfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFz
ZSk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3Bu
YW1lKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRv
cik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7Cisg
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9lbnVt
ZXJhdG9yX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0
b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMSk7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
TGVuZ3RoT2Zmc2V0KCkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJl
Z1QwKTsKKworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBpbkJvdW5kcy5saW5rKHRoaXMp
OworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJl
Z1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5k
ZXhfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF90b19pbmRleF9zdHJpbmcpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkpTU3RhY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2Nv
cGUuaCIKQEAgLTE1MDIsNiArMTUwMyw2NCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogICAg
IAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlEZWZhdWx0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFs
dWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIAor
ICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgQVNTRVJUKHN1YnNjcmlwdC5p
c1VJbnQzMigpKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUp
OworICAgIGJvb2wgZGlkT3B0aW1pemUgPSBmYWxzZTsKKworICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgQVNTRVJUKGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGV4ZWMtPmNvZGVCbG9j
aygpLT5nZXRCeVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQoIWJ5VmFs
SW5mby5zdHViUm91dGluZSk7CisgICAgCisgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmco
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXpl
LgorICAgICAgICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0
dXJlKG9iamVjdC0+c3RydWN0dXJlKHZtKSk7CisgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlW
YWxJbmZvLmFycmF5TW9kZSkgeworICAgICAgICAgICAgSklUOjpjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIGRpZE9wdGlt
aXplID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWRpZE9wdGltaXpl
KSB7CisgICAgICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3
aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCisgICAgICAgIC8vIG5ldmVyIG1ha2Ug
dGhhdCBtaXN0YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZl
IHNvbWUgb2JqZWN0CisgICAgICAgIC8vIHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhl
biBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuIEZvciBjYXNlcworICAgICAgICAvLyB3
aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEw
IGl0ZXJhdGlvbnMgd29ydGggb2YKKyAgICAgICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9i
c2VydmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuCisgICAgICAgIGlm
ICgrK2J5VmFsSW5mby5zbG93UGF0aENvdW50ID49IDEwCisgICAgICAgICAgICB8fCBvYmplY3Qt
PnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7CisgICAgICAgICAgICAvLyBEb24ndCBl
dmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihleGVjLT5jb2RlQmxvY2soKSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvRnVuY3Rpb24oUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBG
dW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2Jq
ZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQuYXNVSW50MzIoKSkpKTsKK30KKyAgICAK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICAKKyAg
ICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOworICAgIEFTU0VSVChzdWJzY3JpcHQuaXNV
SW50MzIoKSk7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5
KGV4ZWMsIHN1YnNjcmlwdC5hc1VJbnQzMigpKSkpOworfQorICAgIAogRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xODAyLDYgKzE4NjEsMTEwIEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKICAgICBnZW5lcmljVW53aW5k
KHZtLCBleGVjLCB2bS0+ZXhjZXB0aW9uKCkpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZUNlbGwpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlQ2VsbC0+
dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4g
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGV4ZWMsIGJhc2UpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9w
ZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEpT
Q2VsbCogcHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIGlmIChiYXNlVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKTsKKworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UtPmhh
c1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5TmFtZSktPnRvSWRlbnRpZmllcihleGVj
KSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2VDZWxsLCBpbnQzMl90IHN1
YnNjcmlwdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYmFzZUNl
bGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBz
dWJzY3JpcHQpKSk7Cit9CisgICAgCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0
U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxs
LCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAgCisgICAgSlNPYmpl
Y3QqIGJhc2UgPSBjZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOworICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IHN0cnVjdHVyZS0+Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51
bWVyYXRvcigpKQorICAgICAgICByZXR1cm4gZW51bWVyYXRvcjsKKworICAgIGlmICghc3RydWN0
dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpIHx8IHN0YXRpY19jYXN0PHVpbnQzMl90
PihsZW5ndGgpICE9IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJh
eSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOworICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3Ry
dWN0dXJlUHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVy
YXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZXMpOworICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlU3RydWN0dXJlUHJvcGVy
dHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZFN0cnVjdHVy
ZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworICAgIHJldHVybiBlbnVt
ZXJhdG9yOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0R2VuZXJpY1By
b3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMy
X3QgbGVuZ3RoLCBKU0NlbGwqIHN0cnVjdHVyZUVudW1lcmF0b3JDZWxsKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZUNlbGwtPnRvT2JqZWN0KGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsK
KworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBp
ZiAoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5jYWNo
ZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKSB7CisgICAgICAgIGlmICghbGVuZ3Ro
ICYmIGVudW1lcmF0b3ItPmNhY2hlZFByb3RvdHlwZUNoYWluKCkgPT0gc3RydWN0dXJlLT5wcm90
b3R5cGVDaGFpbihleGVjKSkKKyAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOworICAgIH0K
KworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogc3RydWN0dXJlRW51bWVyYXRvciA9IGpz
Q2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihzdHJ1Y3R1cmVFbnVtZXJhdG9yQ2VsbCk7
CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOworICAgIHByb3Bl
cnR5TmFtZXMuc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgobGVuZ3RoKTsKKyAgICBwcm9w
ZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhzdHJ1Y3R1cmVFbnVt
ZXJhdG9yKTsKKworICAgIC8vIElmIHdlIHN0aWxsIGhhdmUgdGhlIHNhbWUgU3RydWN0dXJlIHRo
YXQgd2Ugc3RhcnRlZCB3aXRoLCB3ZSBkb24ndCBuZWVkIHRvIHJldmlzaXQgdGhlIEpTT2JqZWN0
IHByb3BlcnRpZXMuCisgICAgU3RydWN0dXJlKiBjYWNoZWRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVF
bnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1Y3R1cmUgPT0gY2Fj
aGVkU3RydWN0dXJlICYmIHN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSAm
JiBzdGF0aWNfY2FzdDx1aW50MzJfdD4obGVuZ3RoKSA9PSBiYXNlLT5nZXRBcnJheUxlbmd0aCgp
KQorICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwor
ICAgIGVsc2UKKyAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVz
KGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwor
ICAgIAorICAgIG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2UpOworCisgICAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjcmVhdGUodm0sIGJhc2UtPnN0cnVjdHVyZSh2bSksIHByb3BlcnR5TmFtZXMpOworICAg
IGVudW1lcmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3Rv
dHlwZUNoYWluKGV4ZWMpKTsKKyAgICBpZiAoIWxlbmd0aCAmJiBzdHJ1Y3R1cmUtPmNhbkNhY2hl
R2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJlLT5zZXRD
YWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7CisgICAg
cmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZW51bWVy
YXRvckNlbGwsIGludDMyX3QgaW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcio+KGVudW1lcmF0b3JDZWxsKTsKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gZW51
bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7Cit9CisKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgaW50MzJfdCBpbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkuc3RyaW5nKCkpOworfQorCiB9IC8v
IGV4dGVybiAiQyIKIAogLy8gTm90ZTogZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3Rh
dGUoKSBuZWVkcyB0byBiZSBwbGFjZWQgYmVmb3JlIHRoZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niwx
MCArOTYsMTMgQEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSgogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNDKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3Ry
aW5nSW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ1opKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRURBKShFeGVjU3RhdGUqLCBkb3VibGUsIEpTQXJy
YXkqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0
aW9uX0VFKShFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VJKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBs
Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FSkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwq
KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSWRjKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciopOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTE4LDkgKzEyMSwxNCBAQCB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEpTQ2VsbCogSklU
X09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJf
dCk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDKShF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKK3R5cGVkZWYg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUNaQykoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgaW50MzJfdCwgSlNDZWxsKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElP
TiAoKkNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0
eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VJY2YpKEV4ZWNT
dGF0ZSosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
KCpDX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRl
ZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
ICgqQ19KSVRPcGVyYXRpb25fRUpaQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QsIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FSkpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEpT
Q2VsbCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9F
SnNzU3QpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CiB0eXBlZGVmIEpTQ2Vs
bCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3MpKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUpzc0pzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyos
IEpTU3RyaW5nKik7CkBAIC0xMzQsNiArMTQyLDcgQEAgdHlwZWRlZiBkb3VibGUgSklUX09QRVJB
VElPTiAoKkRfSklUT3BlcgogdHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAoKkRfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIGludDMyX3Qg
SklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGludDMy
X3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRl
ZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25f
RUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9P
UEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
OwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VKSikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTI3Nyw2ICsyODYs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQp
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5l
cmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIGNvbnN0IElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CkBAIC0zMDAsNiArMzExLDE0IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKIAogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkluaXRHbG9iYWxDb25zdChFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiop
OwogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RW51bWVyYWJsZUxlbmd0aChF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSGFzR2VuZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwq
KTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QsIEpTQ2VsbCop
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXh0RW51bWVyYXRvclBu
YW1lKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CisKIH0gLy8gZXh0
ZXJuICJDIgogCiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rRm9yKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsMTUg
KzE3MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRl
Y29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIElu
ZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICAKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwotICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwogICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgIAogICAgIGxvYWQzMihCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCiAgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKQEAg
LTE4OSwzMiArMTg3LDI3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5
VmEKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERv
dWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihEb3VibGVT
aGFwZSkpOwotICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDMpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwotICAgIAogICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHJlZ1QzLCByZWdU
MiwgVGltZXNFaWdodCksIGZwUmVnVDApOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91
YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKLSAgICBt
b3ZlRG91YmxlVG9JbnRzKGZwUmVnVDAsIHJlZ1QwLCByZWdUMSk7CiAgICAgCiAgICAgcmV0dXJu
IHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoLUFycmF5U3RvcmFnZVNoYXBlKSwgcmVnVDEsIHJlZ1QzKTsKICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoU2xvd1B1dEFy
cmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3Mo
cmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCiAgICAg
bG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVn
VDApOyAvLyBwYXlsb2FkCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRv
bmUpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERv
dWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAgLTE2MCwxMyArMTYwLDExIEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW4KICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICBsb2FkRG91YmxlKEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaERv
dWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QwKSk7Ci0gICAg
bW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVnVDApOwotICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDApOwogICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6
SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCiB7CiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIApAQCAtMTc5LDcgKzE3Nyw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
Q29udGlndW91c0dldEJ5VmEKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTEyMTAsNiArMTIxMCw1MCBAQCBfbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKIF9sbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgbmF0aXZlQ2FsbFRyYW1wb2xpbmUo
TmF0aXZlRXhlY3V0YWJsZTo6bV9jb25zdHJ1Y3RvcikKIAorX2xsaW50X29wX2dldF9lbnVtZXJh
YmxlX2xlbmd0aDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorICAgIGRpc3BhdGNoKDMpCisKK19sbGludF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNs
b3dQYXRoKF9zbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpCisgICAgZGlzcGF0Y2goNSkK
KworX2xsaW50X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgdHJhY2VFeGVjdXRpb24o
KQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCisg
ICAgZGlzcGF0Y2goNSkKKworX2xsaW50X29wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgIHRy
YWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9oYXNfZ2VuZXJpY19w
cm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg0KQorCitfbGxpbnRfb3BfZ2V0X2RpcmVjdF9wbmFtZToK
KyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0X2Rp
cmVjdF9wbmFtZSkKKyAgICBkaXNwYXRjaCg3KQorCitfbGxpbnRfb3BfZ2V0X3N0cnVjdHVyZV9w
cm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgZGlz
cGF0Y2goNCkKKworX2xsaW50X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6Cisg
ICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dldF9nZW5l
cmljX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgZGlzcGF0Y2goNSkKKworX2xsaW50X29wX25l
eHRfZW51bWVyYXRvcl9wbmFtZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKQorICAgIGRpc3BhdGNoKDQpCisK
K19sbGludF9vcF90b19pbmRleF9zdHJpbmc6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNh
bGxTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKKyAgICBkaXNwYXRjaCgzKQog
CiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9u
J3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJp
c2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4MCw2ICsx
MjgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5v
ZGUqLCBTdGF0ZW1lbnROb2RlKik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBSZWdpc3RlcklE
KiB0cnlHZXRCb3VuZExvY2FsKEJ5dGVjb2RlR2VuZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dExvb3BIZWFkZXIoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUp
OworICAgICAgICB2b2lkIGVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqIGRzdCk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAko
cmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgQXJndW1lbnRz
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2IKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKICAgICB9Ci0g
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgIGlmIChzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSB7CiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUpOwogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTcxMTkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDYgKzgyLDEyIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdHlwZWRlZiB2
b2lkICgqR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBHZXRQcm9wZXJ0eU5h
bWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIAorICAgIHR5cGVkZWYgdWludDMyX3Qg
KCpHZXRFbnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7
CisgICAgR2V0RW51bWVyYWJsZUxlbmd0aEZ1bmN0aW9uUHRyIGdldEVudW1lcmFibGVMZW5ndGg7
CisKKyAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lczsKKyAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXM7CisKICAgICB0eXBlZGVmIFN0cmluZyAoKkNsYXNzTmFtZUZ1bmN0aW9uUHRyKShjb25z
dCBKU09iamVjdCopOwogICAgIENsYXNzTmFtZUZ1bmN0aW9uUHRyIGNsYXNzTmFtZTsKIApAQCAt
MTM3LDYgKzE0Myw5IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6
OmdldE93blByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMs
IFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0RW51bWVyYWJsZUxlbmd0aCwgXAorICAgICAgICAm
Q2xhc3NOYW1lOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05h
bWU6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNz
TmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjdXN0b21IYXNJbnN0YW5jZSwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzEx
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNOYW1l
U2NvcGUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgpAQCAtNTQyLDYgKzU0MywxNDMgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2VudGVyKQogICAgIEVORCgpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICBSRVRVUk4oanNOdW1iZXIoMCkpOworCisgICAgSlNPYmplY3Qq
IGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgUkVUVVJOKGpzTnVtYmVyKGJh
c2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBiYXNlKSkpOwor
fQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpCit7Cisg
ICAgQkVHSU4oKTsKKyAgICBKU09iamVjdCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVj
dChleGVjKTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIHBj
WzRdLnUuYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKGJhc2UtPnN0cnVjdHVyZSh2bSkp
OworICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMigpKTsKKyAgICBSRVRVUk4oanNCb29sZWFu
KGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5LmFzVUludDMyKCkpKSk7Cit9CisKK1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQoreworICAgIEJF
R0lOKCk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhl
Yyk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVt
ZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDQpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7CisgICAgaWYgKGJhc2UtPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVy
YXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVl
KSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBhc1N0cmlu
Zyhwcm9wZXJ0eS5hc0NlbGwoKSktPnRvSWRlbnRpZmllcihleGVjKSkpKTsKK30KKworU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KQoreworICAgIEJFR0lOKCk7
CisgICAgSlNPYmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7Cisg
ICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBib29sIHJlc3VsdDsK
KyAgICBpZiAocHJvcGVydHkuaXNTdHJpbmcoKSkKKyAgICAgICAgcmVzdWx0ID0gYmFzZS0+aGFz
UHJvcGVydHkoZXhlYywgYXNTdHJpbmcocHJvcGVydHkuYXNDZWxsKCkpLT50b0lkZW50aWZpZXIo
ZXhlYykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzIoKSk7
CisgICAgICAgIHJlc3VsdCA9IGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5LmFzVUlu
dDMyKCkpOworICAgIH0KKyAgICBSRVRVUk4oanNCb29sZWFuKHJlc3VsdCkpOworfQorCitTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKK3sKKyAgICBCRUdJTigpOwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcHJv
cGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkp
OworICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMp
LT50b0lkZW50aWZpZXIoZXhlYykpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikKK3sKKyAgICBCRUdJTigpOworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y3JlYXRlKHZtKSk7CisgICAgICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVl
LnRvT2JqZWN0KGV4ZWMpOworICAgIHVpbnQzMl90IGxlbmd0aCA9IE9QKDMpLmpzVmFsdWUoKS5h
c1VJbnQzMigpOworCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUo
dm0pOworICAgIGlmIChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBzdHJ1
Y3R1cmUtPmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAg
UkVUVVJOKGVudW1lcmF0b3IpOworCisgICAgaWYgKCFzdHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3Bl
cnRpZXNRdWlja2x5KCkgfHwgbGVuZ3RoICE9IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkpCisgICAg
ICAgIFJFVFVSTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSkpOworCisgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKKyAgICBiYXNlLT5tZXRob2RU
YWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlO
YW1lcywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2
bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNo
ZVN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJlLT5z
ZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBlbnVtZXJhdG9yKTsK
KyAgICBSRVRVUk4oZW51bWVyYXRvcik7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQoreworICAgIEJFR0lOKCk7CisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjcmVhdGUodm0pKTsKKyAgICAKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09i
amVjdChleGVjKTsKKyAgICB1aW50MzJfdCBlbnVtZXJhdGVkTGVuZ3RoID0gT1AoMykuanNWYWx1
ZSgpLmFzVUludDMyKCk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVj
dHVyZSh2bSk7CisgICAgaWYgKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9
IHN0cnVjdHVyZS0+Y2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkgeworICAg
ICAgICBpZiAoIWVudW1lcmF0ZWRMZW5ndGggJiYgZW51bWVyYXRvci0+Y2FjaGVkUHJvdG90eXBl
Q2hhaW4oKSA9PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpKQorICAgICAgICAgICAg
UkVUVVJOKGVudW1lcmF0b3IpOworICAgIH0KKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogc3RydWN0dXJlRW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihPUCg0KS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworCisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjKTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJh
dGVkTGVuZ3RoKGVudW1lcmF0ZWRMZW5ndGgpOworICAgIHByb3BlcnR5TmFtZXMuc2V0UHJldmlv
dXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZUVudW1lcmF0b3IpOworCisgICAgLy8g
SWYgd2Ugc3RpbGwgaGF2ZSB0aGUgc2FtZSBTdHJ1Y3R1cmUgdGhhdCB3ZSBzdGFydGVkIHdpdGgs
IHdlIGRvbid0IG5lZWQgdG8gcmV2aXNpdCB0aGUgSlNPYmplY3QgcHJvcGVydGllcy4KKyAgICBT
dHJ1Y3R1cmUqIGNhY2hlZFN0cnVjdHVyZSA9IHN0cnVjdHVyZUVudW1lcmF0b3ItPmNhY2hlZFN0
cnVjdHVyZSh2bSk7CisgICAgaWYgKHN0cnVjdHVyZSA9PSBjYWNoZWRTdHJ1Y3R1cmUgCisgICAg
ICAgICYmIGVudW1lcmF0ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkKKyAgICAg
ICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhiYXNlLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBlbHNl
CisgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhiYXNlLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAKKyAg
ICBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlKTsKKworICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZXMpOworICAgIGVudW1lcmF0b3ItPnNldENh
Y2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpKTsK
KyAgICBpZiAoIWVudW1lcmF0ZWRMZW5ndGggJiYgc3RydWN0dXJlLT5jYW5DYWNoZUdlbmVyaWNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHN0cnVjdHVyZS0+c2V0Q2FjaGVkR2Vu
ZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworICAgIFJFVFVSTihl
bnVtZXJhdG9yKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25leHRfZW51bWVyYXRv
cl9wbmFtZSkKK3sKKyAgICBCRUdJTigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
ZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihPUCgyKS5qc1Zh
bHVlKCkuYXNDZWxsKCkpOworICAgIHVpbnQzMl90IGluZGV4ID0gT1AoMykuanNWYWx1ZSgpLmFz
VUludDMyKCk7CisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IGVudW1lcmF0b3ItPnByb3Bl
cnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0
eU5hbWUgOiBqc051bGwoKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19pbmRl
eF9zdHJpbmcpCit7CisgICAgQkVHSU4oKTsKKyAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBPUCgyKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSB8fCBF
TkFCTEUoTExJTlQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw2ICsy
MjYsMTUgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pbik7CiBTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpOwogU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9zdHJjYXQpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19w
cmltaXRpdmUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJs
ZV9sZW5ndGgpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19w
cm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9kaXJlY3RfcG5h
bWUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3Bl
cnR5X2VudW1lcmF0b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZ2Vu
ZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfdG9faW5kZXhfc3RyaW5nKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24g
MTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTExLDE0ICsxMTEsMTQgQEAgdm9pZCBKU0FjdGl2YXRpb246
OmdldE93bk5vbkluZGV4UHJvcGVydAogICAgIEpTQWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBDYWxsRnJhbWU6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PFJlZ2lzdGVyKj4odGhpc09iamVj
dC0+bV9yZWdpc3RlcnMpKTsKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzICYmICF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYoKSAmJiAoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+dXNlc0FyZ3VtZW50cygpIHx8IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVzZXNFdmFsKCkp
KQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpICYmICF0aGlz
T2JqZWN0LT5pc1Rvcm5PZmYoKSAmJiAoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dXNlc0FyZ3Vt
ZW50cygpIHx8IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVzZXNFdmFsKCkpKQogICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKTsKIAogICAg
IHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS0+bV9sb2NrKTsKICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgZW5k
ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CiAgICAgICAgIGZvciAo
U3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgp
LT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKQorICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkg
JiBEb250RW51bSAmJiAhc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+aXNW
YWxpZChpdC0+dmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDE3MTE5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBKU0FycmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZQogewogICAgIEpTQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVj
dCk7CiAKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlm
IChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKIAogICAgIEpTT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lcywgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsx
MTksNyBAQCB2b2lkIEpTQXJyYXlCdWZmZXI6OmdldE93bk5vbkluZGV4UHJvcGVyCiB7CiAgICAg
SlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0
KTsKICAgICAKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAg
IGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBhcnJh
eS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOwogICAgIAogICAgIEJhc2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9k
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3
ICsyMDEsNyBAQCB2b2lkIEpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByCiAgICAg
SlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcq
PihvYmplY3QpOwogICAgIAogICAgIC8vIGxlbmd0aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJl
IERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94LgotICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpIHsKKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcyhtb2RlKSkgewogICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVPZmZzZXQpOwogICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVM
ZW5ndGgpOwogICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9u
IDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw0ICsyMzYsMTkgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+IEpTQ2VsbDo6Z2V0VAogICAgIHJldHVybiAwOwogfQogCit1aW50MzJfdCBKU0NlbGw6Omdl
dEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiwgSlNPYmplY3QqKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBKU0NlbGw6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDkgKzQ4LDU4IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogZW51bSBFbnVtZXJhdGlvbk1vZGUgewog
ICAgIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMsCi0gICAgSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcworICAgIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3QsCisgICAg
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcywKKyAgICBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
QW5kU2tpcEpTT2JqZWN0CiB9OwogCitpbmxpbmUgYm9vbCBzaG91bGRJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgewor
ICAgIGNhc2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllczoKKyAgICBjYXNlIEluY2x1ZGVEb250
RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29s
IHNob3VsZEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMoRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7
CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
OgorICAgIGNhc2UgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworaW5saW5lIGJvb2wgc2hvdWxkSW5jbHVkZUpTT2JqZWN0UHJvcGVydHlOYW1l
cyhFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNl
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXM6CisgICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEV4Y2x1ZGVEb250RW51bVBy
b3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgY2FzZSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bmxpbmUgRW51bWVyYXRpb25Nb2RlIG1vZGVUaGF0U2tpcHNKU09iamVjdChFbnVtZXJhdGlvbk1v
ZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEluY2x1ZGVEb250RW51
bVByb3BlcnRpZXM6CisgICAgICAgIHJldHVybiBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5k
U2tpcEpTT2JqZWN0OworICAgIGNhc2UgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllczoKKyAgICAg
ICAgcmV0dXJuIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q7CisgICAg
Y2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgIGNhc2Ug
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDoKKyAgICAgICAgcmV0dXJu
IG1vZGU7CisgICAgfQorfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNl
bGwoSGVhcCYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAm
LCBzaXplX3QpOwogCkBAIC0yMDksNiArMjU4LDExIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0
aW9uTW9kZSk7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdWludDMy
X3QgZ2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqLCBKU09iamVjdCopOworICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldEdlbmVyaWNQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOworCiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmpl
Y3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXN0b21IYXNJbnN0YW5j
ZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxNzExOTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzkwLDcgKzM5MCw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2IKIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRnVuY3Rpb24qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0
LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpICYmIChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlv
bigpICYmIHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpIHsKICAgICAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHByb3RvdHlwZSBoYXMg
YmVlbiByZWlmaWVkLgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgSlNHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj46OmcKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFycmF5VmlldyogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9iamVjdCk7CiAgICAg
Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICBpZiAoc2hv
dWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgYXJyYXkuYWRkKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIAogICAgIEJhc2U6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNzEx
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldENsYXNzUHJv
cGVydHlOYW1lcwogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgZm9yIChhdXRvIGl0
ZXIgPSB0YWJsZS0+YmVnaW4odm0pOyBpdGVyICE9IHRhYmxlLT5lbmQodm0pOyArK2l0ZXIpIHsK
LSAgICAgICAgICAgIGlmICgoIShpdGVyLT5hdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpICYmICEoKGl0ZXItPmF0dHJpYnV0ZXMo
KSAmIEJ1aWx0aW5PckZ1bmN0aW9uKSAmJiBkaWRSZWlmeSkpCisgICAgICAgICAgICBpZiAoKCEo
aXRlci0+YXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IHNob3VsZEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMobW9kZSkpICYmICEoKGl0ZXItPmF0dHJpYnV0ZXMoKSAmIEJ1aWx0aW5PckZ1bmN0
aW9uKSAmJiBkaWRSZWlmeSkpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaXRl
ci5rZXkoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjg0LDYgKzEyODQsMTIgQEAgYm9vbCBK
U09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVybiBjb25zdF9jYXN0
PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0
eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogfQogCitib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKIGJvb2wgSlNPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09iamVj
dCo+KGNlbGwpOwpAQCAtMTQ2NCw2ICsxNDcwLDEyIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3Bl
cnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBpZiAoIXNob3VsZEluY2x1
ZGVKU09iamVjdFByb3BlcnR5TmFtZXMobW9kZSkpIHsKKyAgICAgICAgLy8gV2Ugc3RpbGwgaGF2
ZSB0byBnZXQgbm9uLWluZGV4ZWQgcHJvcGVydGllcyBmcm9tIGFueSBzdWJjbGFzc2VzIG9mIEpT
T2JqZWN0IHRoYXQgaGF2ZSB0aGVtLgorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMt
PnZtKCkpLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIEFkZCBudW1l
cmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUgYWNjZXB0ZWQgY29u
dmVudGlvbi4KICAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVBcnJheSB3aXRoIGFu
IGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKICAgICAvLyBpcyBpbmNyZWRpYmx5IGluZWZm
aWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQgYXBwcm9hY2gsCkBA
IC0xNDgwLDcgKzE0OTIsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGkpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0OTIsNyArMTUwNCw3IEBAIHZvaWQg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgIGRvdWJsZSB2
YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAgICAgICAgICAgaWYg
KHZhbHVlICE9IHZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0xNTAzLDcgKzE1MTUsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqCiAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1pbihzdG9y
YWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBp
ZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCi0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoaSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChTcGFyc2VBcnJh
eVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkgewpAQCAtMTUxMiwx
MyArMTUyNCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzIHx8
ICEoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAgICAgICAgICAgaWYg
KHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkgfHwgIShpdC0+dmFsdWUuYXR0
cmlidXRlcyAmIERvbnRFbnVtKSkKICAgICAgICAgICAgICAgICAgICAga2V5cy51bmNoZWNrZWRB
cHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5rZXkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQo
KSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChrZXlzW2ld
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNTI2LDcgKzE1MzgsNyBA
QCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9Ci0gICAgCisKICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Ob25JbmRleFByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIApAQCAtMTUzNCwx
MiArMTU0NiwxMSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtCiB7
CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xhc3NJbmZvKCksIHBy
b3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKIAor
ICAgIGlmICghc2hvdWxkSW5jbHVkZUpTT2JqZWN0UHJvcGVydHlOYW1lcyhtb2RlKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYm9vbCBjYW5D
YWNoZVByb3BlcnRpZXNGcm9tU3RydWN0dXJlID0gIXByb3BlcnR5TmFtZXMuc2l6ZSgpOwogICAg
IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUodm0s
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwotCi0gICAgaWYgKGNhbkNhY2hlUHJvcGVydGllc0Zyb21T
dHJ1Y3R1cmUpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuc2V0TnVtQ2FjaGVhYmxlU2xvdHNGb3JP
YmplY3Qob2JqZWN0LCBwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CiB9CiAKIGRvdWJsZSBKU09iamVj
dDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdApAQCAtMjY1Miw0ICsyNjYzLDg1IEBA
IEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMKICAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2Fn
ZSkpOwogfQogCit1aW50MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBp
ZiAoc3RydWN0dXJlLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBzd2l0Y2ggKG9iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNl
IEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJ
TkdfVFlQRVM6CisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBjYXNlIEFMTF9JTlQz
Ml9JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5idXR0ZXJmbHkoKTsK
KyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVzZWRMZW5ndGg7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAg
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICB1
bnNpZ25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
ZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAg
ICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHVzZWRMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOworICAg
ICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBzdGQ6Om1p
bihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB1c2VkVmVjdG9yTGVuZ3RoOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIEpTT2JqZWN0OjpnZXRTdHJ1
Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXRQ
cm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisK
K3ZvaWQgSlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlVGhhdFNraXBzSlNPYmplY3QobW9kZSkpOworCisgICAgaWYgKG9iamVj
dC0+cHJvdG90eXBlKCkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEpTT2JqZWN0
KiBwcm90b3R5cGUgPSBhc09iamVjdChvYmplY3QtPnByb3RvdHlwZSgpKTsKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBpZiAocHJvdG90eXBlLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygp
Lm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkgeworICAgICAgICAgICAgcHJvdG90eXBlLT5t
ZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHBy
b3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIEpTVmFsdWUgbmV4dFByb3RvID0g
cHJvdG90eXBlLT5wcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcm90b3R5cGUgPSBhc09iamVjdChuZXh0UHJv
dG8pOworICAgIH0KK30KKworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYy
LDYgKzQ2Miw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1Byb3Bl
cnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNv
bnN0OwogICAgIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBj
b25zdDsKKyAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkKSBjb25z
dDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSk7CkBAIC00NzUsNiArNDc2LDEwIEBAIHB1YmxpYzoKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9k
ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB1aW50MzJfdCBnZXRFbnVtZXJhYmxl
TGVuZ3RoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKwogICAgIEpTVmFs
dWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSA9IE5vUHJl
ZmVyZW5jZSkgY29uc3Q7CiAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwg
ZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBk
b3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiU3Ryb25n
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6c19pbmZvID0geyAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIiwg
MCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpIH07
CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
cmVhdGUoVk0mIHZtKQoreworICAgIGlmICghdm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmdldCgpKSB7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoJnZtKTsK
KyAgICAgICAgdm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yID0gU3Ryb25nPEpTQ2VsbD4o
dm0sIGNyZWF0ZSh2bSwgMCwgcHJvcGVydHlOYW1lcykpOworICAgIH0KKyAgICByZXR1cm4ganND
YXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvci5nZXQoKSk7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCit7CisgICAgU3RydWN0dXJlSUQgc3RydWN0dXJl
SUQgPSBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwOworICAgIHVpbnQzMl90IGlubGlu
ZUNhcGFjaXR5ID0gc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpIDogMDsK
KyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBuZXcgKE5vdE51bGws
IAorICAgICAgICBhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yPih2bS5oZWFw
KSkgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBzdHJ1Y3R1cmVJRCwgaW5saW5lQ2FwYWNp
dHksIHByb3BlcnR5TmFtZXMuaWRlbnRpZmllclNldCgpKTsKKyAgICBlbnVtZXJhdG9yLT5maW5p
c2hDcmVhdGlvbih2bSwgcHJvcGVydHlOYW1lcy5kYXRhKCkpOworICAgIHJldHVybiBlbnVtZXJh
dG9yOworfQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcihWTSYgdm0sIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCB1aW50MzJfdCBpbmxpbmVDYXBh
Y2l0eSwgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqIHNldCkKKyAgICA6IEpTQ2VsbCh2bSwgdm0u
cHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faWRlbnRpZmll
clNldChzZXQpCisgICAgLCBtX2NhY2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVyZUlEKQorICAgICwg
bV9jYWNoZWRJbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKK3sKK30KKwordm9pZCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUGFzc1JlZlB0cjxQ
cm9wZXJ0eU5hbWVBcnJheURhdGE+IGlkZW50cykKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CisKKyAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBpZGVudGlmaWVycyA9
IGlkZW50czsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3RvciYg
dmVjdG9yID0gaWRlbnRpZmllcnMtPnByb3BlcnR5TmFtZVZlY3RvcigpOworICAgIG1fcHJvcGVy
dHlOYW1lcy5yZXNpemUodmVjdG9yLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyID0gdmVjdG9yW2ldOworICAgICAgICBtX3Byb3BlcnR5TmFtZXNbaV0uc2V0KHZtLCB0
aGlzLCBqc1N0cmluZygmdm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKKyAgICB9Cit9CisKK3Zv
aWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCktPkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6fkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworfQorCit2b2lkIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7
CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5TmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5TmFtZXNbaV0pOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3RvdHlwZUNoYWluKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfaAorI2RlZmluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaAorCisjaW5j
bHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRl
ICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIElkZW50aWZpZXI7CisK
K2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciA6IHB1YmxpYyBKU0NlbGwgeworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBjcmVhdGUoVk0mKTsKKyAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOworCisgICAg
c3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIEpTU3RyaW5nKiBwcm9w
ZXJ0eU5hbWVBdEluZGV4KHVpbnQzMl90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGluZGV4ID49IG1fcHJvcGVydHlOYW1lcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlOYW1lc1tpbmRleF0uZ2V0KCk7CisgICAg
fQorCisgICAgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqIGlkZW50aWZpZXJTZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllclNldC5nZXQoKTsKKyAgICB9CisKKyAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBt
X3Byb3RvdHlwZUNoYWluLmdldCgpOyB9CisgICAgdm9pZCBzZXRDYWNoZWRQcm90b3R5cGVDaGFp
bihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbikgeyByZXR1cm4gbV9wcm90
b3R5cGVDaGFpbi5zZXQodm0sIHRoaXMsIHByb3RvdHlwZUNoYWluKTsgfQorCisgICAgU3RydWN0
dXJlKiBjYWNoZWRTdHJ1Y3R1cmUoVk0mIHZtKSBjb25zdCB7IHJldHVybiB2bS5oZWFwLnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQobV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KKyAgICBTdHJ1Y3R1cmVJ
RCBjYWNoZWRTdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJlSUQ7
IH0KKyAgICB1aW50MzJfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkSW5saW5lQ2FwYWNpdHk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IGNhY2hlZFByb3BlcnR5TmFtZXNMZW5ndGhPZmZzZXQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1f
cHJvcGVydHlOYW1lcykgKyBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPj46OnNpemVNZW1v
cnlPZmZzZXQoKTsKKyAgICB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRQcm9wZXJ0eU5h
bWVzVmVjdG9yT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpICsgVmVjdG9yPFdyaXRl
QmFycmllcjxKU1N0cmluZz4+OjpkYXRhTWVtb3J5T2Zmc2V0KCk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2YXRl
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW47
CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmVJRCwgdWludDMy
X3QsIFJlZkNvdW50ZWRJZGVudGlmaWVyU2V0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPik7CisKKyAgICBWZWN0b3I8V3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPj4gbV9wcm9wZXJ0eU5hbWVzOworICAgIFJlZlB0cjxSZWZDb3Vu
dGVkSWRlbnRpZmllclNldD4gbV9pZGVudGlmaWVyU2V0OworICAgIFN0cnVjdHVyZUlEIG1fY2Fj
aGVkU3RydWN0dXJlSUQ7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3Rv
dHlwZUNoYWluOworICAgIHVpbnQzMl90IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNp
b24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMjQgQEAgdm9pZCBKU1Byb3h5OjpnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KgogICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK3VpbnQzMl90IEpTUHJveHk6OmdldEVudW1l
cmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQoreworICAgIEpT
UHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7CisgICAgcmV0dXJu
IHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0RW51bWVy
YWJsZUxlbmd0aChleGVjLCB0aGlzT2JqZWN0LT50YXJnZXQoKSk7Cit9CisKK3ZvaWQgSlNQcm94
eTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmpl
Y3QpOworICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50YXJnZXQoKSwgZXhlYywgcHJv
cGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNQcm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNQcm94eSog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKKyAgICB0aGlzT2JqZWN0LT50
YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwog
dm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+
KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCShy
ZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDkgQEAgcHJvdGVjdGVkOgogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBF
eGVjU3RhdGUqLCB1bnNpZ25lZCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFy
cmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB1aW50
MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25N
b2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNj
cmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAko
cmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleAogICAgICAgICBmb3IgKFN5bWJvbFRh
YmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4o
bG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoaXQtPmtleS0+aXNF
bXB0eVVuaXF1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIGlmICghKGl0LT52YWx1ZS5nZXRB
dHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cyhtb2RlKSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4
ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAJKHJldmlz
aW9uIDE3MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFt
ZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzMgKzIzLDMyIEBACiAKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RhdGljIGNvbnN0IHNpemVf
dCBzZXRUaHJlc2hvbGQgPSAyMDsKLQogdm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKFN0cmlu
Z0ltcGwqIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpZGVudGlmaWVyIHx8IGlkZW50aWZp
ZXIgPT0gU3RyaW5nSW1wbDo6ZW1wdHkoKSB8fCBpZGVudGlmaWVyLT5pc0F0b21pYygpKTsKLQot
ICAgIHNpemVfdCBzaXplID0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7Ci0g
ICAgaWYgKHNpemUgPCBzZXRUaHJlc2hvbGQpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpZGVudGlmaWVyID09IG1fZGF0YS0+
cHJvcGVydHlOYW1lVmVjdG9yKClbaV0uaW1wbCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3NldC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAg
ICAgICAgIG1fc2V0LmFkZChtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldLmltcGwoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX3NldC5hZGQoaWRlbnRpZmllcikuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAg
ICAgICB1aW50MzJfdCBpbmRleCA9IFByb3BlcnR5TmFtZShJZGVudGlmaWVyKG1fdm0sIGlkZW50
aWZpZXIpKS5hc0luZGV4KCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5kZXgsIGluZGV4ID09
IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCB8fCBpbmRleCA+PSBtX3ByZXZpb3VzbHlFbnVtZXJh
dGVkTGVuZ3RoKTsKICAgICB9CiAKKyAgICBpZiAobV9hbHRlcm5hdGVTZXQgJiYgbV9hbHRlcm5h
dGVTZXQtPmNvbnRhaW5zKGlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fc2V0LT5hZGQoaWRlbnRpZmllcikuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgYWRkS25vd25VbmlxdWUoaWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgUHJvcGVydHlOYW1lQXJy
YXk6OnNldFByZXZpb3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhjb25zdCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9hbHRlcm5hdGVTZXQgPSBlbnVtZXJh
dG9yLT5pZGVudGlmaWVyU2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCShy
ZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwyMiBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAKKyAgICBjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAgICAg
Y2xhc3MgU3RydWN0dXJlOwogICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogCisgICAgY2xhc3Mg
UmVmQ291bnRlZElkZW50aWZpZXJTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWZDb3VudGVkSWRl
bnRpZmllclNldD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFN0cmlu
Z0ltcGwqLCBQdHJIYXNoPFN0cmluZ0ltcGwqPj4gU2V0OworCisgICAgICAgIGJvb2wgY29udGFp
bnMoU3RyaW5nSW1wbCogaW1wbCkgY29uc3QgeyByZXR1cm4gbV9zZXQuY29udGFpbnMoaW1wbCk7
IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCAgeyByZXR1cm4gbV9zZXQuc2l6ZSgpOyB9
CisgICAgICAgIFNldDo6QWRkUmVzdWx0IGFkZChTdHJpbmdJbXBsKiBpbXBsKSB7IHJldHVybiBt
X3NldC5hZGQoaW1wbCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNldCBtX3NldDsKKyAg
ICB9OworCiAgICAgLy8gRklYTUU6IFJlbmFtZSB0byBQcm9wZXJ0eU5hbWVBcnJheS4KICAgICBj
bGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxQcm9wZXJ0eU5h
bWVBcnJheURhdGE+IHsKICAgICBwdWJsaWM6CkBAIC01MywyNSArNjYsNDAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheShWTSogdm0pCiAg
ICAgICAgICAgICA6IG1fZGF0YShQcm9wZXJ0eU5hbWVBcnJheURhdGE6OmNyZWF0ZSgpKQorICAg
ICAgICAgICAgLCBtX3NldChhZG9wdFJlZihuZXcgUmVmQ291bnRlZElkZW50aWZpZXJTZXQpKQog
ICAgICAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAgICAgLCBtX251bUNhY2hlYWJsZVNsb3Rz
KDApCiAgICAgICAgICAgICAsIG1fYmFzZU9iamVjdCgwKQorICAgICAgICAgICAgLCBtX3ByZXZp
b3VzbHlFbnVtZXJhdGVkTGVuZ3RoKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAg
IFByb3BlcnR5TmFtZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIDogbV9kYXRh
KFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3JlYXRlKCkpCisgICAgICAgICAgICAsIG1fc2V0KGFk
b3B0UmVmKG5ldyBSZWZDb3VudGVkSWRlbnRpZmllclNldCkpCiAgICAgICAgICAgICAsIG1fdm0o
JmV4ZWMtPnZtKCkpCiAgICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMoMCkKICAgICAg
ICAgICAgICwgbV9iYXNlT2JqZWN0KDApCisgICAgICAgICAgICAsIG1fcHJldmlvdXNseUVudW1l
cmF0ZWRMZW5ndGgoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgVk0qIHZtKCkg
eyByZXR1cm4gbV92bTsgfQogCisgICAgICAgIHZvaWQgYWRkKHVpbnQzMl90IGluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVu
Z3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGFkZChJZGVudGlmaWVy
Ojpmcm9tKG1fdm0sIGluZGV4KSk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGFkZChjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVyLmltcGwoKSk7IH0KICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoU3RyaW5nSW1wbCopOwotICAgICAgICB2
b2lkIGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpIHsgbV9kYXRhLT5wcm9w
ZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVyKSk7IH0K
KyAgICAgICAgdm9pZCBhZGRLbm93blVuaXF1ZShTdHJpbmdJbXBsKiBpZGVudGlmaWVyKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX3NldC0+YWRkKGlkZW50aWZpZXIpOworICAgICAgICAgICAg
bV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBpZGVu
dGlmaWVyKSk7CisgICAgICAgIH0KIAogICAgICAgICBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVu
c2lnbmVkIGkpIHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV07IH0KICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CkBAIC04MCw3ICsxMDgsMTAg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5RGF0YSogZGF0YSgp
IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogICAgICAgICBQYXNzUmVmUHRyPFByb3BlcnR5TmFt
ZUFycmF5RGF0YT4gcmVsZWFzZURhdGEoKSB7IHJldHVybiBtX2RhdGEucmVsZWFzZSgpOyB9CiAK
KyAgICAgICAgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqIGlkZW50aWZpZXJTZXQoKSBjb25zdCB7
IHJldHVybiBtX3NldC5nZXQoKTsgfQorCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2Ug
ZnVuY3Rpb25zLgorICAgICAgICBib29sIGNhbkFkZEtub3duVW5pcXVlRm9yU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gIW1fc2V0LT5zaXplKCkgJiYgKCFtX2FsdGVybmF0ZVNldCB8fCAhbV9h
bHRlcm5hdGVTZXQtPnNpemUoKSk7IH0KICAgICAgICAgdHlwZWRlZiBQcm9wZXJ0eU5hbWVBcnJh
eURhdGE6OlByb3BlcnR5TmFtZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7
CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5h
bWVWZWN0b3IoKS5zaXplKCk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmJlZ2luKCk7IH0KQEAgLTEw
MCwxNCArMTMxLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9iYXNlT2JqZWN0
ID0gb2JqZWN0OwogICAgICAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhh
c2hTZXQ8U3RyaW5nSW1wbCosIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBJZGVudGlmaWVyU2V0Owor
ICAgICAgICB2b2lkIHNldFByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKHVpbnQzMl90IGxlbmd0
aCkgeyBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoID0gbGVuZ3RoOyB9CisgICAgICAgIHZv
aWQgc2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKGNvbnN0IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopOwogCisgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFByb3BlcnR5TmFt
ZUFycmF5RGF0YT4gbV9kYXRhOwotICAgICAgICBJZGVudGlmaWVyU2V0IG1fc2V0OworICAgICAg
ICBSZWZQdHI8UmVmQ291bnRlZElkZW50aWZpZXJTZXQ+IG1fc2V0OworICAgICAgICBSZWZQdHI8
UmVmQ291bnRlZElkZW50aWZpZXJTZXQ+IG1fYWx0ZXJuYXRlU2V0OwogICAgICAgICBWTSogbV92
bTsKICAgICAgICAgc2l6ZV90IG1fbnVtQ2FjaGVhYmxlU2xvdHM7CiAgICAgICAgIEpTT2JqZWN0
KiBtX2Jhc2VPYmplY3Q7CisgICAgICAgIHVpbnQzMl90IG1fcHJldmlvdXNseUVudW1lcmF0ZWRM
ZW5ndGg7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDE3MTE5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSwxOCArMTA5LDI1IEBAIGJvb2wgUmVnRXhwT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwKIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBpZiAobW9k
ZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKICAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAogdm9pZCBS
ZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAg
ICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7CiAgICAgQmFz
ZTo6Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMobW9kZSkpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sYXN0SW5kZXgpOworICAgIEJhc2U6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKIHN0YXRpYyBib29sIHJl
amVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24sIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCiB7CiAgICAgaWYgKHRocm93RXhjZXB0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDE3MTE5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NywxMyArNzcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4cCopOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9v
bCBzaG91bGRUaHJvdyk7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMoSgogICAgIGludCBzaXplID0gdGhpc09iamVjdC0+aW50ZXJuYWxWYWx1ZSgpLT5sZW5n
dGgoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0gICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxNzEx
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgpAQCAtOTU2LDEyICs5NTYsMTIg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydQogICAgIGlmICghcHJv
cGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGtub3duVW5pcXVlID0g
IXByb3BlcnR5TmFtZXMuc2l6ZSgpOworICAgIGJvb2wga25vd25VbmlxdWUgPSBwcm9wZXJ0eU5h
bWVzLmNhbkFkZEtub3duVW5pcXVlRm9yU3RydWN0dXJlKCk7CiAKICAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgIGZvciAoUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaGFzTm9uRW51bWVyYWJsZVByb3BlcnRp
ZXMoKSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwotICAgICAgICBpZiAoIWl0
ZXItPmtleS0+aXNFbXB0eVVuaXF1ZSgpICYmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51
bSkgfHwgbW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgeworICAgICAgICBpZiAo
IWl0ZXItPmtleS0+aXNFbXB0eVVuaXF1ZSgpICYmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250
RW51bSkgfHwgc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkpIHsKICAgICAg
ICAgICAgIGlmIChrbm93blVuaXF1ZSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZEtub3duVW5pcXVlKGl0ZXItPmtleSk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMjIzLDQgKzEy
MjMsNzQgQEAgYm9vbCBDbGFzc0luZm86Omhhc1N0YXRpY1NldHRlck9yUmVhZG9ubAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnNldENhY2hlZFN0cnVjdHVyZVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1l
cmF0b3IpCit7CisgICAgQVNTRVJUKCFpc0RpY3Rpb25hcnkoKSk7CisgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKQorICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICByYXJlRGF0YSgpLT5z
ZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBlbnVtZXJhdG9yKTsK
K30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmU6OmNhY2hlZFN0cnVjdHVy
ZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmICghaGFzUmFyZURhdGEo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPmNhY2hl
ZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmU6
OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIEFTU0VSVCghaXNEaWN0aW9uYXJ5
KCkpOworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2
bSk7CisgICAgcmFyZURhdGEoKS0+c2V0Q2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0
b3Iodm0sIGVudW1lcmF0b3IpOworfQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIFN0cnVj
dHVyZTo6Y2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAg
IGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IHJhcmVEYXRhKCktPmNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCk7Cit9CisK
K2Jvb2wgU3RydWN0dXJlOjpjYW5DYWNoZVN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Io
KSBjb25zdAoreworICAgIGlmIChpc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0cnVjdHVyZTo6Y2FuQ2FjaGVHZW5lcmlj
UHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFjYW5DYWNoZVN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluID0gbV9jYWNo
ZWRQcm90b3R5cGVDaGFpbi5nZXQoKTsKKyAgICBBU1NFUlQoc3RydWN0dXJlQ2hhaW4pOworICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVDaGFpbi0+aGVh
ZCgpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmICghc3RydWN0dXJlLT5nZXQoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoc3RydWN0dXJlLT5nZXQoKS0+dHlwZUlu
Zm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHN0cnVjdHVyZSsrOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFN0cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSBjb25zdAorewor
ICAgIGlmIChoYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3
MTE5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODMsNiArMjgzLDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0RW51
bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2Fj
aGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KICAgICBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7IC8vIERlZmluZWQgaW4gSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oLgorCisgICAgdm9pZCBzZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisgICAgdm9p
ZCBzZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciopOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2FjaGVkU3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OworICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsK
KyAgICBib29sIGNhbkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0
OworICAgIGJvb2wgY2FuQ2FjaGVHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0
OworICAgIGJvb2wgY2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSBjb25zdDsKKwogICAgIHZv
aWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBKU1N0cmluZyogb2JqZWN0VG9TdHJpbmdWYWx1ZSgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuY3BwCShyZXZpc2lvbiAxNzExOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5o
IgogCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgpAQCAtNjgsNiArNjksMjggQEAgdm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6
dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ByZXZp
b3VzKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9vYmplY3RUb1N0cmluZ1Zh
bHVlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9lbnVtZXJhdGlvbkNhY2hl
KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWNoZWRTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9j
YWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcik7Cit9CisKK0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogU3RydWN0dXJlUmFyZURhdGE6OmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hlZFN0cnVjdHVyZVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IuZ2V0KCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNl
dENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9jYWNoZWRTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCh2bSwgdGhpcywgZW51bWVyYXRvcik7Cit9CisKK0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlUmFyZURhdGE6OmNhY2hlZEdlbmVyaWNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRHZW5lcmlj
UHJvcGVydHlOYW1lRW51bWVyYXRvci5nZXQoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0
YTo6c2V0Q2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9jYWNoZWRHZW5lcmljUHJv
cGVydHlOYW1lRW51bWVyYXRvci5zZXQodm0sIHRoaXMsIGVudW1lcmF0b3IpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOwogY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsKIGNsYXNzIFN0cnVjdHVy
ZTsKIApAQCAtNjEsNiArNjIsMTEgQEAgcHVibGljOgogICAgIAogICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CiAKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNhY2hlZFN0cnVjdHVyZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKik7CisgICAgdm9pZCBzZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1l
RW51bWVyYXRvcihWTSYsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOworCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmU7CiAgICAgCkBAIC03MSw2ICs3Nyw4IEBAIHByaXZh
dGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsKICAgICBXcml0ZUJh
cnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAgICBXcml0ZUJhcnJpZXI8
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4gbV9lbnVtZXJhdGlvbkNhY2hlOworICAgIFdyaXRlQmFy
cmllcjxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I+IG1fY2FjaGVkU3RydWN0dXJlUHJvcGVydHlO
YW1lRW51bWVyYXRvcjsKKyAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
PiBtX2NhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogICAgIAogICAgIHR5cGVk
ZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+LCBXVEY6Oklu
dEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0czsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MTE5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJK
U1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZVJlYWN0aW9uLmgiCisjaW5j
bHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5h
bWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGV4ZXIu
aCIKQEAgLTI1OCw2ICsyNTksNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNTdHJpbmc6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBub3RBbk9iamVjdFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
KyAgICBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgZ2V0dGVyU2V0dGVyU3RydWN0dXJlLnNldCgqdGhpcywgR2V0dGVyU2V0dGVyOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgYXBpV3JhcHBlclN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgSlNTY29wZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU2NvcGU6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMTcxMTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYgKzI2Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJpbmdTdHJ1Y3R1cmU7CiAgICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gcHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZTsKICAgICAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gZ2V0dGVyU2V0dGVyU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBhcGlXcmFwcGVyU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBK
U1Njb3BlU3RydWN0dXJlOwpAQCAtMjkxLDYgKzI5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmU7CiAjZW5kaWYK
ICAgICAgICAgU3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9uVGVybWluYXRvcjsKKyAgICAgICAgU3Ry
b25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogCiAgICAgICAgIEF0b21p
Y1N0cmluZ1RhYmxlKiBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgICAgICBDb21tb25JZGVudGlm
aWVycyogcHJvcGVydHlOYW1lczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MTIwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE0LTA3LTE3ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgUmVmYWN0b3Igb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZm9yLWluCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQxNDIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUg
ZGlzdGluY3QgcGFydHM6CisKKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBw
cm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9iamVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0
aGUgU3RydWN0dXJlIHByb3BlcnRpZXMgaW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0
ZXJhdGluZyBvdmVyIGFueSBvdGhlciBlbnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2Jq
ZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJ
dCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcgdGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUs
IHVzaW5nIGEgbmV3IHNldCBvZiBieXRlY29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZh
cmlvdXMgb3BlcmF0aW9ucyByZXF1aXJlZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAg
ICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVBcnJh
eTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisKIDIwMTQtMDctMDEgIE1hcmsgTGFtICA8bWFyay5s
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIERlYnVnZ2VyQ2FsbEZyYW1lOjpzY29w
ZSgpIHNob3VsZCByZXR1cm4gYSBEZWJ1Z2dlclNjb3BlLgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMTcxMTkw
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODEsNiArMzgxLDMzIEBAIGJvb2wgSlNET01XaW5kb3c6OmRlbGV0
ZVByb3BlcnR5QnlJbmRleCgKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK3VpbnQzMl90IEpTRE9NV2lu
ZG93OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+
KG9iamVjdCk7CisgICAgLy8gT25seSBhbGxvdyB0aGUgd2luZG93IHRvIGVudW1lcmF0ZWQgYnkg
ZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gQmFzZTo6Z2V0RW51bWVyYWJsZUxlbmd0aChleGVj
LCB0aGlzT2JqZWN0KTsKK30KKwordm9pZCBKU0RPTVdpbmRvdzo6Z2V0U3RydWN0dXJlUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFy
cmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU0RPTVdp
bmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CisgICAgLy8g
T25seSBhbGxvdyB0aGUgd2luZG93IHRvIGVudW1lcmF0ZWQgYnkgZnJhbWVzIGluIHRoZSBzYW1l
IG9yaWdpbi4KKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICByZXR1cm47CisgICAg
QmFzZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU0RPTVdpbmRvdzo6Z2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNET01XaW5k
b3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3QpOworICAgIC8vIE9u
bHkgYWxsb3cgdGhlIHdpbmRvdyB0byBlbnVtZXJhdGVkIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBv
cmlnaW4uCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIEJh
c2U6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOworfQorCiB2b2lkIEpTRE9NV2luZG93OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9NV2luZG93KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAx
NzExOTApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkod29ya2luZyBjb3B5KQpAQCAtOTcyLDYgKzk3Miw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgICMgQ3VzdG9tIGdldFByb3BlcnR5TmFtZXMgZnVuY3Rpb24gZXhpc3RzIG9uIERPTVdp
bmRvdwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMp
O1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XG4iKTsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdWludDMyX3QgZ2V0RW51
bWVyYWJsZUxlbmd0aChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqKTtcbiIpOwogICAg
ICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyJ9ID0g
MTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJ
KHJldmlzaW9uIDE3MTE5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX2FycmF5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lkIFJ1bnRpbWVBcnJheTo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMs
IGkpKTsKIAotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAg
aWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCiAgICAgSlNPYmpl
Y3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235139</attachid>
            <date>2014-07-18 12:35:04 -0700</date>
            <delta_ts>2014-07-18 18:26:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140718123448.patch</filename>
            <type>text/plain</type>
            <size>220779</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1OSBA
QAorMjAxNC0wNy0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwpOgor
ICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6fkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNWYWxpZCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6
OkZvckluQ29udGV4dDo6bG9jYWwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvcklu
Q29udGV4dDo6dHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6aW5k
ZXgpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OnR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGVk
Rm9ySW5Db250ZXh0OjppbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpw
dXNoT3B0aW1pc2VkRm9ySW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cG9wT3B0aW1pc2VkRm9ySW4pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwpOgorICAg
ICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRMb29wSGVhZGVyKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Ob2RlOjplbWl0TXVsdGlMb29wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
RG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9k
ZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SW50MzJMb2FkKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRG
b3JBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2dlbmVyaWNfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9wbmFtZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19pbmRleF9zdHJpbmcpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFs
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0RG91YmxlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUxv
YWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBwYXJzZXIvTm9k
ZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFy
Z3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9DbGFzc0lu
Zm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
OgorICAgICAgICAqIHJ1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6c2hv
dWxkRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNob3VsZEluY2x1
ZGVKU09iamVjdFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjptb2RlVGhhdFNraXBzSlNP
YmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldEVudW1l
cmFibGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpoYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpwcm9wZXJ0eU5hbWVBdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppZGVudGlmaWVyU2V0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSUQpOgorICAgICAg
ICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5KToK
KyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNMZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQp
OgorICAgICAgICAoSlNDOjpzdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Z2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNQcm94eS5jcHA6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmdldEVudW1lcmFibGVMZW5n
dGgpOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNQcm94eS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5j
cHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg6CisgICAgICAgIChKU0M6OlJl
ZkNvdW50ZWRJZGVudGlmaWVyU2V0Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6OlJlZkNvdW50
ZWRJZGVudGlmaWVyU2V0OjpzaXplKToKKyAgICAgICAgKEpTQzo6UmVmQ291bnRlZElkZW50aWZp
ZXJTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5h
bWVBcnJheSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YWRkS25vd25VbmlxdWUpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eU5hbWVBcnJheTo6aWRlbnRpZmllclNldCk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5TmFtZUFycmF5OjpjYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5TmFtZUFycmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCk6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4
cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6
Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpT
dHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0Q2FjaGVkU3RydWN0dXJl
UHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVk
U3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6c2V0Q2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjYW5DYWNoZVN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkNhY2hlR2VuZXJpY1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRp
ZXNRdWlja2x5KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJl
RGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpj
YWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkR2VuZXJpY1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0Q2Fj
aGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTQtMDctMTcgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBERkcgRmx1c2go
U2V0TG9jYWwpIHN0b3JlIGVsaW1pbmF0aW9uIGlzIG92ZXJ6ZWFsb3VzIGZvciBjYXB0dXJlZCB2
YXJpYWJsZXMgaW4gdGhlIHByZXNlbmNlIG9mIG5vZGVzIHRoYXQgaGF2ZSBubyBlZmZlY3RzIGJ1
dCBtYXkgdGhyb3cgKG1lcmdlIHRydW5rIHIxNzExOTApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNp
b24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYsNyBAQCB2b2lkIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9y
IGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgICAgICAg
ICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykpKQorICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEo
ZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCBzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSkKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljRnVu
Y3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBTdHJp
bmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgICAgICAgICBTdGF0aWNGdW5j
dGlvbkVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8ICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgICAgIGlmICgh
KGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgc2hv
dWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODEzLDYgKzgxMyw4IEBACiAJCTFD
QUE5QTIzMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQUE5QTIxMThG
NEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJ
MjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVy
LmggKi87IH07CisJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHAgKi87IH07CisJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAq
LzsgfTsKIAkJMkEyODI1RDAxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMjgyNUNG
MTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi87IH07CiAJCTJBNDhE
MTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAwRTJB
MjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OwogCQkyQTRCQjdGMzE4QTQxMTc5MDA4
QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFu
YWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTgzNiw2ICs4MzgsNyBAQAogCQkyQUM5MjJC
QzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUM5MjJCQTE4QTE2MTgyMDAzQ0Uw
RkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggKi87IH07CiAJCTJBQ0NGM0RFMTg1RkUyNkIw
MDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0YzREMxODVGRTI2QjAwODNFMkFE
IC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi87IH07CiAJCTJBQ0NGM0RGMTg1
RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQ0NGM0REMTg1RkUyNkIwMDgz
RTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLzsgfTsKKwkJMkFEMkVERkIx
OTc5OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFEMkVERkExOTc5OUUzODAwNEQ2NDc4IC8qIEVu
dW1lcmF0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTJBRDg5MzJCMTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRDg5MzI5
MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLzsgfTsKIAkJMkFERkEy
NjMxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQURGQTI2MjE4RUYzNTQwMDA0RjlGQ0MgLyogR0NM
b2dnaW5nLmNwcCAqLzsgfTsKIAkJMkFGNzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVy
ZUlEVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkFGNzM4MkExOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwICovOyB9
OwpAQCAtMjk2MSw2ICsyOTY0LDggQEAKIAkJMUNBQTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpT
R2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8q
IEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3Ry
aW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBMDVBQkQzMTk2MURG
MjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsYXllZFJlbGVhc2VTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIwODUgLyogR0NT
ZWdtZW50ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21l
bnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMzQzRjc3MThBMTc0
OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjk4NSw2ICsyOTkwLDcgQEAKIAkJMkFDOTIyQkExOEExNjE4MjAw
M0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExEV0FSRkRlYnVnTGluZUluZm8uaDsgcGF0aCA9IGZ0bC9GVExEV0FSRkRl
YnVnTGluZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFDQ0YzREMxODVG
RTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9y
ZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVy
RWxpc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBRDJFREZBMTk3
OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRW51bWVyYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xv
Z2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NMb2dnaW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFGNzM4MkExOEJCQkY5MjAwOEE1
QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3RydWN0dXJlSURUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00OTc1LDYgKzQ5ODEsOSBAQAogCQkJCTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBX
ZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFy
cmllci5oICovLAogCQkJCUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJ
bmxpbmVzLmggKi8sCisJCQkJMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAgKi8sCisJCQkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovLAorCQkJCTJBRDJFREZBMTk3OTlFMzgwMDRENjQ3
OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01OTM5LDYgKzU5NDgsNyBAQAogCQkJCTBGNkIx
Q0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyQUQyRURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25N
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkRBRDM4RjE5NUExNjRFMDBGMzA0NjQgLyogVHlw
ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkZCNzIxNTE5NTM3NjBDMDBCQjYxMkUg
LyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJGQjcxM0ExOTUzNzRCODAwQkI2MTJF
IC8qIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTk2LDYg
KzY2MDYsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5
QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJFMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYw
MDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICov
LApAQCAtNzc0Myw2ICs3NzU0LDcgQEAKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyog
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0
MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMjBDQjkxODU1NkEz
NTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNp
b24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDE2IEBACiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9kaWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5kIiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJs
ZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dp
dGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwgImxlbmd0aCIgOiAzIH0sCisgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSIsICJsZW5ndGgiIDogNSB9LAor
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSIsICJsZW5n
dGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2dlbmVyaWNfcHJvcGVy
dHkiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9kaXJl
Y3RfcG5hbWUiLCAibGVuZ3RoIiA6IDcgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvciIsICJsZW5ndGgiIDogNCB9LAorICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvciIsICJs
ZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbmV4dF9lbnVtZXJhdG9y
X3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19p
bmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfQogICAgICAgICBdCiAgICAgfSwKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
aAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsOCBAQCB2b2lkIGNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAg
Y2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9u
b3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFt
ZV9zY29wZToKQEAgLTE1MCw2ICsxNTIsMTAgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
T2Zmc2V0KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJl
X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToK
KyAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZToKICAgICBjYXNlIG9wX2dldF9ieV92
YWw6CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgogICAgIGNhc2Ugb3BfaW46CkBA
IC0xNzksNiArMTg1LDggQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3I6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2Nh
bGxfdmFyYXJnczogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9w
Y29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwpAQCAtMTg2LDYgKzE5NCw3IEBAIHZv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAgICAg
Y2FzZSBvcF9uZXh0X3BuYW1lOiB7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0
b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CkBAIC0yOTgsNiArMzA3LDE1IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9m
ZnNldChDb2RlQmwKICN1bmRlZiBMTElOVF9IRUxQRVJfT1BDT0RFUwogICAgICAgICByZXR1cm47
CiAgICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJz
dCBhcmd1bWVudC4KKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICBjYXNlIG9wX2dl
dF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJs
ZV9sZW5ndGg6CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICBjYXNlIG9w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0
eToKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0
dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5h
bWU6CiAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToK
ICAgICBjYXNlIG9wX3N0cmNhdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsx
Mzk5LDkxIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpdCAr
PSBPUENPREVfTEVOR1RIKG9wX25leHRfcG5hbWUpIC0gMTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2Ug
PSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aCkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAg
aW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaXRbNF0udS5hcnJh
eVByb2ZpbGU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgYXJy
YXlQcm9maWxlKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGRzdCA9
IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRh
dGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsx
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfZ2Vu
ZXJpY19wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJl
Z2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9M
RU5HVEgob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogeworICAgICAgICAg
ICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRb
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzRdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBlbnVtZXJhdG9yID0gaXRbNV0udS5vcGVyYW5kOworICAgICAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gaXRbNl0udS5wcm9maWxlOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2RpcmVjdF9wbmFtZSIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVzLCAlcCIsIHJlZ2lz
dGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcHJvZmlsZSk7CisgICAgICAgICAgICBpdCAr
PSBPUENPREVfTEVOR1RIKG9wX2dldF9kaXJlY3RfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5
X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dldF9zdHJ1Y3R1cmVf
cHJvcGVydHlfZW51bWVyYXRvciIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwg
cmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9l
bnVtZXJhdG9yKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGlu
dCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSBpdFszXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgc3RydWN0dXJlRW51bWVyYXRvciA9IGl0WzRdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dl
dF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
YmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUobGVuZ3RoKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShz
dHJ1Y3R1cmVFbnVtZXJhdG9yKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xF
TkdUSChvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKSAtIDE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFt
ZTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4
ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAib3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lIik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEo
KSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX25leHRfZW51bWVyYXRvcl9w
bmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF90b19pbmRleF9zdHJpbmc6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF90b19pbmRl
eF9zdHJpbmciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOworICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF90b19pbmRleF9zdHJpbmcpIC0gMTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOiB7CiAg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50
TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1
c2hfd2l0aF9zY29wZSIsIHIwKTsKQEAgLTE3OTksNiArMTg4NCwxMyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IGpdLnUub3BlcmFuZCA9IHBjW2pdLnUub3BlcmFuZDsKICAgICAgICAgfQogICAgICAgICBzd2l0
Y2ggKHBjWzBdLnUub3Bjb2RlKSB7CisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHk6IHsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0g
MV0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUlu
ZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBv
cExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoK
ICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICAgICAgY2FzZSBvcF9nZXRf
YnlfdmFsOgpAQCAtMTgwOSw2ICsxOTAxLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJd
ID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CiAgICAgICAgICAgICBGQUxM
VEhST1VHSDsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKICAg
ICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQzNiwxOCArMTQzNiwzMCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEFyCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpID4gMDsgaS0tKSB7
Ci0gICAgICAgIEZvckluQ29udGV4dCYgY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaSAt
IDFdOwotICAgICAgICBpZiAoY29udGV4dC5wcm9wZXJ0eVJlZ2lzdGVyID09IHByb3BlcnR5KSB7
Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2dldF9ieV9wbmFtZSk7Ci0gICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoY29udGV4dC5leHBlY3RlZFN1YnNjcmlwdFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0Lml0ZXJSZWdpc3Rlci0+aW5kZXgo
KSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5pbmRleFJlZ2lz
dGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgIEZvckluQ29u
dGV4dCogY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaSAtIDFdLmdldCgpOworICAgICAg
ICBpZiAoY29udGV4dC0+bG9jYWwoKSAhPSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmICghY29udGV4dC0+aXNWYWxpZCgpKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnR5cGUoKSA9PSBGb3JJbkNvbnRleHQ6OkluZGV4ZWRG
b3JJbkNvbnRleHRUeXBlKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0PElu
ZGV4ZWRGb3JJbkNvbnRleHQqPihjb250ZXh0KS0+aW5kZXgoKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQtPnR5cGUoKSA9PSBGb3JJbkNv
bnRleHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dFR5cGUpOworICAgICAgICBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQqPihjb250ZXh0KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZGlyZWN0X3BuYW1lKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChiYXNlLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5
LT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUNvbnRl
eHQtPmluZGV4KCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Ry
dWN0dXJlQ29udGV4dC0+ZW51bWVyYXRvcigpLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KKwogICAg
IFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwog
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bf
Z2V0X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CkBAIC0y
MTYxLDcgKzIxNzMsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNj
CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0PiBzYXZlZFNjb3Bl
Q29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gc2F2ZWRTd2l0Y2hDb250
ZXh0U3RhY2s7Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IHNhdmVkRm9ySW5Db250ZXh0
U3RhY2s7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gc2F2
ZWRGb3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IHBvcHBlZFRy
eUNvbnRleHRzOwogICAgICAgICBMYWJlbFNjb3BlU3RvcmUgc2F2ZWRMYWJlbFNjb3BlczsKICAg
ICAgICAgd2hpbGUgKHRvcFNjb3BlID4gYm90dG9tU2NvcGUgJiYgdG9wU2NvcGUtPmlzRmluYWxs
eUJsb2NrKSB7CkBAIC0yMTg4LDcgKzIyMDAsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q29tcGxleFBvcFNjCiAgICAgICAgICAgICAgICAgbV9zd2l0Y2hDb250ZXh0U3RhY2suc2hy
aW5rKGZpbmFsbHlDb250ZXh0LnN3aXRjaENvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGZsaXBGb3JJbnMpIHsKLSAgICAgICAgICAgICAgICBzYXZlZEZv
ckluQ29udGV4dFN0YWNrID0gbV9mb3JJbkNvbnRleHRTdGFjazsKKyAgICAgICAgICAgICAgICBz
YXZlZEZvckluQ29udGV4dFN0YWNrLnN3YXAobV9mb3JJbkNvbnRleHRTdGFjayk7CiAgICAgICAg
ICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuZm9ySW5D
b250ZXh0U3RhY2tTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwVHJp
ZXMpIHsKQEAgLTIyMjgsNyArMjI0MCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b21wbGV4UG9wU2MKICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAg
ICAgbV9zd2l0Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKICAgICAg
ICAgICAgIGlmIChmbGlwRm9ySW5zKQotICAgICAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2sgPSBzYXZlZEZvckluQ29udGV4dFN0YWNrOworICAgICAgICAgICAgICAgIG1fZm9ySW5Db250
ZXh0U3RhY2suc3dhcChzYXZlZEZvckluQ29udGV4dFN0YWNrKTsKICAgICAgICAgICAgIGlmIChm
bGlwVHJpZXMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV90cnlDb250ZXh0U3RhY2suc2l6
ZSgpID09IGZpbmFsbHlDb250ZXh0LnRyeUNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHBvcHBlZFRyeUNvbnRleHRzLnNpemUoKTsgaS0tOykgewpA
QCAtMjU2MSw0ICsyNTczLDEyOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVy
YXRpb24oCiAgICAgZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKIH0KIAorUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIHJldHVybiBk
c3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzR2VuZXJpY1By
b3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJv
cGVydHlOYW1lKQoreworICAgIGVtaXRPcGNvZGUob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJv
cGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBVbmxp
bmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICBl
bWl0T3Bjb2RlKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5k
ZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFtZS0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFycmF5UHJvZmlsZSk7CisgICAgcmV0dXJuIGRz
dDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHBy
b3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3sKKyAgICBlbWl0T3Bjb2RlKG9w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3Qt
PmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvci0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsK
K30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBsZW5ndGgpCit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5
X2VudW1lcmF0b3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQobGVuZ3RoLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0
b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgs
IFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpCit7CisgICAgZW1pdE9wY29kZShvcF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgo
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxlbmd0aC0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIHJl
dHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dEVu
dW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yLCBSZWdpc3RlcklEKiBpbmRleCkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX25leHRfZW51bWVy
YXRvcl9wbmFtZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpCit7CisgICAgZW1pdE9wY29kZShvcF90b19pbmRl
eF9zdHJpbmcpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsK
K30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCit7CisgICAg
aWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRT
dGFjay5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbmRleGVkRm9ySW5Db250ZXh0Pihsb2NhbFJl
Z2lzdGVyLCBpbmRleFJlZ2lzdGVyKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCit7CisgICAgaWYg
KCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRTdGFj
ay5yZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hTdHJ1Y3R1
cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4
UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1l
cmF0b3JSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFN0cnVj
dHVyZUZvckluQ29udGV4dD4obG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3RlciwgcHJvcGVydHlS
ZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OnBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKK3sK
KyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZvckluQ29u
dGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW52
YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCit7
CisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRleHRzIGlzIGtpbmQgb2Yg
d2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmIAorICAgIC8vIGVpdGhlciBvZiB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKyAgICAvLyAKKyAgICAvLyAoMSkgVGhlIGxv
b3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0
aGUgbG9vcC4KKyAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIGNhcHR1
cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KKyAgICAvLworICAgIC8v
IFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJlbHkgdGhhdCBpdCdz
IG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YgCisgICAgLy8gImFuYWx5c2lzIiB0byBtYWtlIGl0
ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMsIHdlIHdvdWxkIGVp
dGhlciBoYXZlIAorICAgIC8vIHRvIHBlcmZvcm0gc29tZSBmbG93LXNlbnNpdGl2ZSBhbmFseXNp
cyB0byBzZWUgaWYvd2hlbiB0aGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgd2FzIAorICAgIC8v
IHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBjaGVja3MgdG8g
c2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbiAKKyAgICAvLyByZWFzc2lnbmVkIGZyb20gaXRz
IG9yaWdpbmFsIHZhbHVlLgorICAgIGZvciAoc2l6ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNr
LnNpemUoKTsgaSA+IDA7IGktLSkgeworICAgICAgICBGb3JJbkNvbnRleHQqIGNvbnRleHQgPSBt
X2ZvckluQ29udGV4dFN0YWNrW2kgLSAxXS5nZXQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxv
Y2FsKCkgIT0gbG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
b250ZXh0LT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDExICs5Nyw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRmlu
YWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CiAgICAgfTsKIAotICAgIHN0cnVjdCBGb3JJbkNv
bnRleHQgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwZWN0ZWRTdWJzY3JpcHRSZWdp
c3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJSZWdpc3RlcjsKLSAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGluZGV4UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBwcm9wZXJ0eVJlZ2lzdGVyOworICAgIGNsYXNzIEZvckluQ29udGV4dCB7CisgICAgcHVi
bGljOgorICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKKyAg
ICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAgICAs
IG1faXNWYWxpZCh0cnVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IH5Gb3JJbkNvbnRleHQoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlk
YXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsgfQorCisgICAgICAgIGVudW0gRm9ySW5Db250ZXh0
VHlwZSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBlLAorICAgICAgICAg
ICAgSW5kZXhlZEZvckluQ29udGV4dFR5cGUKKyAgICAgICAgfTsKKyAgICAgICAgdmlydHVhbCBG
b3JJbkNvbnRleHRUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisKKyAgICAgICAgUmVnaXN0ZXJJRCog
bG9jYWwoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsUmVnaXN0ZXIuZ2V0KCk7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2xvY2FsUmVnaXN0ZXI7CisgICAg
ICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIH07CisKKyAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0cnVj
dHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBp
bmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yUmVnaXN0ZXIpCisgICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lz
dGVyKQorICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3RlcikKKyAgICAg
ICAgICAgICwgbV9wcm9wZXJ0eVJlZ2lzdGVyKHByb3BlcnR5UmVnaXN0ZXIpCisgICAgICAgICAg
ICAsIG1fZW51bWVyYXRvclJlZ2lzdGVyKGVudW1lcmF0b3JSZWdpc3RlcikKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBGb3JJbkNvbnRleHRUeXBlIHR5cGUoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlRm9ySW5Db250ZXh0VHlw
ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJl
Z2lzdGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rl
ci5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1f
aW5kZXhSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVydHlSZWdp
c3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvclJlZ2lzdGVyOwor
ICAgIH07CisKKyAgICBjbGFzcyBJbmRleGVkRm9ySW5Db250ZXh0IDogcHVibGljIEZvckluQ29u
dGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0KFJlZ2lzdGVy
SUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCisgICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX2luZGV4UmVn
aXN0ZXIoaW5kZXhSZWdpc3RlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCBGb3JJbkNvbnRleHRUeXBlIHR5cGUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gSW5kZXhlZEZvckluQ29udGV4dFR5cGU7CisgICAgICAgIH0KKworICAgICAgICBS
ZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdp
c3RlcjsKICAgICB9OwogCiAgICAgc3RydWN0IFRyeURhdGEgewpAQCAtNDMxLDYgKzQ5NiwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFByb3BlcnR5TmFt
ZXMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBpLCBSZWdp
c3RlcklEKiBzaXplLCBMYWJlbCogYnJlYWtUYXJnZXQpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0TmV4dFByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIFJlZ2lzdGVySUQqIGl0ZXIsIExhYmVsKiB0
YXJnZXQpOwogCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNJbmRleGVkUHJvcGVydHkoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzR2VuZXJpY1By
b3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEVudW1lcmFibGVMZW5ndGgo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoLCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJh
dG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1l
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5k
ZXgpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGluZGV4KTsKKwogICAgICAgICB2b2lkIGVtaXRSZWFkT25seUV4Y2Vw
dGlvbklmTmVlZGVkKCk7CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcg
bXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KQEAgLTQ2MCwxNiArNTM0LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udGV4dChTdGF0ZW1lbnROb2RlKiBmaW5h
bGx5QmxvY2spOwogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250ZXh0KCk7CiAKLSAgICAgICAg
dm9pZCBwdXNoT3B0aW1pc2VkRm9ySW4oUmVnaXN0ZXJJRCogZXhwZWN0ZWRTdWJzY3JpcHQsIFJl
Z2lzdGVySUQqIGl0ZXIsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJl
Z2lzdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBGb3JJbkNvbnRleHQgY29udGV4dCA9IHsg
ZXhwZWN0ZWRTdWJzY3JpcHQsIGl0ZXIsIGluZGV4LCBwcm9wZXJ0eVJlZ2lzdGVyIH07Ci0gICAg
ICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgcG9wT3B0aW1pc2VkRm9ySW4oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQorICAgICAgICB2
b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCog
aW5kZXgpOworICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsKTsKKyAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKTsKKyAgICAgICAgdm9pZCBwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9j
YWwoUmVnaXN0ZXJJRCogbG9jYWwpOwogCiAgICAgICAgIExhYmVsU2NvcGVQdHIgYnJlYWtUYXJn
ZXQoY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBMYWJlbFNjb3BlUHRyIGNvbnRpbnVlVGFy
Z2V0KGNvbnN0IElkZW50aWZpZXImKTsKQEAgLTY2OCw3ICs3MzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0LCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9zY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFN3aXRjaEluZm8+
IG1fc3dpdGNoQ29udGV4dFN0YWNrOwotICAgICAgICBWZWN0b3I8Rm9ySW5Db250ZXh0PiBtX2Zv
ckluQ29udGV4dFN0YWNrOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZvckluQ29u
dGV4dD4+IG1fZm9ySW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0PiBt
X3RyeUNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8UmVnaXN0
ZXJJRD4sIGNvbnN0IERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqPj4gbV9kZWNvbnN0cnVjdGVk
UGFyYW1ldGVyczsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MDUsMTIgKzE1MDUsMTQgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJl
c29sdmVOb2RlOjplbWl0QgogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHJlc3VsdC5n
ZXQoKSwgbG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50
KGdlbmVyYXRvciwgcmVzdWx0LmdldCgpLCByZXN1bHQuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0
b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1
bHREZXNjcmlwdG9yKCkpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5n
ZXQoKSwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9y
SW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVU
b0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQuZ2V0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1l
bnQoZ2VuZXJhdG9yLCBsb2NhbC5nZXQoKSwgbG9jYWwuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0
b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1
bHREZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRl
eHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQogCkBAIC0xNTQwLDExICsx
NTQyLDEzIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXBEc3QuZ2V0KCks
IG1fcmlnaHQpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0
ZW1wRHN0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250
ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wRHN0LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBS
ZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwuZ2V0KCksIG1fcmln
aHQpOworICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxv
Y2FsLmdldCgpKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE5MjAsMTAyICsxOTI0LDIxNyBAQCB2
b2lkIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JJbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLXZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjp0
cnlHZXRCb3VuZExvY2FsKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7Ci0gICAgTGFi
ZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxv
b3ApOwotCi0gICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1lbnRMb2NhdGlvbigpKSB7Ci0gICAg
ICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3It
aW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVy
KCk7CisgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKKyAgICAg
ICAgaWYgKGxvY2FsLmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gbG9jYWwuZ2V0KCk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgp
LCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgaWYgKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25O
b2RlKCkpIHsKKyAgICAgICAgRGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSogYXNzaWduTm9k
ZSA9IHN0YXRpY19jYXN0PERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqPihtX2xleHByKTsK
KyAgICAgICAgYXV0byBiaW5kaW5nID0gYXNzaWduTm9kZS0+YmluZGluZ3MoKTsKKyAgICAgICAg
aWYgKCFiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlLmdldCgpLCBtX2V4cHIpOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzaXplID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
aXRlciA9IGdlbmVyYXRvci5lbWl0R2V0UHJvcGVydHlOYW1lcyhnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCksIHNpemUuZ2V0KCksIHNjb3BlLT5icmVha1Rhcmdl
dCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwor
ICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJp
bmRpbmcpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmct
PmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwo
aWRlbnQpOworICAgICAgICBpZiAobG9jYWwuaXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBsb2NhbC5nZXQoKTsKKyAgICB9CiAKLSAgICBS
ZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdExvb3BI
aW50KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU5hbWU7Ci0gICAgYm9vbCBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IGZhbHNlOwordm9pZCBGb3JJ
bk5vZGU6OmVtaXRMb29wSGVhZGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSkKK3sKICAgICBpZiAobV9sZXhwci0+aXNSZXNvbHZlTm9kZSgp
KSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihtX2xleHByKS0+aWRlbnRpZmllcigpOwogICAgICAgICBMb2NhbCBsb2NhbCA9IGdl
bmVyYXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmICghbG9jYWwuZ2V0KCkpIHsKLSAgICAg
ICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOworICAgICAgICBp
ZiAobG9jYWwuZ2V0KCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0
KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGdlbmVy
YXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAg
ICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCBpZGVudCwgcHJvcGVydHlOYW1lLCBn
ZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZO
b3RGb3VuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlw
dCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9
IGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLnB1c2hP
cHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQoKSwgaS5nZXQo
KSwgbG9jYWwuZ2V0KCkpOwotICAgICAgICAgICAgb3B0aW1pemVkRm9yaW5BY2Nlc3MgPSB0cnVl
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2xleHByLT5pc0RvdEFjY2Vzc29yTm9kZSgp
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNz
b3JOb2RlKCkpIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGlj
X2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gYXNzaWduTm9kZS0+aWRlbnRpZmllcigpOwotICAgICAgICBwcm9wZXJ0eU5h
bWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7Ci0KICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZv
dFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3BlcnR5TmFtZSk7Ci0gICAgfSBlbHNlIGlmIChtX2xl
eHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChtX2xleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBCcmFj
a2V0QWNjZXNzb3JOb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29y
Tm9kZSo+KG1fbGV4cHIpOwotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlO
YW1lOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShhc3NpZ25Ob2RlLT5iYXNlKCkpOwogICAgICAgICBSZWdpc3RlcklEKiBzdWJzY3JpcHQgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+c3Vic2NyaXB0KCkpOwotICAgICAgICAKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZvdCgpLCBh
c3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kKCkpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHN1YnNjcmlwdCwgcHJvcGVydHlO
YW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9sZXhwci0+aXNEZWNvbnN0cnVj
dGlvbk5vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sZXhwci0+
aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgewogICAgICAgICBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1l
bnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50
Tm9kZSo+KG1fbGV4cHIpOwogICAgICAgICBhdXRvIGJpbmRpbmcgPSBhc3NpZ25Ob2RlLT5iaW5k
aW5ncygpOwotICAgICAgICBpZiAoYmluZGluZy0+aXNCaW5kaW5nTm9kZSgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJpbmRp
bmcpOwotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IHNpbXBsZUJpbmRpbmctPmJvdW5k
UHJvcGVydHkoKTsKLSAgICAgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlk
ZW50KTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGxvY2FsLmdldCgpOwotICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCBJIGVtaXQgZXhwcmVzc2lvbiBpbmZvIGhlcmU/Ci0gICAgICAg
ICAgICBpZiAoIXByb3BlcnR5TmFtZSB8fCBsb2NhbC5pc0NhcHR1cmVkKCkgfHwgZ2VuZXJhdG9y
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgICAgICAgICAgZ290
byBnZW5lcmljQmluZGluZzsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJh
dG9yLmVtaXRNb3ZlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgICAgIGdlbmVyYXRvci5wdXNoT3B0aW1pc2VkRm9ySW4oZXhwZWN0ZWRTdWJzY3JpcHQu
Z2V0KCksIGl0ZXIuZ2V0KCksIGkuZ2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBv
cHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBnb3RvIGNvbXBsZXRlZFNp
bXBsZUJpbmRpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdlbmVyaWNCaW5kaW5nOgot
ICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgaWYgKCFiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKKyAgICAgICAgICAgIGFzc2lnbk5v
ZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcg
PSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJpbmRpbmcpOworICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAg
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAoIWxvY2Fs
LmdldCgpIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgYXNzaWduTm9kZS0+
YmluZGluZ3MoKS0+YmluZFZhbHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBjb21wbGV0ZWRTaW1wbGVCaW5kaW5nOgot
ICAgICAgICA7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQogCi0gICAgaWYgKG9wdGltaXplZEZvcmluQWNjZXNzKQotICAgICAgICBnZW5lcmF0b3IucG9w
T3B0aW1pc2VkRm9ySW4oKTsKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0TXVsdGlMb29wQnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlm
ICghbV9sZXhwci0+aXNBc3NpZ25tZW50TG9jYXRpb24oKSkgeworICAgICAgICBlbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJMZWZ0IHNpZGUgb2YgZm9yLWluIHN0YXRlbWVudCBp
cyBub3QgYSByZWZlcmVuY2UuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXROZXh0
UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgYmFzZS5nZXQoKSwgaS5nZXQoKSwgc2l6ZS5nZXQo
KSwgaXRlci5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxp
bmVTdGFydE9mZnNldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1Rh
cmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsZW5ndGg7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHN0cnVjdHVyZUVudW1lcmF0b3I7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGJh
c2UuZ2V0KCksIG1fZXhwcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdGhpcy0+
dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOworCisgICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBs
b29wLgorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdM
YWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BT
dGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BF
bmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAgICAgICBsZW5ndGggPSBnZW5lcmF0b3Iu
ZW1pdEdldEVudW1lcmFibGVMZW5ndGgoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdl
dCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3Vs
dCA9IGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcChvcF9sZXNzLCBnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIGkuZ2V0KCksIGxlbmd0aC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmRmFsc2UocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIYXNJbmRleGVkUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBpLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIHNjb3Bl
LT5jb250aW51ZVRhcmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdFRvSW5kZXhTdHJp
bmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdldCgpKTsKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BI
ZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRv
ci5wdXNoSW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5w
b3BJbmRleGVkRm9ySW5TY29wZShsb2NhbC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
SW5jKGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgp
KTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CisgICAgfQorCisgICAgLy8gU3RydWN0dXJlIHBy
b3BlcnR5IGxvb3AuCisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJh
dG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJl
bD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJl
bD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAgIHN0cnVjdHVyZUVu
dW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGxlbmd0aC5nZXQoKSk7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgc3Ry
dWN0dXJlRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50
KCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0
VW5hcnlPcChvcF9lcV9udWxsLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFt
ZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc1N0cnVjdHVyZVByb3Bl
cnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1
cmVFbnVtZXJhdG9yLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShy
ZXN1bHQuZ2V0KCksIHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKworICAgICAgICB0aGlzLT5l
bWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAg
Z2VuZXJhdG9yLnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpLCBpLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5w
b3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9w
ZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmVFbnVtZXJhdG9yLmdldCgpLCBp
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7Cisg
ICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CisgICAgfQorCisgICAgLy8gR2VuZXJpYyBw
cm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVy
YXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAgICAgICBSZWZQdHI8TGFi
ZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWZQdHI8TGFi
ZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZ2VuZXJpY0VudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldEdlbmVyaWNQcm9w
ZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBsZW5n
dGguZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCkpOworICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdE5leHRF
bnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZ2VuZXJpY0VudW1lcmF0
b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0g
Z2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVl
KHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7
CisKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUu
Z2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsK
KworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmlj
RW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VW5hcnlP
cChvcF9lcV9udWxsLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwor
CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzR2VuZXJpY1Byb3BlcnR5KHJlc3VsdC5nZXQoKSwg
YmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgCisgICAgICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChs
b29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9m
ZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7Cit9CisKK3ZvaWQg
Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQoreworICAgIHRoaXMtPmVtaXRNdWx0aUxvb3BCeXRlY29kZShnZW5lcmF0
b3IsIGRzdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JPZk5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDE3MTIy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAogICAgIEpTU2NvcGUqIGpz
U2NvcGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLmdldCgpOyB9CiAKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
U2NvcGU+IG1fc2NvcGU7CiAgICAgV3JpdGVCYXJyaWVyPERlYnVnZ2VyU2NvcGU+IG1fbmV4dDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3Jv
KEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3JvKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0
ZXJzKSBcCisgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5
TmFtZXMpIFwKICAgICBtYWNybyhOYW1lZFByb3BlcnRpZXMpIFwKICAgICBtYWNybyhJbmRleGVk
SW50MzJQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTc3NywxMyArMTc3Nyw1MSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBJ
bjoKKyAgICBjYXNlIEluOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdo
ZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CiAgICAg
ICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKKyAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0dlbmVy
aWNQcm9wZXJ0eTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTog
eworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51
bWVyYXRvcjogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTgzLDYgKzMxODMsODIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW4pOwogICAgICAgICB9CiAKKyAgICAgICAg
Y2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0
RW51bWVyYWJsZUxlbmd0aCwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEhhc0dlbmVy
aWNQcm9wZXJ0eSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFw
aChIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAg
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSksCisg
ICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eTogeworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGdldEFycmF5TW9kZUNvbnNpZGVyaW5nU2xvd1BhdGgoY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOworICAgICAgICAgICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3Jh
cGgoSGFzSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYmFzZSwg
cHJvcGVydHkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgaGFzSXRlcmFibGVQcm9wZXJ0eSk7CisgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSk7CisKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQocHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCAKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0RGlyZWN0UG5hbWUsIE9wSW5mbygwKSwg
T3BJbmZvKHByZWRpY3Rpb24pKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9k
aXJlY3RfcG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJl
X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9y
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51
bWVyYXRvcjogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZTogewor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChOZXh0RW51bWVyYXRvclBuYW1lLCAKKyAgICAgICAgICAgICAg
ICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwK
KyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV4dF9lbnVtZXJh
dG9yX3BuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5n
OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKFRvSW5kZXhTdHJpbmcsIAorICAgICAgICAgICAgICAg
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7
CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworICAgICAgICB9
CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBz
aG91bGQgbm90IGhhcHBlbiBiZWNhdXNlIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tlcgogICAgICAg
ICAgICAgLy8gc2hvdWxkIGhhdmUgY2F1Z2h0IGl0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTMsNiArMTkzLDE1IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQKICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgogICAgIGNhc2Ugb3BfaW46CiAgICAgY2Fz
ZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoK
KyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVy
dHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0
b3I6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CisgICAgY2FzZSBvcF90b19p
bmRleF9zdHJpbmc6CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogCiAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw5MSBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgSGFz
R2VuZXJpY1Byb3BlcnR5OgorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVt
ZXJhdG9yOgorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNl
IEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShX
b3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6
IHsKKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2Jq
ZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBOZXh0RW51bWVy
YXRvclBuYW1lOiB7CisgICAgICAgIHJlYWQoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZFByb3BlcnR5TmFtZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgcmVhZChKU0NlbGxfaW5kZXhpbmdUeXBlKTsKKyAg
ICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRz
KCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAg
ICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdy
aXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJ
bkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAg
ICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAg
ICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAg
aWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFk
KFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0
b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQXJyYXlTdG9yYWdlUHJvcGVydGllcyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICByZWFkKFdvcmxk
KTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYXNlIEFyaXRoQWRkOgogICAgIGNhc2UgQXJp
dGhTdWI6CiAgICAgY2FzZSBBcml0aE5lZ2F0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4NywxMSBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2UgSGFzR2VuZXJp
Y1Byb3BlcnR5OgorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6CisgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpAQCAtMjA5LDYgKzIxNCwxMCBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBOZXdGdW5j
dGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgogICAgIGNhc2UgVGhyb3dS
ZWZlcmVuY2VFcnJvcjoKKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjoK
KyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2FzZSBOZXh0RW51
bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTcxMjI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAzMCw2ICsxMDMwLDY0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgb2Jz
ZXJ2ZVVzZUtpbmRPbk5vZGU8U3RyaW5nVXNlPihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAg
ICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAg
ICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsK
KyAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJh
eU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIFNwZWNOb25lLCBub2RlLT5mbGFncygpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFt
ZTogeworICAgICAgICAgICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCk7CisgICAgICAgICAgICBFZGdlJiBwcm9wZXJ0eSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMik7CisgICAgICAgICAgICBFZGdlJiBlbnVtZXJhdG9yID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAzKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4ocHJvcGVydHkpOworICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkludDMyVXNlPihpbmRleCk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVz
ZT4oZW51bWVyYXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50
MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAg
Zml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3du
SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRo
ZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRk
IGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMSw2ICsxMDAxLDcgQEAgc3RydWN0IE5vZGUg
ewogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgc3dpdGNoIChv
cCgpKSB7CisgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CkBA
IC0xMjYxLDYgKzEyNjIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgQXJyYXlQ
b3A6CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzEyMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4OCw2ICsyODgsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjaywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIFwKKyAgICAvKiBGb3ItaW4gZW51bWVyYXRpb24gb3Bjb2Rl
cyAqL1wKKyAgICBtYWNybyhHZXRFbnVtZXJhYmxlTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSGFzSW5kZXhlZFByb3BlcnR5LCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8o
SGFzR2VuZXJpY1Byb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4p
IFwKKyAgICBtYWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oR2V0U3RydWN0dXJlUHJvcGVydHlF
bnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8o
R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRKUykgXAorICAgIG1hY3JvKE5leHRFbnVtZXJhdG9yUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMp
CiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQg
Zm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51
bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlkTWFzaykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MCw2ICsxODAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAg
ICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRp
dmVDYWxsOgpAQCAtNTUwLDYgKzU1MSwzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVt
ZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY0NlbGwgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNl
IHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCwxNSBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNl
IEdldEdldHRlcjoKICAgICBjYXNlIEdldFNldHRlcjoKKyAgICBjYXNlIEdldEVudW1lcmFibGVM
ZW5ndGg6CisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6CisgICAgY2FzZSBIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICBjYXNlIEdldERp
cmVjdFBuYW1lOgorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOgorICAg
IGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIE5leHRFbnVtZXJh
dG9yUG5hbWU6CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTcxMjI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAj
aW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5j
bHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCkBAIC00NTQ4LDYgKzQ1NDksMjQ4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uR2V0RW51bWVyYWJsZUxlbmd0aCwgcmVzdWx0R1BSLCBiYXNlLmdwcigpKTsKKyAg
ICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1
bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VQYXlsb2FkR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7CisgICAgICAg
IEdQUlJlZyBiYXNlVGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCBwcm9w
ZXJ0eS5ncHIoKSk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5
OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAg
R1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0
VGFnKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlVGFnR1BSID0gYmFzZS50YWdHUFIoKTsK
KyAgICAgICAgR1BSUmVnIGJhc2VQYXlsb2FkR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2Fk
R1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9
IHJlc3VsdFRhZy5ncHIoKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICBz
Y3JhdGNoR1BSLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0
b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZVRhZ0dQUiwgYmFzZVBheWxvYWRHUFIs
IHByb3BlcnR5R1BSKSk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0
eTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAg
IEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
CisgICAgICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZTogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
ICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIs
IHNjcmF0Y2hGUFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGlu
ZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdFBheWxvYWRHUFIpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCBiYXNlR1BSLCBpbmRleEdQUikpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgIEVk
Z2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAg
ICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAx
KTsKKyAgICAgICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAyKTsKKyAgICAgICAgRWRnZSYgZW51bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDMpOworCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgYmFzZUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBwcm9wZXJ0eUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgo
dGhpcywgaW5kZXhFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRv
cih0aGlzLCBlbnVtZXJhdG9yRWRnZSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2Fk
KHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQ
UiA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdy
b25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgCisgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChi
YXNlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7CisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGlu
ZUFjY2Vzcy5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
UGF5bG9hZEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAg
IG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOworICAgICAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RCdXR0ZXJmbHlQcm9wZXJ0eSA9IC0yICogc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7IAorICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdEJ1dHRlcmZseVByb3Bl
cnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdH
UFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1
bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zm
c2V0T2ZGaXJzdEJ1dHRlcmZseVByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7CisKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbENlbGwsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZUdQUiwgc2NyYXRj
aEdQUiwgcHJvcGVydHlHUFIpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQ
UiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRl
SW50MzJPcGVyYW5kIGxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJl
c3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgYmFzZS5n
cHIoKSwgbGVuZ3RoLmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVt
ZXJhdG9yOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgbGVuZ3RoKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0
aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRHZW5lcmljUHJv
cGVydHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIGxlbmd0aC5ncHIoKSwgZW51
bWVyYXRvci5ncHIoKSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIEdQ
UlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywgCisgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlc3VsdFRhZ0dQUik7
CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0UGF5bG9hZEdQUik7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKKyAgICAgICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOworCisgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBy
ZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2Nh
bGVQdHIpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdHUFIpOworCisg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGlu
ZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhT
dHJpbmcsIHJlc3VsdEdQUiwgaW5kZXguZ3ByKCkpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgRm9yY2VPU1JF
eGl0OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVD
b3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2Jq
ZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAKQEAgLTQ1
ODIsNiArNDU4MywyMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6
IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVuZ3RoLCByZXN1bHRHUFIs
IGJhc2UuZ3ByKCkpOworICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6IHsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0R1BSLCBiYXNlLmdwcigp
LCBwcm9wZXJ0eS5ncHIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
SGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51
bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIsIAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRH
UFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwor
CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uSGFzR2VuZXJp
Y1Byb3BlcnR5LCByZXN1bHRHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKSk7CisgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2Rl
LT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAg
ICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgICAgIEFT
U0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7
CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hH
UFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3Vs
dEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5LCByZXN1bHRHUFIsIGJhc2VHUFIsIGlu
ZGV4R1BSKSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogeworICAgICAgICBF
ZGdlJiBiYXNlRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAg
ICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
MSk7CisgICAgICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQo
bm9kZSwgMik7CisgICAgICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAzKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHko
dGhpcywgcHJvcGVydHlFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4
KHRoaXMsIGluZGV4RWRnZSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0
b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSkpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Cisg
ICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgCisgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hH
UFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9q
aXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5zaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgCisgICAgICAgICAgICAtMiAqIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHRHUFIs
IGJhc2VHUFIsIHByb3BlcnR5R1BSKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBsZW5n
dGgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0U3RydWN0
dXJlUHJvcGVydHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIGxlbmd0aC5ncHIo
KSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvciwg
cmVzdWx0R1BSLCBiYXNlLmdwcigpLCBsZW5ndGguZ3ByKCksIGVudW1lcmF0b3IuZ3ByKCkpOwor
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1
bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OworCisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgCisgICAgICAgICAgICBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVzdWx0
R1BSKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAg
ICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgcmVzdWx0R1BSLCBpbmRleC5ncHIoKSk7
CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCiAjaWYgRU5BQkxFKEZUTF9KSVQpICAgICAgICAKICAgICBjYXNlIENoZWNrVGllclVw
SW5Mb29wOiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFu
Y2hBZGQzMigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzNCw2ICsxMDM0LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0
ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUNaIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRp
b25fRUNaQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBjZWxsKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIoY2VsbCkpOwpAQCAtMTEzMiw2ICsxMTQyLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
Q2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvblNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRp
b25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5h
bWUgQXJndW1lbnRUeXBlMT4KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEZ1
bmN0aW9uVHlwZSBvcGVyYXRpb24sIE5vUmVzdWx0VGFnLCBBcmd1bWVudFR5cGUxIGFyZzEpCkBA
IC0xMjQ4LDYgKzEyNjMsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAg
ICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9F
Q1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FU3NpQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBs
KiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CkBAIC0x
MjYzLDYgKzEyODMsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkMgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJ
VE9wZXJhdGlvbl9FSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CkBAIC0xMzExLDYgKzEzNDEs
MjEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSkpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
SklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKWkMgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsK
KyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFy
ZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oU19KSVRPcGVyYXRpb25fSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHMoYXJnMSk7CkBAIC0x
NDg0LDYgKzE1MjksMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFn
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJh
dGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgcmVzdWx0VGFn
LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcg
YXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0
VGFnKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9w
ZXJhdGlvbl9FSnNzWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQ
YXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CkBAIC0xNTE1LDYgKzE1NzAs
MTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsK
ICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlv
bl9FQ1ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9K
SVRPcGVyYXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIGFyZzEsIGNv
bnN0IFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgYXJnMSwgVHJ1c3RlZEltbVB0
cih1aWQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE3MTIy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAzLDYgKzMwMywxNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlX3Njb3BlKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2Zyb21fc2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfdG9fc2NvcGUpCisKKyAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCkKKyAgICAgICAgREVGSU5F
X09QKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2RpcmVjdF9wbmFtZSkKKyAgICAgICAgREVG
SU5FX09QKG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikKKyAgICAgICAgREVG
SU5FX09QKG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgICAgIERFRklO
RV9PUChvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpCisgICAgICAgIERFRklORV9PUChvcF90b19p
bmRleF9zdHJpbmcpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkBAIC00MjAsNiArNDMwLDkgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X3N1YikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3RvX251bWJlcikKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX3RvX3ByaW1pdGl2ZSkKKyAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2dldF9kaXJlY3RfcG5hbWUpCiAKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3Jl
c29sdmVfc2NvcGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29w
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTcxMjI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIy
NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQog
CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoVk0qIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIGppdC5tX2J5dGVj
b2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywg
YXJyYXlNb2RlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyBDb2RlUmVmIGNvbXBpbGVD
VElOYXRpdmVDYWxsKFZNKiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKCF2bS0+Y2FuVXNlSklUKCkpIHsKQEAgLTI1Niw2ICsyNjMsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1v
ZGUpOwogCisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKwogICAgICAgICBMYWJl
bCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qLCBib29sIGlzQ29uc3RydWN0ID0gZmFs
c2UpOwogICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChWTSosIE5h
dGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlM
ZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKQEAgLTMzNiw2ICszNDUsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFu
ZCB6ZXJvIGV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4KICAgICAgICAgLy8gU3RydWN0
dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuIFJldHVybnMgdGhlIHNsb3cgY2FzZXMuIEZhbGwtdGhy
b3VnaAogICAgICAgICAvLyBjYXNlIGNvbnRhaW5zIHJlc3VsdCBpbiByZWdUMCwgYW5kIGl0IGlz
IG5vdCB5ZXQgcHJvZmlsZWQuCisgICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMkxvYWQoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKSB7IHJldHVybiBlbWl0
Q29udGlndW91c0xvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIEludDMyU2hhcGUpOyB9CisgICAg
ICAgIEp1bXBMaXN0IGVtaXREb3VibGVMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlID0g
Q29udGlndW91c1NoYXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUxvYWQo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3Qg
ZW1pdExvYWRGb3JBcnJheU1vZGUoSW5zdHJ1Y3Rpb24qLCBKSVRBcnJheU1vZGUsIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpOworCiAgICAgICAgIEp1bXBMaXN0IGVtaXRJbnQzMkdldEJ5VmFsKElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkgeyByZXR1cm4g
ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgSW50MzJTaGFwZSk7
IH0KICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0
QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUg
ZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7CkBAIC01NDksNiArNTY0LDE1IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2FkKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eShJbnN0cnVjdGlvbiopOworICAgICAgICB2
b2lkIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRv
cihJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbmV4dF9lbnVtZXJhdG9yX3Bu
YW1lKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF90b19pbmRleF9zdHJpbmco
SW5zdHJ1Y3Rpb24qKTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CkBAIC02MDIsNiArNjI2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Vuc2lnbmVkKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3Vyc2hpZnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlv
biopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9u
IDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw1MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIFVT
RShKU1ZBTFVFNjQpCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6ZW1pdERv
dWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0RG91YmxlTG9hZChpbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVnVDApOworICAg
IHN1YjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgIHJldHVybiBzbG93Q2Fz
ZXM7Cit9CisjZWxzZQoraW5saW5lIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRE
b3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdERvdWJsZUxvYWQoaW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworICAgIG1vdmVEb3VibGVUb0ludHMoZnBSZWdUMCwgcmVnVDAsIHJl
Z1QxKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQp
CisKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6ZW1pdExvYWRG
b3JBcnJheU1vZGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGFycmF5
TW9kZSkgeworICAgIGNhc2UgSklUSW50MzI6CisgICAgICAgIHJldHVybiBlbWl0SW50MzJMb2Fk
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgY2FzZSBKSVREb3VibGU6CisgICAg
ICAgIHJldHVybiBlbWl0RG91YmxlTG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwor
ICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgcmV0dXJuIGVtaXRDb250aWd1b3VzTG9h
ZChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdl
OgorICAgICAgICByZXR1cm4gZW1pdEFycmF5U3RvcmFnZUxvYWQoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2lubGluZSBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hh
cGUpCit7CisgICAgcmV0dXJuIGVtaXRDb250aWd1b3VzTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlw
ZSwgZXhwZWN0ZWRTaGFwZSk7Cit9CisKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIHJldHVybiBlbWl0QXJyYXlTdG9yYWdlTG9h
ZChpbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlRG91YmxlKGludCBzcmMpCiB7CiAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3Bl
cmFuZChzcmMpLmlzRG91YmxlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEw
ICszNiwxMiBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTVmFy
aWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiTWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAj
aW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAK
QEAgLTExNzYsNiArMTE3OCwyMzUgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9hcmd1bWVu
dF9ieV92YQogICAgIGNhbGxPcGVyYXRpb24oV2l0aFByb2ZpbGUsIG9wZXJhdGlvbkdldEJ5VmFs
R2VuZXJpYywgZHN0LCByZWdUMSwgcmVnVDAsIHJlZ1QzLCByZWdUMik7CiB9CiAKK3ZvaWQgSklU
OjplbWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBzbG93
UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdU
MCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOworCisgICAgZW1pdExv
YWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKKworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisgICAgCisgICAgbW92ZShU
cnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQoreworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19nZW5lcmljX3Byb3BlcnR5
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9oYXNfZ2Vu
ZXJpY19wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7
CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAg
IFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KKyAgICBKdW1wTGlz
dCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFy
cmF5TW9kZSwgYmFkVHlwZSk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3Zt
LCB0aGlzLCBtX2NvZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBl
LCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVG
cm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNl
dChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsCisgICAgICAgICgiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwg
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8t
PmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdl
bmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJl
Z1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CisKKyAgICBlbWl0
TG9hZFBheWxvYWQocHJvcGVydHksIHJlZ1QxKTsKKworICAgIC8vIFRoaXMgaXMgdGVjaG5pY2Fs
bHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3Qg
cGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgorICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBp
ZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxs
IGFsd2F5cyBmYWlsIGlmCisgICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JM
ZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0
aW9uCisgICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBl
eHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUK
KyAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFk
ZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KKyAgICAv
LyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUg
aW4gdGhlIHNsb3cgY2FzZS4KKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwor
CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmls
ZSk7CisgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwor
CisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAg
UGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBv
dGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1v
ZGUsIGJhZFR5cGUpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisKKyAgICBh
ZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAor
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIGVtaXRTdG9yZUJvb2woZHN0LCBy
ZWdUMCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21w
aWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHBy
b3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAg
CisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBj
aGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjaworICAgIAor
ICAgIEp1bXAgc2tpcFByb2ZpbGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGVtcHR5IHZhbHVlCisgICAgCisgICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lh
bENhc2UocHJvZmlsZSk7CisgICAgCisgICAgc2tpcFByb2ZpbGluZy5saW5rKHRoaXMpOworICAg
IAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKKyAgICBlbWl0TG9hZChiYXNl
LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
RGVmYXVsdCwgZHN0LCByZWdUMSwgcmVnVDAsIHJlZ1QzLCByZWdUMik7CisKKyAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9
IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4
Kys7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
KyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisK
KyAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgZW1pdExvYWRQYXlsb2FkKGJh
c2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CisKKyAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3Is
IHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpKSkpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgZW1pdExv
YWRQYXlsb2FkKGluZGV4LCByZWdUMik7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRo
ZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5l
IGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgbG9hZDMyKEJhc2VJbmRl
eChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgcmVnVDEpOworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBy
ZWdUMCk7CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICBzdWIzMihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgbmVnMzIocmVnVDIpOwor
ICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCAtMiAqIHN0YXRp
Y19jYXN0PGludDMyX3Q+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIC0yICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZWdUMCk7CisgICAgCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOworICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51
bWVyYXRvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
Z2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJh
dG9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRf
Z2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKKworICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOworICAgIGVtaXRMb2Fk
UGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMy
KEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAgIG1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoMCks
IHJlZ1QwKTsKKworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBsb2Fk
UHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIHRpbWVzUHRyKCkpLCByZWdUMCk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKKworICAgIGRvbmUubGlu
ayh0aGlzKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CisgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxMSBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIK
ICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRl
ICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIApAQCAtMTIx
MCw2ICsxMjEyLDIzNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FwdHVyZWRfbW92KEluc3Ry
CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCit2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZWdUMCk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2hhc19nZW5lcmljX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CisgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsK
KyAgICAKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlw
ZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNTAzNC4KKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZv
ckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlwZSk7CisgICAg
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdU
MCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmso
YmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVG
cm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNl
dChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVs
QXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8t
PnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5k
YXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlW
YWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9G
dW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHlHZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOworCisgICAgLy8gVGhpcyBpcyB0
ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24g
dGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCisgICAgLy8gV2UgY2hlY2sgdGhlIHZh
bHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdo
aWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKKyAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBt
X3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFs
IGFsbG9jYXRpb24KKyAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3Vj
aCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRo
ZSB2YWx1ZQorICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBp
biB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2ln
bgorICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRo
ZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgorICAgIHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCBy
ZWdUMSk7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwor
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUp
OworICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKKwor
ICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKKworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3Ro
ZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgorICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgorICAgIEp1bXBMaXN0IHNsb3dD
YXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFk
VHlwZSk7CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCByZWdUMCk7CisKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwor
ICAgIAorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAKKyAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zm
c2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCisgICAgCisgICAgSnVtcCBza2lwUHJvZmlsaW5nID0g
anVtcCgpOworICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBj
aGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKKyAgICAKKyAgICBl
bWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICAKKyAg
ICBza2lwUHJvZmlsaW5nLmxpbmsodGhpcyk7CisgICAgCisgICAgTGFiZWwgc2xvd1BhdGggPSBs
YWJlbCgpOworICAgIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRz
dCwgcmVnVDAsIHJlZ1QxKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNh
bGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgaW5kZXggPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3Vy
cmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKworICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhIGNlbGwKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgLy8gQ2hlY2sg
dGhlIHN0cnVjdHVyZQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7CisKKyAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICAKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAg
ICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vzcy5saW5r
KHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBu
ZWczMihyZWdUMSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgLTIgKiBzdGF0aWNfY2Fz
dDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSksIHJlZ1QwKTsKKyAgICAKKyAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGJhc2UgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXIsIGJhc2UpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0
X2RpcmVjdF9wbmFtZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5
X2VudW1lcmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1l
cmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X25leHRfZW51bWVyYXRvcl9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQg
aW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDEpOworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
cmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJv
cGVydHlOYW1lc0xlbmd0aE9mZnNldCgpKSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1
ZU51bGwpLCByZWdUMCk7CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgaW5Cb3VuZHMu
bGluayh0aGlzKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Cisg
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKworICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX3RvX2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgor
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0YWNrSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTV2l0aFNjb3BlLmgiCkBAIC0xNTAyLDYgKzE1MDMsNjQgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KICAgICAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5RGVmYXVsdChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsK
KyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0
KTsKKyAgICAKKyAgICBBU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOworICAgIEFTU0VSVChz
dWJzY3JpcHQuaXNVSW50MzIoKSk7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZVZhbHVlKTsKKyAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7CisKKyAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpOworICAg
IEFTU0VSVChieXRlY29kZU9mZnNldCk7CisgICAgQnlWYWxJbmZvJiBieVZhbEluZm8gPSBleGVj
LT5jb2RlQmxvY2soKS0+Z2V0QnlWYWxJbmZvKGJ5dGVjb2RlT2Zmc2V0IC0gMSk7CisgICAgQVNT
RVJUKCFieVZhbEluZm8uc3R1YlJvdXRpbmUpOworICAgIAorICAgIGlmIChoYXNPcHRpbWl6YWJs
ZUluZGV4aW5nKG9iamVjdC0+c3RydWN0dXJlKHZtKSkpIHsKKyAgICAgICAgLy8gQXR0ZW1wdCB0
byBvcHRpbWl6ZS4KKyAgICAgICAgSklUQXJyYXlNb2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9k
ZUZvclN0cnVjdHVyZShvYmplY3QtPnN0cnVjdHVyZSh2bSkpOworICAgICAgICBpZiAoYXJyYXlN
b2RlICE9IGJ5VmFsSW5mby5hcnJheU1vZGUpIHsKKyAgICAgICAgICAgIEpJVDo6Y29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eSgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCAmYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7CisgICAgICAgICAg
ICBkaWRPcHRpbWl6ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFk
aWRPcHRpbWl6ZSkgeworICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4g
MTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQorICAgICAgICAvLyBu
ZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gT3IsIGlmIHdlIGZhaWxlZCB0byBwYXRjaCBh
bmQgd2UgaGF2ZSBzb21lIG9iamVjdAorICAgICAgICAvLyB0aGF0IGludGVyY2VwdHMgaW5kZXhl
ZCBnZXQsIHRoZW4gZG9uJ3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLiBGb3IgY2FzZXMKKyAg
ICAgICAgLy8gd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcgb2JqZWN0cywgdGhp
cyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mCisgICAgICAgIC8vIG9wcG9ydHVuaXR5IGZv
ciB1cyB0byBvYnNlcnZlIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLgor
ICAgICAgICBpZiAoKytieVZhbEluZm8uc2xvd1BhdGhDb3VudCA+PSAxMAorICAgICAgICAgICAg
fHwgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgeworICAgICAgICAgICAg
Ly8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVy
IHJlcGF0Y2hCdWZmZXIoZXhlYy0+Y29kZUJsb2NrKCkpOworICAgICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9B
RERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LmFzVUludDMyKCkpKSk7
Cit9CisgICAgCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Cisg
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7
CisgICAgCisgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoc3Vi
c2NyaXB0LmlzVUludDMyKCkpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBzdWJzY3JpcHQuYXNVSW50MzIoKSkpKTsKK30KKyAgICAKIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMTgwMiw2ICsxODYx
LDcyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25WTUhhbmRsZUV4Y2UKICAgICBnZW5l
cmljVW53aW5kKHZtLCBleGVjLCB2bS0+ZXhjZXB0aW9uKCkpOwogfQogCitpbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uR2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZUNlbGwpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBi
YXNlQ2VsbC0+dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAg
ICByZXR1cm4gYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGV4ZWMs
IGJhc2UpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0dl
bmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
VmFsdWUsIEpTQ2VsbCogcHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIGlm
IChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKKworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZh
bHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5TmFtZSktPnRvSWRlbnRp
ZmllcihleGVjKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2VDZWxsLCBp
bnQzMl90IHN1YnNjcmlwdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU09iamVjdCogb2JqZWN0
ID0gYmFzZUNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQcm9wZXJ0
eShleGVjLCBzdWJzY3JpcHQpKSk7Cit9CisgICAgCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBjZWxsLCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAgICAgCisg
ICAgSlNPYmplY3QqIGJhc2UgPSBjZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOworICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CisKKyAgICByZXR1cm4gc3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBiYXNlLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4obGVuZ3RoKSk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRH
ZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlQ2Vs
bCwgaW50MzJfdCBsZW5ndGgsIEpTQ2VsbCogc3RydWN0dXJlRW51bWVyYXRvckNlbGwpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlQ2VsbC0+dG9PYmpl
Y3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NFUlQobGVuZ3Ro
ID49IDApOworCisgICAgcmV0dXJuIGdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGV4ZWMs
IGJhc2UsIGxlbmd0aCwganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KHN0cnVjdHVy
ZUVudW1lcmF0b3JDZWxsKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV4dEVudW1lcmF0b3JQbmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogZW51bWVy
YXRvckNlbGwsIGludDMyX3QgaW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcio+KGVudW1lcmF0b3JDZWxsKTsKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gZW51
bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7Cit9CisKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YywgaW50MzJfdCBpbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4ganNTdHJpbmco
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpbmRleCkuc3RyaW5nKCkpOworfQorCiB9IC8v
IGV4dGVybiAiQyIKIAogLy8gTm90ZTogZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3Rh
dGUoKSBuZWVkcyB0byBiZSBwbGFjZWQgYmVmb3JlIHRoZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niwx
MCArOTYsMTMgQEAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSgogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNDKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3Ry
aW5nSW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ1opKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRURBKShFeGVjU3RhdGUqLCBkb3VibGUsIEpTQXJy
YXkqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0
aW9uX0VFKShFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VJKShFeGVjU3RhdGUqLCBTdHJpbmdJbXBs
Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlv
bl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpaKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
KCpKX0pJVE9wZXJhdGlvbl9FSkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwq
KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9u
X0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSWRjKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciopOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMTE4LDkgKzEyMSwxNCBAQCB0eXBl
ZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEpTQ2VsbCogSklU
X09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJf
dCk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDKShF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKK3R5cGVkZWYg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUNaQykoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgaW50MzJfdCwgSlNDZWxsKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElP
TiAoKkNfSklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0
eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VJY2YpKEV4ZWNT
dGF0ZSosIElubGluZUNhbGxGcmFtZSopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
KCpDX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRl
ZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
ICgqQ19KSVRPcGVyYXRpb25fRUpaQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QsIEpTQ2VsbCopOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJh
dGlvbl9FSkpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEpT
Q2VsbCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9F
SnNzU3QpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CiB0eXBlZGVmIEpTQ2Vs
bCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NKc3MpKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19K
SVRPcGVyYXRpb25fRUpzc0pzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyos
IEpTU3RyaW5nKik7CkBAIC0xMzQsNiArMTQyLDcgQEAgdHlwZWRlZiBkb3VibGUgSklUX09QRVJB
VElPTiAoKkRfSklUT3BlcgogdHlwZWRlZiBkb3VibGUgSklUX09QRVJBVElPTiAoKkRfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIGludDMyX3Qg
SklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGludDMy
X3QgSklUX09QRVJBVElPTiAoKlpfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwordHlwZWRl
ZiBpbnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25f
RUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9P
UEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
OwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VKSikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTI3Nyw2ICsyODYs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsRGVmYXVsdChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlw
dCkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmcoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQp
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5l
cmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uVGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFM
Owogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBcmd1bWVudHMoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EZWxldGVCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGJh
c2UsIGNvbnN0IElkZW50aWZpZXIqKSBXVEZfSU5URVJOQUw7CkBAIC0zMDAsNiArMzExLDE0IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnIKIAogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkluaXRHbG9iYWxDb25zdChFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiop
OwogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RW51bWVyYWJsZUxlbmd0aChF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSGFzR2VuZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwq
KTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QsIEpTQ2VsbCop
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXh0RW51bWVyYXRvclBu
YW1lKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CisKIH0gLy8gZXh0
ZXJuICJDIgogCiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rRm9yKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsMTUg
KzE3MywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uCiAgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRl
Y29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIElu
ZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAg
ICAKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwotICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwogICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgIAogICAgIGxvYWQzMihCYXNlSW5k
ZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCiAgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlZ1QwKTsgLy8gcGF5bG9hZAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKQEAg
LTE4OSwzMiArMTg3LDI3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5
VmEKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERv
dWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihEb3VibGVT
aGFwZSkpOwotICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDMpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwotICAgIAogICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHJlZ1QzLCByZWdU
MiwgVGltZXNFaWdodCksIGZwUmVnVDApOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91
YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKLSAgICBt
b3ZlRG91YmxlVG9JbnRzKGZwUmVnVDAsIHJlZ1QwLCByZWdUMSk7CiAgICAgCiAgICAgcmV0dXJu
IHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBhZGQzMihUcnVz
dGVkSW1tMzIoLUFycmF5U3RvcmFnZVNoYXBlKSwgcmVnVDEsIHJlZ1QzKTsKICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoU2xvd1B1dEFy
cmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICAKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3Mo
cmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCiAgICAg
bG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRP
RihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSwgcmVnVDEpOyAvLyB0YWcKICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qz
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0
b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVn
VDApOyAvLyBwYXlsb2FkCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjdGlvbgogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRv
bmUpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVj
dGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERv
dWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAgLTE2MCwxMyArMTYwLDExIEBAIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW4KICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKICAgICBsb2FkRG91YmxlKEJhc2VJbmRleChyZWdUMiwgcmVn
VDEsIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaERv
dWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QwKSk7Ci0gICAg
bW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVnVDApOwotICAgIHN1YjY0KHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVnVDApOwogICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6
SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCitKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCiB7CiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogICAgIApAQCAtMTc5LDcgKzE3Nyw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
Q29udGlndW91c0dldEJ5VmEKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAg
LTEyMTAsNiArMTIxMCw1MCBAQCBfbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZToKIF9sbGlu
dF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmU6CiAgICAgbmF0aXZlQ2FsbFRyYW1wb2xpbmUo
TmF0aXZlRXhlY3V0YWJsZTo6bV9jb25zdHJ1Y3RvcikKIAorX2xsaW50X29wX2dldF9lbnVtZXJh
YmxlX2xlbmd0aDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorICAgIGRpc3BhdGNoKDMpCisKK19sbGludF9v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNs
b3dQYXRoKF9zbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpCisgICAgZGlzcGF0Y2goNSkK
KworX2xsaW50X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgdHJhY2VFeGVjdXRpb24o
KQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCisg
ICAgZGlzcGF0Y2goNSkKKworX2xsaW50X29wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgIHRy
YWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9oYXNfZ2VuZXJpY19w
cm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg0KQorCitfbGxpbnRfb3BfZ2V0X2RpcmVjdF9wbmFtZToK
KyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0X2Rp
cmVjdF9wbmFtZSkKKyAgICBkaXNwYXRjaCg3KQorCitfbGxpbnRfb3BfZ2V0X3N0cnVjdHVyZV9w
cm9wZXJ0eV9lbnVtZXJhdG9yOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgZGlz
cGF0Y2goNCkKKworX2xsaW50X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6Cisg
ICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dldF9nZW5l
cmljX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgZGlzcGF0Y2goNSkKKworX2xsaW50X29wX25l
eHRfZW51bWVyYXRvcl9wbmFtZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKQorICAgIGRpc3BhdGNoKDQpCisK
K19sbGludF9vcF90b19pbmRleF9zdHJpbmc6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNh
bGxTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKKyAgICBkaXNwYXRjaCgzKQog
CiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9u
J3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJp
c2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4MCw2ICsx
MjgwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGb3JJbk5vZGUoVk0qLCBjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBEZWNvbnN0cnVjdGlvblBhdHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5v
ZGUqLCBTdGF0ZW1lbnROb2RlKik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBSZWdpc3RlcklE
KiB0cnlHZXRCb3VuZExvY2FsKEJ5dGVjb2RlR2VuZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dExvb3BIZWFkZXIoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUp
OworICAgICAgICB2b2lkIGVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqIGRzdCk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAgICAgfTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAko
cmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgQXJndW1lbnRz
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2IKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKICAgICB9Ci0g
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgIGlmIChzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSB7CiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jYWxsZWUpOwogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkocmV2aXNpb24gMTcxMjI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDYgKzgyLDEyIEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgdHlwZWRlZiB2
b2lkICgqR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyKShKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBHZXRQcm9wZXJ0eU5h
bWVzRnVuY3Rpb25QdHIgZ2V0UHJvcGVydHlOYW1lczsKIAorICAgIHR5cGVkZWYgdWludDMyX3Qg
KCpHZXRFbnVtZXJhYmxlTGVuZ3RoRnVuY3Rpb25QdHIpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7
CisgICAgR2V0RW51bWVyYWJsZUxlbmd0aEZ1bmN0aW9uUHRyIGdldEVudW1lcmFibGVMZW5ndGg7
CisKKyAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lczsKKyAgICBHZXRQcm9wZXJ0eU5hbWVzRnVuY3Rpb25QdHIgZ2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXM7CisKICAgICB0eXBlZGVmIFN0cmluZyAoKkNsYXNzTmFtZUZ1bmN0aW9uUHRyKShjb25z
dCBKU09iamVjdCopOwogICAgIENsYXNzTmFtZUZ1bmN0aW9uUHRyIGNsYXNzTmFtZTsKIApAQCAt
MTM3LDYgKzE0Myw5IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFzc05hbWU6
OmdldE93blByb3BlcnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldFByb3BlcnR5TmFtZXMs
IFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0RW51bWVyYWJsZUxlbmd0aCwgXAorICAgICAgICAm
Q2xhc3NOYW1lOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzLCBcCisgICAgICAgICZDbGFzc05h
bWU6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmNsYXNz
TmFtZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjpjdXN0b21IYXNJbnN0YW5jZSwgXAogICAgICAg
ICAmQ2xhc3NOYW1lOjpkZWZpbmVPd25Qcm9wZXJ0eSwgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzEy
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNOYW1l
U2NvcGUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgpAQCAtNTQyLDYgKzU0MywxMDUgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2VudGVyKQogICAgIEVORCgpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICBSRVRVUk4oanNOdW1iZXIoMCkpOworCisgICAgSlNPYmplY3Qq
IGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgUkVUVVJOKGpzTnVtYmVyKGJh
c2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBiYXNlKSkpOwor
fQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpCit7Cisg
ICAgQkVHSU4oKTsKKyAgICBKU09iamVjdCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVj
dChleGVjKTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIHBj
WzRdLnUuYXJyYXlQcm9maWxlLT5vYnNlcnZlU3RydWN0dXJlKGJhc2UtPnN0cnVjdHVyZSh2bSkp
OworICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMigpKTsKKyAgICBSRVRVUk4oanNCb29sZWFu
KGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5LmFzVUludDMyKCkpKSk7Cit9CisKK1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQoreworICAgIEJF
R0lOKCk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhl
Yyk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVt
ZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDQpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7CisgICAgaWYgKGJhc2UtPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVy
YXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVl
KSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBhc1N0cmlu
Zyhwcm9wZXJ0eS5hc0NlbGwoKSktPnRvSWRlbnRpZmllcihleGVjKSkpKTsKK30KKworU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KQoreworICAgIEJFR0lOKCk7
CisgICAgSlNPYmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7Cisg
ICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAgICBib29sIHJlc3VsdDsK
KyAgICBpZiAocHJvcGVydHkuaXNTdHJpbmcoKSkKKyAgICAgICAgcmVzdWx0ID0gYmFzZS0+aGFz
UHJvcGVydHkoZXhlYywgYXNTdHJpbmcocHJvcGVydHkuYXNDZWxsKCkpLT50b0lkZW50aWZpZXIo
ZXhlYykpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzIoKSk7
CisgICAgICAgIHJlc3VsdCA9IGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5LmFzVUlu
dDMyKCkpOworICAgIH0KKyAgICBSRVRVUk4oanNCb29sZWFuKHJlc3VsdCkpOworfQorCitTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKK3sKKyAgICBCRUdJTigpOwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcHJv
cGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkp
OworICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LnRvU3RyaW5nKGV4ZWMp
LT50b0lkZW50aWZpZXIoZXhlYykpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikKK3sKKyAgICBCRUdJTigpOworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y3JlYXRlKHZtKSk7CisgICAgICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVl
LnRvT2JqZWN0KGV4ZWMpOworICAgIHVpbnQzMl90IGxlbmd0aCA9IE9QKDMpLmpzVmFsdWUoKS5h
c1VJbnQzMigpOworCisgICAgUkVUVVJOKHN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Io
ZXhlYywgYmFzZSwgbGVuZ3RoKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRf
Z2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
cmVhdGUodm0pKTsKKyAgICAKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVj
dChleGVjKTsKKyAgICB1aW50MzJfdCBsZW5ndGggPSBPUCgzKS5qc1ZhbHVlKCkuYXNVSW50MzIo
KTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHN0cnVjdHVyZUVudW1lcmF0b3IgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oT1AoNCkuanNWYWx1ZSgpLmFzQ2VsbCgp
KTsKKworICAgIFJFVFVSTihnZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBiYXNl
LCBsZW5ndGgsIHN0cnVjdHVyZUVudW1lcmF0b3IpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSkKK3sKKyAgICBCRUdJTigpOworICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqPihPUCgyKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIHVpbnQzMl90IGluZGV4
ID0gT1AoMykuanNWYWx1ZSgpLmFzVUludDMyKCk7CisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFt
ZSA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIFJFVFVSTihw
cm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7Cit9CisKK1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCit7CisgICAgQkVHSU4oKTsKKyAgICBSRVRV
Uk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShleGVjLCBPUCgyKS5qc1ZhbHVlKCku
YXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTcxMjI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyNiw2ICsyMjYsMTUgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9pbik7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YWwpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOwogU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOworU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKK1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VudW1lcmF0aW9u
TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0VudW1l
cmF0aW9uTW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRW51bWVyYXRpb25Nb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRW51bWVyYXRpb25Nb2RlX2gKKyNkZWZpbmUgRW51bWVyYXRpb25N
b2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gRW51bWVyYXRpb25Nb2RlIHsKKyAgICBF
eGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzLAorICAgIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXNB
bmRTa2lwSlNPYmplY3QsCisgICAgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcywKKyAgICBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0Cit9OworCitpbmxpbmUgYm9vbCBz
aG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllczoK
KyAgICBjYXNlIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2lubGluZSBib29sIHNob3VsZEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMoRW51
bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBFeGNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAgIGNhc2UgRXhjbHVkZURvbnRFbnVtUHJvcGVydGll
c0FuZFNraXBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgc2hvdWxkSW5jbHVk
ZUpTT2JqZWN0UHJvcGVydHlOYW1lcyhFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXM6CisgICAgY2Fz
ZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgY2FzZSBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgRW51bWVyYXRpb25Nb2RlIG1vZGVUaGF0U2tpcHNK
U09iamVjdChFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXM6CisgICAgICAgIHJldHVybiBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OworICAgIGNhc2UgRXhjbHVkZURvbnRF
bnVtUHJvcGVydGllczoKKyAgICAgICAgcmV0dXJuIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXNB
bmRTa2lwSlNPYmplY3Q7CisgICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tp
cEpTT2JqZWN0OgorICAgIGNhc2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09i
amVjdDoKKyAgICAgICAgcmV0dXJuIG1vZGU7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVudW1lcmF0aW9uTW9kZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDE3MTIyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMSwxNCArMTExLDE0IEBAIHZvaWQgSlNBY3RpdmF0aW9uOjpnZXRPd25Ob25J
bmRleFByb3BlcnQKICAgICBKU0FjdGl2YXRpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBY3Rp
dmF0aW9uKj4ob2JqZWN0KTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gQ2FsbEZyYW1l
OjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxSZWdpc3Rlcio+KHRoaXNPYmplY3QtPm1fcmVnaXN0
ZXJzKSk7Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyAmJiAhdGhp
c09iamVjdC0+aXNUb3JuT2ZmKCkgJiYgKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVzZXNBcmd1
bWVudHMoKSB8fCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzRXZhbCgpKSkKKyAgICBpZiAo
c2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSAmJiAhdGhpc09iamVjdC0+aXNU
b3JuT2ZmKCkgJiYgKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnVzZXNBcmd1bWVudHMoKSB8fCBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzRXZhbCgpKSkKICAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyk7CiAKICAgICB7CiAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1f
bG9jayk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOwogICAgICAgICBmb3IgKFN5bWJvbFRhYmxl
OjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4obG9j
a2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0
dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGll
cykKKyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0g
JiYgIXNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWQoaXQtPnZh
bHVlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcg
KzIyNyw3IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWUKIHsKICAg
ICBKU0FycmF5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXkqPihvYmplY3QpOwogCi0gICAg
aWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICBpZiAoc2hvdWxkSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAKICAgICBKU09iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9p
ZCBKU0FycmF5QnVmZmVyOjpnZXRPd25Ob25JbmRleFByb3BlcgogewogICAgIEpTQXJyYXlCdWZm
ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KG9iamVjdCk7CiAgICAgCi0g
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICBpZiAoc2hvdWxk
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgYXJyYXkuYWRkKGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKICAgICAKICAgICBCYXNlOjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgYXJyYXksIG1vZGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3
LmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUJ1ZmZlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAg
dm9pZCBKU0FycmF5QnVmZmVyVmlldzo6Z2V0T3duTm9uSW5kZXhQcgogICAgIEpTQXJyYXlCdWZm
ZXJWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ob2JqZWN0KTsK
ICAgICAKICAgICAvLyBsZW5ndGgvYnl0ZU9mZnNldC9ieXRlTGVuZ3RoIGFyZSBEb250RW51bSwg
YXQgbGVhc3QgaW4gRmlyZWZveC4KLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKSB7CisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkp
IHsKICAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlT2Zmc2V0KTsK
ICAgICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5ieXRlTGVuZ3RoKTsKICAg
ICAgICAgYXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5idWZmZXIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiAxNzEyMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzYsNCArMjM2LDE5IEBAIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBKU0NlbGw6
OmdldFQKICAgICByZXR1cm4gMDsKIH0KIAordWludDMyX3QgSlNDZWxsOjpnZXRFbnVtZXJhYmxl
TGVuZ3RoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIEpTQ2VsbDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSlNDZWxs
OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAKICNpbmNsdWRlICJDYWxsRGF0YS5oIgogI2luY2x1ZGUgIkNvbnN0cnVjdERhdGEuaCIKKyNp
bmNsdWRlICJFbnVtZXJhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAi
SW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC00NiwxMSArNDcsNiBAQCBj
bGFzcyBQcm9wZXJ0eURlc2NyaXB0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIGNsYXNz
IFN0cnVjdHVyZTsKIAotZW51bSBFbnVtZXJhdGlvbk1vZGUgewotICAgIEV4Y2x1ZGVEb250RW51
bVByb3BlcnRpZXMsCi0gICAgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcwotfTsKLQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmKTsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJiwgc2l6ZV90KTsKIApAQCAtMjA5LDYgKzIw
NSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NS
QVNIIHZvaWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIHN0YXRpYyBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKworICAgIHN0YXRp
YyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2
b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgc3RhdGljIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKwogICAgIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgY3VzdG9tSGFzSW5zdGFuY2UoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBz
aG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MCw3ICszOTAsNyBAQCBi
b29sIEpTRnVuY3Rpb246OmdldE93blByb3BlcnR5U2xvdChKU09iCiB2b2lkIEpTRnVuY3Rpb246
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKIHsKICAgICBKU0Z1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRnVuY3Rpb24q
PihvYmplY3QpOwotICAgIGlmICghdGhpc09iamVjdC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24o
KSAmJiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkgeworICAgIGlmICghdGhp
c09iamVjdC0+aXNIb3N0T3JCdWlsdGluRnVuY3Rpb24oKSAmJiBzaG91bGRJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKG1vZGUpKSB7CiAgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAg
ICAgIC8vIE1ha2Ugc3VyZSBwcm90b3R5cGUgaGFzIGJlZW4gcmVpZmllZC4KICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QodGhpc09iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw3
ICs0MTEsNyBAQCB2b2lkIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpnCiB7CiAg
ICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXcqPihvYmplY3QpOwogICAgIAotICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMobW9kZSkpCiAgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KTsKICAgICAKICAgICBCYXNlOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgYXJyYXksIG1vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRDbGFzc1Byb3BlcnR5TmFtZXMKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUtPmJlZ2luKHZtKTsgaXRl
ciAhPSB0YWJsZS0+ZW5kKHZtKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoKCEoaXRlci0+
YXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpKSAmJiAhKChpdGVyLT5hdHRyaWJ1dGVzKCkgJiBCdWlsdGluT3JGdW5jdGlvbikgJiYg
ZGlkUmVpZnkpKQorICAgICAgICAgICAgaWYgKCghKGl0ZXItPmF0dHJpYnV0ZXMoKSAmIERvbnRF
bnVtKSB8fCBzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSAmJiAhKChpdGVy
LT5hdHRyaWJ1dGVzKCkgJiBCdWlsdGluT3JGdW5jdGlvbikgJiYgZGlkUmVpZnkpKQogICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGl0ZXIua2V5KCkpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTI4NCw2ICsxMjg0LDEyIEBAIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlcnR5KEV4
ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90KGNvbnN0X2Nhc3Q8SlNPYmplY3Qq
Pih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAorYm9vbCBKU09iamVjdDo6
aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNv
bnN0Cit7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CisgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOworfQorCiBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgo
SlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiB7CiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKQEAgLTE0NjQsNiArMTQ3
MCwxMiBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAKIHZvaWQg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CisgICAgaWYgKCFzaG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKG1v
ZGUpKSB7CisgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdG8gZ2V0IG5vbi1pbmRleGVkIHByb3Bl
cnRpZXMgZnJvbSBhbnkgc3ViY2xhc3NlcyBvZiBKU09iamVjdCB0aGF0IGhhdmUgdGhlbS4KKyAg
ICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICAvLyBBZGQgbnVtZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LiBUaGF0
IGFwcGVhcnMgdG8gYmUgdGhlIGFjY2VwdGVkIGNvbnZlbnRpb24uCiAgICAgLy8gRklYTUU6IEZp
bGxpbmcgUHJvcGVydHlOYW1lQXJyYXkgd2l0aCBhbiBpZGVudGlmaWVyIGZvciBldmVyeSBpbnRl
Z2VyCiAgICAgLy8gaXMgaW5jcmVkaWJseSBpbmVmZmljaWVudCBmb3IgbGFyZ2UgYXJyYXlzLiBX
ZSBuZWVkIGEgZGlmZmVyZW50IGFwcHJvYWNoLApAQCAtMTQ4MCw3ICsxNDkyLDcgQEAgdm9pZCBK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0xNDkyLDcgKzE1MDQsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqCiAgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXTsKICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZp
ZXI6OmZyb20oZXhlYywgaSkpOworICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTUwMyw3ICsxNTE1LDcgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICB1bnNpZ25lZCB1
c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3JhZ2UtPnZl
Y3Rvckxlbmd0aCgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRWZWN0
b3JMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKHN0b3JhZ2UtPm1fdmVjdG9yW2ldKQot
ICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywg
aSkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGkpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+
bV9zcGFyc2VNYXAuZ2V0KCkpIHsKQEAgLTE1MTIsMTMgKzE1MjQsMTMgQEAgdm9pZCBKU09iamVj
dDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iagogICAgICAgICAgICAgCiAgICAgICAgICAgICBT
cGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAtPmVuZCgpOwogICAg
ICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZGUg
PT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYg
RG9udEVudW0pKQorICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKG1vZGUpIHx8ICEoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCiAgICAg
ICAgICAgICAgICAgICAgIGtleXMudW5jaGVja2VkQXBwZW5kKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihpdC0+a2V5KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0
ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCkpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBrZXlzW2ldKSk7CisgICAgICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoa2V5c1tpXSk7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMTUyNiw3ICsxNTM4LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iagogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQotICAgIAorCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVj
LT52bSgpKS0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7CiB9CiAKQEAgLTE1MzQsMTIgKzE1NDYsMTEgQEAgdm9pZCBKU09iamVj
dDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbQogewogICAgIGdldENsYXNzUHJvcGVydHlOYW1l
cyhleGVjLCBvYmplY3QtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWVzLCBtb2RlLCBvYmplY3Qt
PnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7CiAKKyAgICBpZiAoIXNob3VsZEluY2x1ZGVKU09i
amVjdFByb3BlcnR5TmFtZXMobW9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIGJvb2wgY2FuQ2FjaGVQcm9wZXJ0aWVzRnJvbVN0cnVjdHVy
ZSA9ICFwcm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmdl
dFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLQot
ICAgIGlmIChjYW5DYWNoZVByb3BlcnRpZXNGcm9tU3RydWN0dXJlKQotICAgICAgICBwcm9wZXJ0
eU5hbWVzLnNldE51bUNhY2hlYWJsZVNsb3RzRm9yT2JqZWN0KG9iamVjdCwgcHJvcGVydHlOYW1l
cy5zaXplKCkpOwogfQogCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKQEAgLTI2NTIsNCArMjY2Myw4NSBAQCBKU09iamVjdCogdGhyb3dUeXBlRXJyb3Io
RXhlY1N0YXRlKiBleGVjCiAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpKTsKIH0KIAordWludDMyX3QgSlNPYmpl
Y3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKHN0cnVjdHVyZS0+aG9sZXNNdXN0Rm9y
d2FyZFRvUHJvdG90eXBlKHZtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3dpdGNoIChvYmpl
Y3QtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6
CisgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgCisgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IG9iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5n
dGggPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdXNlZExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWJ1dHRlcmZseS0+
Y29udGlndW91cygpW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB1c2VkTGVuZ3RoOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
b2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRl
cmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1
c2VkTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1c2Vk
TGVuZ3RoOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogeworICAgICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBvYmplY3QtPm1f
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPm1fc3BhcnNl
TWFwLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gc3RkOjptaW4oc3RvcmFnZS0+bGVuZ3RoKCksIHN0b3Jh
Z2UtPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVz
ZWRWZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFzdG9yYWdlLT5tX3ZlY3Rv
cltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdXNlZFZlY3Rvckxlbmd0aDsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKwordm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUo
dm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmlj
UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZVRoYXRTa2lwc0pT
T2JqZWN0KG1vZGUpKTsKKworICAgIGlmIChvYmplY3QtPnByb3RvdHlwZSgpLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBKU09iamVjdCogcHJvdG90eXBlID0gYXNPYmplY3Qob2Jq
ZWN0LT5wcm90b3R5cGUoKSk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKHByb3Rv
dHlwZS0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
KCkpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0
eU5hbWVzKHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OworICAgICAgICBKU1ZhbHVlIG5leHRQcm90byA9IHByb3RvdHlwZS0+cHJvdG90eXBlKCk7Cisg
ICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgcHJvdG90eXBlID0gYXNPYmplY3QobmV4dFByb3RvKTsKKyAgICB9Cit9CisKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw2ICs0NjIsNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBib29sIGhhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgYm9vbCBoYXNPd25Qcm9w
ZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5
QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwpAQCAt
NDc1LDYgKzQ3NiwxMCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqLCBKU09iamVj
dCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJp
Y1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYs
IEVudW1lcmF0aW9uTW9kZSk7CisKICAgICBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSos
IFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OwogICAgIGJvb2wg
Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikg
Y29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSop
IGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorCisjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnNfaW5mbyA9
IHsgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvciIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKSB9OworCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBpZiAo
IXZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvci5nZXQoKSkgeworICAgICAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKCZ2bSk7CisgICAgICAgIHZtLmVtcHR5UHJvcGVydHlO
YW1lRW51bWVyYXRvciA9IFN0cm9uZzxKU0NlbGw+KHZtLCBjcmVhdGUodm0sIDAsIHByb3BlcnR5
TmFtZXMpKTsKKyAgICB9CisgICAgcmV0dXJuIGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqPih2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IuZ2V0KCkpOworfQorCitKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
KQoreworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gc3RydWN0dXJlID8gc3RydWN0dXJl
LT5pZCgpIDogMDsKKyAgICB1aW50MzJfdCBpbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZSA/IHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSA6IDA7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yID0gbmV3IChOb3ROdWxsLCAKKyAgICAgICAgYWxsb2NhdGVDZWxsPEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcj4odm0uaGVhcCkpIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cih2bSwgc3RydWN0dXJlSUQsIGlubGluZUNhcGFjaXR5LCBwcm9wZXJ0eU5hbWVzLmlkZW50aWZp
ZXJTZXQoKSk7CisgICAgZW51bWVyYXRvci0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3BlcnR5TmFt
ZXMuZGF0YSgpKTsKKyAgICByZXR1cm4gZW51bWVyYXRvcjsKK30KKworSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmVJRCBz
dHJ1Y3R1cmVJRCwgdWludDMyX3QgaW5saW5lQ2FwYWNpdHksIFJlZkNvdW50ZWRJZGVudGlmaWVy
U2V0KiBzZXQpCisgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1
Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2lkZW50aWZpZXJTZXQoc2V0KQorICAgICwgbV9jYWNoZWRT
dHJ1Y3R1cmVJRChzdHJ1Y3R1cmVJRCkKKyAgICAsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkoaW5s
aW5lQ2FwYWNpdHkpCit7Cit9CisKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBpZGVu
dHMpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgUmVmUHRyPFByb3Bl
cnR5TmFtZUFycmF5RGF0YT4gaWRlbnRpZmllcnMgPSBpZGVudHM7CisgICAgUHJvcGVydHlOYW1l
QXJyYXlEYXRhOjpQcm9wZXJ0eU5hbWVWZWN0b3ImIHZlY3RvciA9IGlkZW50aWZpZXJzLT5wcm9w
ZXJ0eU5hbWVWZWN0b3IoKTsKKyAgICBtX3Byb3BlcnR5TmFtZXMucmVzaXplKHZlY3Rvci5zaXpl
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciA9IHZlY3RvcltpXTsKKyAgICAg
ICAgbV9wcm9wZXJ0eU5hbWVzW2ldLnNldCh2bSwgdGhpcywganNTdHJpbmcoJnZtLCBpZGVudGlm
aWVyLnN0cmluZygpKSk7CisgICAgfQorfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcio+KGNlbGwpLT5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6On5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IoKTsKK30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihjZWxs
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhpc09iamVjdC0+bV9wcm9wZXJ0eU5h
bWVzLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9w
cm9wZXJ0eU5hbWVzW2ldKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm90
b3R5cGVDaGFpbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKKyNkZWZpbmUgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSWRlbnRpZmllcjsKKwor
Y2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGNyZWF0ZShWTSYpOworICAgIHN0YXRpYyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZUFycmF5Jik7CisKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgSlNTdHJpbmcqIHByb3Bl
cnR5TmFtZUF0SW5kZXgodWludDMyX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aW5kZXggPj0gbV9wcm9wZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eU5hbWVzW2luZGV4XS5nZXQoKTsKKyAgICB9
CisKKyAgICBSZWZDb3VudGVkSWRlbnRpZmllclNldCogaWRlbnRpZmllclNldCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pZGVudGlmaWVyU2V0LmdldCgpOworICAgIH0KKworICAg
IFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbigpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvdG90eXBlQ2hhaW4uZ2V0KCk7IH0KKyAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWlu
KFZNJiB2bSwgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKSB7IHJldHVybiBtX3Byb3Rv
dHlwZUNoYWluLnNldCh2bSwgdGhpcywgcHJvdG90eXBlQ2hhaW4pOyB9CisKKyAgICBTdHJ1Y3R1
cmUqIGNhY2hlZFN0cnVjdHVyZShWTSYgdm0pIGNvbnN0IHsgcmV0dXJuIHZtLmhlYXAuc3RydWN0
dXJlSURUYWJsZSgpLmdldChtX2NhY2hlZFN0cnVjdHVyZUlEKTsgfQorICAgIFN0cnVjdHVyZUlE
IGNhY2hlZFN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdHJ1Y3R1cmVJRDsg
fQorICAgIHVpbnQzMl90IGNhY2hlZElubGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRJbmxpbmVDYXBhY2l0eTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZUlEKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgY2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgY2FjaGVkUHJvcGVydHlOYW1lc0xlbmd0aE9mZnNldCgpCisgICAgeworICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9w
cm9wZXJ0eU5hbWVzKSArIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Pjo6c2l6ZU1lbW9y
eU9mZnNldCgpOworICAgIH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcykgKyBWZWN0b3I8V3JpdGVC
YXJyaWVyPEpTU3RyaW5nPj46OmRhdGFNZW1vcnlPZmZzZXQoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbjsK
KworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIFN0cnVjdHVyZUlELCB1aW50MzJf
dCwgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgUGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+KTsKKworICAgIFZlY3RvcjxXcml0
ZUJhcnJpZXI8SlNTdHJpbmc+PiBtX3Byb3BlcnR5TmFtZXM7CisgICAgUmVmUHRyPFJlZkNvdW50
ZWRJZGVudGlmaWVyU2V0PiBtX2lkZW50aWZpZXJTZXQ7CisgICAgU3RydWN0dXJlSUQgbV9jYWNo
ZWRTdHJ1Y3R1cmVJRDsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90
eXBlQ2hhaW47CisgICAgdWludDMyX3QgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsKK307CisKK2lu
bGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1l
cmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSwgdWludDMyX3QgbGVuZ3RoKQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBzdHJ1Y3R1cmUtPmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0
b3IoKSkKKyAgICAgICAgcmV0dXJuIGVudW1lcmF0b3I7CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+
Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSB8fCBsZW5ndGggIT0gYmFzZS0+Z2V0QXJyYXlM
ZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRl
KHZtKTsKKworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CisgICAg
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworCisgICAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lcyk7CisgICAgaWYgKHN0cnVj
dHVyZS0+Y2FuQ2FjaGVTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAg
IHN0cnVjdHVyZS0+c2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwg
ZW51bWVyYXRvcik7CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK2lubGluZSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIGdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIHVpbnQzMl90IGxlbmd0aCwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOworICAg
IGlmIChKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBzdHJ1Y3R1cmUtPmNh
Y2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpIHsKKyAgICAgICAgaWYgKCFsZW5n
dGggJiYgZW51bWVyYXRvci0+Y2FjaGVkUHJvdG90eXBlQ2hhaW4oKSA9PSBzdHJ1Y3R1cmUtPnBy
b3RvdHlwZUNoYWluKGV4ZWMpKQorICAgICAgICAgICAgcmV0dXJuIGVudW1lcmF0b3I7CisgICAg
fQorCisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKKyAgICBwcm9w
ZXJ0eU5hbWVzLnNldFByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKGxlbmd0aCk7CisgICAgcHJv
cGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoc3RydWN0dXJlRW51
bWVyYXRvcik7CisKKyAgICAvLyBJZiB3ZSBzdGlsbCBoYXZlIHRoZSBzYW1lIFN0cnVjdHVyZSB0
aGF0IHdlIHN0YXJ0ZWQgd2l0aCwgb3VyIFN0cnVjdHVyZSBhbGxvd3MgdXMgdG8gYWNjZXNzIGl0
cyBwcm9wZXJ0aWVzIAorICAgIC8vIHF1aWNrbHkgKGkuZS4gdGhlIFN0cnVjdHVyZSBwcm9wZXJ0
eSBsb29wIHdhcyBhYmxlIHRvIGRvIHRoaW5ncyksIGFuZCB3ZSBpdGVyYXRlZCB0aGUgZnVsbCBs
ZW5ndGggb2YgdGhlIAorICAgIC8vIG9iamVjdCAoaS5lLiB0aGVyZSBhcmUgbm8gbW9yZSBvd24g
aW5kZXhlZCBwcm9wZXJ0aWVzIHRoYXQgbmVlZCB0byBiZSBlbnVtZXJhdGVkKSwgdGhlbiB0aGUg
Z2VuZXJpYyBwcm9wZXJ0eSAKKyAgICAvLyBpdGVyYXRpb24gY2FuIHNraXAgYW55IHByb3BlcnRp
ZXMgaXQgd291bGQgZ2V0IGZyb20gdGhlIEpTT2JqZWN0IGJhc2UgY2xhc3MuIFRoaXMgdHVybnMg
b3V0IHRvIGJlIGltcG9ydGFudCAKKyAgICAvLyBmb3IgaG90IGxvb3BzIGJlY2F1c2UgbW9zdCBv
ZiBvdXIgdGltZSBpcyB0aGVuIGRvbWluYXRlZCBieSB0cnlpbmcgdG8gYWRkIHRoZSBvd24gU3Ry
dWN0dXJlIHByb3BlcnRpZXMgdG8gCisgICAgLy8gdGhlIG5ldyBnZW5lcmljIFByb3BlcnR5TmFt
ZUFycmF5IGFuZCBmYWlsaW5nIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoZW0uCisg
ICAgU3RydWN0dXJlKiBjYWNoZWRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVFbnVtZXJhdG9yLT5jYWNo
ZWRTdHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1Y3R1cmUgPT0gY2FjaGVkU3RydWN0dXJlICYm
IHN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSAmJiBzdGF0aWNfY2FzdDx1
aW50MzJfdD4obGVuZ3RoKSA9PSBiYXNlLT5nZXRBcnJheUxlbmd0aCgpKQorICAgICAgICBiYXNl
LT5tZXRob2RUYWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIGVsc2UKKyAgICAg
ICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOworICAgIAorICAgIG5vcm1h
bGl6ZVByb3RvdHlwZUNoYWluKGV4ZWMsIGJhc2UpOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0s
IGJhc2UtPnN0cnVjdHVyZSh2bSksIHByb3BlcnR5TmFtZXMpOworICAgIGVudW1lcmF0b3ItPnNl
dENhY2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
KTsKKyAgICBpZiAoIWxlbmd0aCAmJiBzdHJ1Y3R1cmUtPmNhbkNhY2hlR2VuZXJpY1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJlLT5zZXRDYWNoZWRHZW5lcmljUHJv
cGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7CisgICAgcmV0dXJuIGVudW1lcmF0
b3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHku
Y3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwyNCBAQCB2b2lkIEpTUHJv
eHk6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqCiAgICAgdGhpc09iamVjdC0+dGFyZ2V0KCkt
Pm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRh
cmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAordWludDMyX3QgSlNQcm94
eTo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsK
KyAgICByZXR1cm4gdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QtPnRhcmdldCgpKTsKK30KKwor
dm9pZCBKU1Byb3h5OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQ
cm94eSo+KG9iamVjdCk7CisgICAgdGhpc09iamVjdC0+dGFyZ2V0KCktPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgp
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU1Byb3h5OjpnZXRHZW5l
cmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOworICAgIHRo
aXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0R2VuZXJpY1By
b3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworfQorCiB2b2lkIEpTUHJveHk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Byb3h5Kj4ob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3h5LmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOSBAQCBwcm90ZWN0ZWQ6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYs
NyBAQCB2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbkluZGV4CiAgICAgICAgIGZv
ciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGlmIChp
dC0+a2V5LT5pc0VtcHR5VW5pcXVlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8ICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgaWYgKCEoaXQt
PnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCBzaG91bGRJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5
LmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlOYW1lQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMyArMjMsMzIgQEAK
IAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMg
Y29uc3Qgc2l6ZV90IHNldFRocmVzaG9sZCA9IDIwOwotCiB2b2lkIFByb3BlcnR5TmFtZUFycmF5
OjphZGQoU3RyaW5nSW1wbCogaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQoIWlkZW50aWZpZXIg
fHwgaWRlbnRpZmllciA9PSBTdHJpbmdJbXBsOjplbXB0eSgpIHx8IGlkZW50aWZpZXItPmlzQXRv
bWljKCkpOwotCi0gICAgc2l6ZV90IHNpemUgPSBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3Rvcigp
LnNpemUoKTsKLSAgICBpZiAoc2l6ZSA8IHNldFRocmVzaG9sZCkgewotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIg
PT0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXS5pbXBsKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fc2V0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
Ci0gICAgICAgICAgICAgICAgbV9zZXQuYWRkKG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClb
aV0uaW1wbCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fc2V0LmFkZChpZGVudGlmaWVy
KS5pc05ld0VudHJ5KQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghQVNTRVJUX0RJU0FC
TEVEKSB7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gUHJvcGVydHlOYW1lKElkZW50aWZpZXIo
bV92bSwgaWRlbnRpZmllcikpLmFzSW5kZXgoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpbmRl
eCwgaW5kZXggPT0gUHJvcGVydHlOYW1lOjpOb3RBbkluZGV4IHx8IGluZGV4ID49IG1fcHJldmlv
dXNseUVudW1lcmF0ZWRMZW5ndGgpOwogICAgIH0KIAorICAgIGlmIChtX2FsdGVybmF0ZVNldCAm
JiBtX2FsdGVybmF0ZVNldC0+Y29udGFpbnMoaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV9zZXQtPmFkZChpZGVudGlmaWVyKS5pc05ld0VudHJ5KQorICAgICAgICBy
ZXR1cm47CisKICAgICBhZGRLbm93blVuaXF1ZShpZGVudGlmaWVyKTsKIH0KIAordm9pZCBQcm9w
ZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKGNvbnN0IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBtX2FsdGVybmF0ZVNl
dCA9IGVudW1lcmF0b3ItPmlkZW50aWZpZXJTZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFt
ZUFycmF5LmgJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDIyIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAorICAgIGNsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjsKICAgICBjbGFzcyBTdHJ1Y3R1cmU7CiAgICAgY2xhc3MgU3RydWN0dXJlQ2hhaW47CiAK
KyAgICBjbGFzcyBSZWZDb3VudGVkSWRlbnRpZmllclNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
ZkNvdW50ZWRJZGVudGlmaWVyU2V0PiB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEhh
c2hTZXQ8U3RyaW5nSW1wbCosIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBTZXQ7CisKKyAgICAgICAg
Ym9vbCBjb250YWlucyhTdHJpbmdJbXBsKiBpbXBsKSBjb25zdCB7IHJldHVybiBtX3NldC5jb250
YWlucyhpbXBsKTsgfQorICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0ICB7IHJldHVybiBtX3Nl
dC5zaXplKCk7IH0KKyAgICAgICAgU2V0OjpBZGRSZXN1bHQgYWRkKFN0cmluZ0ltcGwqIGltcGwp
IHsgcmV0dXJuIG1fc2V0LmFkZChpbXBsKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2V0
IG1fc2V0OworICAgIH07CisKICAgICAvLyBGSVhNRTogUmVuYW1lIHRvIFByb3BlcnR5TmFtZUFy
cmF5LgogICAgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVk
PFByb3BlcnR5TmFtZUFycmF5RGF0YT4gewogICAgIHB1YmxpYzoKQEAgLTUzLDI1ICs2Niw0MCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5
KFZNKiB2bSkKICAgICAgICAgICAgIDogbV9kYXRhKFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3Jl
YXRlKCkpCisgICAgICAgICAgICAsIG1fc2V0KGFkb3B0UmVmKG5ldyBSZWZDb3VudGVkSWRlbnRp
ZmllclNldCkpCiAgICAgICAgICAgICAsIG1fdm0odm0pCiAgICAgICAgICAgICAsIG1fbnVtQ2Fj
aGVhYmxlU2xvdHMoMCkKICAgICAgICAgICAgICwgbV9iYXNlT2JqZWN0KDApCisgICAgICAgICAg
ICAsIG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgoMCkKICAgICAgICAgewogICAgICAgICB9
CiAKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAg
ICAgOiBtX2RhdGEoUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKKyAgICAgICAgICAg
ICwgbV9zZXQoYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRJZGVudGlmaWVyU2V0KSkKICAgICAgICAg
ICAgICwgbV92bSgmZXhlYy0+dm0oKSkKICAgICAgICAgICAgICwgbV9udW1DYWNoZWFibGVTbG90
cygwKQogICAgICAgICAgICAgLCBtX2Jhc2VPYmplY3QoMCkKKyAgICAgICAgICAgICwgbV9wcmV2
aW91c2x5RW51bWVyYXRlZExlbmd0aCgwKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAg
ICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAKKyAgICAgICAgdm9pZCBhZGQodWludDMyX3Qg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IG1fcHJldmlvdXNseUVu
dW1lcmF0ZWRMZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYWRk
KElkZW50aWZpZXI6OmZyb20obV92bSwgaW5kZXgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZv
aWQgYWRkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpIHsgYWRkKGlkZW50aWZpZXIuaW1w
bCgpKTsgfQogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZChTdHJpbmdJbXBsKik7
Ci0gICAgICAgIHZvaWQgYWRkS25vd25VbmlxdWUoU3RyaW5nSW1wbCogaWRlbnRpZmllcikgeyBt
X2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmFwcGVuZChJZGVudGlmaWVyKG1fdm0sIGlkZW50
aWZpZXIpKTsgfQorICAgICAgICB2b2lkIGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50
aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2V0LT5hZGQoaWRlbnRpZmllcik7Cisg
ICAgICAgICAgICBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmFwcGVuZChJZGVudGlmaWVy
KG1fdm0sIGlkZW50aWZpZXIpKTsKKyAgICAgICAgfQogCiAgICAgICAgIElkZW50aWZpZXImIG9w
ZXJhdG9yW10odW5zaWduZWQgaSkgeyByZXR1cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3Io
KVtpXTsgfQogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV07IH0KQEAgLTgw
LDcgKzEwOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXlE
YXRhKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhLmdldCgpOyB9CiAgICAgICAgIFBhc3NSZWZQdHI8
UHJvcGVydHlOYW1lQXJyYXlEYXRhPiByZWxlYXNlRGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5yZWxl
YXNlKCk7IH0KIAorICAgICAgICBSZWZDb3VudGVkSWRlbnRpZmllclNldCogaWRlbnRpZmllclNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmdldCgpOyB9CisKICAgICAgICAgLy8gRklYTUU6IFJl
bW92ZSB0aGVzZSBmdW5jdGlvbnMuCisgICAgICAgIGJvb2wgY2FuQWRkS25vd25VbmlxdWVGb3JT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiAhbV9zZXQtPnNpemUoKSAmJiAoIW1fYWx0ZXJuYXRl
U2V0IHx8ICFtX2FsdGVybmF0ZVNldC0+c2l6ZSgpKTsgfQogICAgICAgICB0eXBlZGVmIFByb3Bl
cnR5TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yOjpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEt
PnByb3BlcnR5TmFtZVZlY3RvcigpLnNpemUoKTsgfQogICAgICAgICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuYmVnaW4o
KTsgfQpAQCAtMTAwLDE0ICsxMzEsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
X2Jhc2VPYmplY3QgPSBvYmplY3Q7CiAgICAgICAgIH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IHR5cGVkZWYgSGFzaFNldDxTdHJpbmdJbXBsKiwgUHRySGFzaDxTdHJpbmdJbXBsKj4+IElkZW50
aWZpZXJTZXQ7CisgICAgICAgIHZvaWQgc2V0UHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgodWlu
dDMyX3QgbGVuZ3RoKSB7IG1fcHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGggPSBsZW5ndGg7IH0K
KyAgICAgICAgdm9pZCBzZXRQcmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CiAKKyAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8
UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBtX2RhdGE7Ci0gICAgICAgIElkZW50aWZpZXJTZXQgbV9z
ZXQ7CisgICAgICAgIFJlZlB0cjxSZWZDb3VudGVkSWRlbnRpZmllclNldD4gbV9zZXQ7CisgICAg
ICAgIFJlZlB0cjxSZWZDb3VudGVkSWRlbnRpZmllclNldD4gbV9hbHRlcm5hdGVTZXQ7CiAgICAg
ICAgIFZNKiBtX3ZtOwogICAgICAgICBzaXplX3QgbV9udW1DYWNoZWFibGVTbG90czsKICAgICAg
ICAgSlNPYmplY3QqIG1fYmFzZU9iamVjdDsKKyAgICAgICAgdWludDMyX3QgbV9wcmV2aW91c2x5
RW51bWVyYXRlZExlbmd0aDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNp
b24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDE4ICsxMDksMjUgQEAgYm9vbCBSZWdFeHBPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbAogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewot
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNob3Vs
ZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwogICAgIEJhc2U6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwog
fQogCiB2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQog
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4
KTsKICAgICBCYXNlOjpnZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7CiB9CiAKK3ZvaWQgUmVnRXhwT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAoc2hvdWxkSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCk7CisgICAgQmFzZTo6Z2V0R2VuZXJpY1By
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwogc3Rh
dGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29u
c3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBpZiAodGhyb3dFeGNlcHRpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gMTcx
MjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTc3LDEzICs3NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUmVnRXhwT2JqZWN0KFZNJiwgU3RydWN0dXJlKiwgUmVnRXhwKik7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAot
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBP
dmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDE3
MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIFN0cmluZ09iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKCiAgICAgaW50IHNpemUgPSB0aGlzT2JqZWN0LT5pbnRlcm5hbFZh
bHVlKCktPmxlbmd0aCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLSAgICBp
ZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJEdW1wQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgot
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJQcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCkBAIC05NTYs
MTIgKzk1NiwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1CiAg
ICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wga25v
d25VbmlxdWUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7CisgICAgYm9vbCBrbm93blVuaXF1ZSA9
IHByb3BlcnR5TmFtZXMuY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKTsKIAogICAgIFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CiAgICAg
Zm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIEFTU0VSVChoYXNOb25FbnVtZXJh
YmxlUHJvcGVydGllcygpIHx8ICEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSk7Ci0gICAg
ICAgIGlmICghaXRlci0+a2V5LT5pc0VtcHR5VW5pcXVlKCkgJiYgKCEoaXRlci0+YXR0cmlidXRl
cyAmIERvbnRFbnVtKSB8fCBtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKSB7Cisg
ICAgICAgIGlmICghaXRlci0+a2V5LT5pc0VtcHR5VW5pcXVlKCkgJiYgKCEoaXRlci0+YXR0cmli
dXRlcyAmIERvbnRFbnVtKSB8fCBzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUp
KSkgewogICAgICAgICAgICAgaWYgKGtub3duVW5pcXVlKQogICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkS25vd25VbmlxdWUoaXRlci0+a2V5KTsKICAgICAgICAgICAgIGVsc2UKQEAg
LTEyMjMsNCArMTIyMyw3NCBAQCBib29sIENsYXNzSW5mbzo6aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFN0cnVjdHVyZTo6c2V0Q2FjaGVkU3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0sIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogZW51bWVyYXRvcikKK3sKKyAgICBBU1NFUlQoIWlzRGljdGlvbmFyeSgpKTsKKyAgICBp
ZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOworICAgIHJh
cmVEYXRhKCktPnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVu
dW1lcmF0b3IpOworfQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIFN0cnVjdHVyZTo6Y2Fj
aGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFo
YXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmFyZURh
dGEoKS0+Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworfQorCit2b2lk
IFN0cnVjdHVyZTo6c2V0Q2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZt
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgQVNTRVJUKCFp
c0RpY3Rpb25hcnkoKSk7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBhbGxvY2F0
ZVJhcmVEYXRhKHZtKTsKKyAgICByYXJlRGF0YSgpLT5zZXRDYWNoZWRHZW5lcmljUHJvcGVydHlO
YW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogU3RydWN0dXJlOjpjYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNv
bnN0Cit7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gcmFyZURhdGEoKS0+Y2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IoKTsKK30KKworYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1l
RW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzRGljdGlvbmFyeSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5D
YWNoZUdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWNh
bkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hh
aW4gPSBtX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpOworICAgIEFTU0VSVChzdHJ1Y3R1cmVD
aGFpbik7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIHN0cnVjdHVyZSA9IHN0cnVjdHVy
ZUNoYWluLT5oZWFkKCk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmdldCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmdl
dCgpLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgc3RydWN0dXJlKys7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgp
IGNvbnN0Cit7CisgICAgaWYgKGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
cmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMsMTUgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51
bWVyYXRpb25DYWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgog
ICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUoKTsgLy8gRGVmaW5l
ZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCisKKyAgICB2b2lkIHNldENhY2hlZFN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
KTsKKyAgICB2b2lkIHNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBjYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRv
cigpIGNvbnN0OworICAgIGJvb2wgY2FuQ2FjaGVTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKCkgY29uc3Q7CisgICAgYm9vbCBjYW5DYWNoZUdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKCkgY29uc3Q7CisgICAgYm9vbCBjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSgpIGNvbnN0
OworCiAgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYsIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKIAogICAgIEpTU3RyaW5nKiBvYmplY3RUb1N0
cmluZ1ZhbHVlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVJhcmVEYXRhLmgiCiAKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC02OCw2ICs2OSwyOCBAQCB2b2lkIFN0cnVjdHVy
ZVJhcmVEYXRhOjp2aXNpdENoaWxkcmVuKEpTCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fcHJldmlvdXMpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX29iamVj
dFRvU3RyaW5nVmFsdWUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2VudW1l
cmF0aW9uQ2FjaGUpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2NhY2hlZFN0
cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2NhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKK30KKworSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3RydWN0dXJl
UHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkU3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvci5nZXQoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVS
YXJlRGF0YTo6c2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0s
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBtX2NhY2hlZFN0
cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iuc2V0KHZtLCB0aGlzLCBlbnVtZXJhdG9yKTsK
K30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVk
R2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nh
Y2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpOworfQorCit2b2lkIFN0cnVj
dHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYg
dm0sIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBtX2NhY2hl
ZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCh2bSwgdGhpcywgZW51bWVyYXRvcik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzEyMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I7CiBjbGFzcyBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOwogY2xh
c3MgU3RydWN0dXJlOwogCkBAIC02MSw2ICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAorICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2FjaGVk
U3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OworICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25z
dDsKKyAgICB2b2lkIHNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0m
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsKKyAgICB2b2lkIHNldENhY2hlZEdlbmVyaWNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKICAgICAKQEAgLTcxLDYgKzc3
LDggQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwog
ICAgIFdyaXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdy
aXRlQmFycmllcjxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7Cisg
ICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNoZWRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I+IG1fY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAgICAg
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBSZWZQdHI8V2F0Y2hwb2ludFNl
dD4sIFdURjo6SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9wZXJ0eVdhdGNocG9pbnRNYXA7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFByb3BlcnR5V2F0Y2hwb2ludE1hcD4gbV9yZXBsYWNlbWVudFdhdGNo
cG9pbnRTZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNp
b24gMTcxMjI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgog
I2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlUmVhY3Rp
b24uaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNs
dWRlICJMZXhlci5oIgpAQCAtMjU4LDYgKzI1OSw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKICAgICBzdHJpbmdTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1N0cmlu
Zzo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIG5vdEFuT2JqZWN0
U3RydWN0dXJlLnNldCgqdGhpcywgSlNOb3RBbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlLnNldCgq
dGhpcywgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOworICAgIHByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBHZXR0ZXJTZXR0
ZXI6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBhcGlXcmFwcGVy
U3RydWN0dXJlLnNldCgqdGhpcywgSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBKU1Njb3BlU3RydWN0dXJlLnNldCgqdGhpcywgSlNT
Y29wZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHN0cmluZ1N0cnVjdHVy
ZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbm90QW5PYmplY3RTdHJ1Y3R1cmU7CiAgICAg
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5TmFtZUl0ZXJhdG9yU3RydWN0dXJlOworICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlOwog
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBnZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmU7CiAgICAgICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IGFwaVdyYXBwZXJTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IEpTU2NvcGVTdHJ1Y3R1cmU7CkBAIC0yOTEsNiArMjkyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVy
ZTsKICNlbmRpZgogICAgICAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwor
ICAgICAgICBTdHJvbmc8SlNDZWxsPiBlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAKICAg
ICAgICAgQXRvbWljU3RyaW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgICAgIENv
bW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MTcxMjM3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzAgQEAKKzIwMTQtMDctMTggIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFw
cGxlLmNvbT4KKworICAgICAgICBSZWZhY3RvciBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBv
ZiBmb3ItaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNDE0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIHNwbGl0cyBmb3ItaW4gbG9vcHMg
aW50byB0aHJlZSBkaXN0aW5jdCBwYXJ0czoKKworICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIHRo
ZSBpbmRleGVkIHByb3BlcnRpZXMgaW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJh
dGluZyBvdmVyIHRoZSBTdHJ1Y3R1cmUgcHJvcGVydGllcyBpbiB0aGUgYmFzZSBvYmplY3QuCisg
ICAgICAgIC0gSXRlcmF0aW5nIG92ZXIgYW55IG90aGVyIGVudW1lcmFibGUgcHJvcGVydGllcyBm
b3IgdGhhdCBvYmplY3QgYW5kIGFueSBvYmplY3RzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCisg
CisgICAgICAgIEl0IGRvZXMgdGhpcyBieSBlbWl0dGluZyB0aGVzZSBleHBsaWNpdCBsb29wcyBp
biBieXRlY29kZSwgdXNpbmcgYSBuZXcgc2V0IG9mIGJ5dGVjb2RlcyB0byAKKyAgICAgICAgc3Vw
cG9ydCB0aGUgdmFyaW91cyBvcGVyYXRpb25zIHJlcXVpcmVkIGZvciBlYWNoIGxvb3AuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvdzo6Z2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpKU0RPTVdpbmRvdzo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFk
ZXIpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX2FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6
UnVudGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKwogMjAxNC0wNy0wMSAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0gRGVidWdnZXJDYWxs
RnJhbWU6OnNjb3BlKCkgc2hvdWxkIHJldHVybiBhIERlYnVnZ2VyU2NvcGUuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZp
c2lvbiAxNzEyMjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MSw2ICszODEsMzMgQEAgYm9vbCBKU0RPTVdp
bmRvdzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KAogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAordWludDMy
X3QgSlNET01XaW5kb3c6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb2JqZWN0KQoreworICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
RE9NV2luZG93Kj4ob2JqZWN0KTsKKyAgICAvLyBPbmx5IGFsbG93IHRoZSB3aW5kb3cgdG8gZW51
bWVyYXRlZCBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgorICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmlt
cGwoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBCYXNlOjpnZXRFbnVtZXJhYmxl
TGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOworfQorCit2b2lkIEpTRE9NV2luZG93OjpnZXRTdHJ1
Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQorewor
ICAgIEpTRE9NV2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0
KTsKKyAgICAvLyBPbmx5IGFsbG93IHRoZSB3aW5kb3cgdG8gZW51bWVyYXRlZCBieSBmcmFtZXMg
aW4gdGhlIHNhbWUgb3JpZ2luLgorICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KGV4ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBCYXNlOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lkIEpTRE9NV2luZG93OjpnZXRHZW5l
cmljUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7
CisgICAgLy8gT25seSBhbGxvdyB0aGUgd2luZG93IHRvIGVudW1lcmF0ZWQgYnkgZnJhbWVzIGlu
IHRoZSBzYW1lIG9yaWdpbi4KKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAgICByZXR1
cm47CisgICAgQmFzZTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKIHZvaWQgSlNET01XaW5kb3c6OmdldFByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgSlNET01XaW5k
b3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3QpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDE3MTIyNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC05NzIsNiArOTcyLDkgQEAgc3ViIEdl
bmVyYXRlSGVhZGVyCiAgICAgIyBDdXN0b20gZ2V0UHJvcGVydHlOYW1lcyBmdW5jdGlvbiBleGlz
dHMgb24gRE9NV2luZG93CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7
CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0UHJvcGVy
dHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVt
UHJvcGVydGllcyk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9k
ZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7XG4iKTsKKyAgICAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB1aW50
MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCop
O1xuIik7CiAgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIn0gPSAxOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRp
bWVfYXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1l
X2FycmF5LmNwcAkocmV2aXNpb24gMTcxMjI2KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1
bnRpbWVfYXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgUnVu
dGltZUFycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oZXhlYywgaSkpOwogCi0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykKKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAK
ICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>235147</attachid>
            <date>2014-07-18 14:15:09 -0700</date>
            <delta_ts>2014-07-18 14:15:09 -0700</delta_ts>
            <desc>benchmark results</desc>
            <filename>orIn_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBench_Marks-Mac-Pro_20140718_1411_report.txt</filename>
            <type>text/plain</type>
            <size>45930</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">QmVuY2htYXJrIHJlcG9ydCBmb3IgU3VuU3BpZGVyLCBMb25nU3BpZGVyLCBWOFNwaWRlciwgT2N0
YW5lLCBLcmFrZW4sIEpTUmVncmVzcywgYW5kIEFzbUJlbmNoIG9uIE1hcmtzLU1hYy1Qcm8gKE1h
Y1BybzUsMSkuCgpWTXMgdGVzdGVkOgoiVG9UIiBhdCAvVm9sdW1lcy9EYXRhL1dlYktpdC1zdm4t
MDEvT3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlL2pzYyAocjE3MTIzOCkKIkZvckluIiBh
dCAvVm9sdW1lcy9EYXRhL1dlYktpdC1zdm4tMDQvT3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxl
YXNlL2pzYyAocjE3MTIzOCkKCkNvbGxlY3RlZCA0IHNhbXBsZXMgcGVyIGJlbmNobWFyay9WTSwg
d2l0aCA0IFZNIGludm9jYXRpb25zIHBlciBiZW5jaG1hcmsuIEVtaXR0ZWQgYSBjYWxsIHRvIGdj
KCkgYmV0d2VlbiBzYW1wbGUgbWVhc3VyZW1lbnRzLgpVc2VkIDEgYmVuY2htYXJrIGl0ZXJhdGlv
biBwZXIgVk0gaW52b2NhdGlvbiBmb3Igd2FybS11cC4gVXNlZCB0aGUganNjLXNwZWNpZmljIHBy
ZWNpc2VUaW1lKCkgZnVuY3Rpb24gdG8gZ2V0IG1pY3Jvc2Vjb25kLWxldmVsCnRpbWluZy4gUmVw
b3J0aW5nIGJlbmNobWFyayBleGVjdXRpb24gdGltZXMgd2l0aCA5NSUgY29uZmlkZW5jZSBpbnRl
cnZhbHMgaW4gbWlsbGlzZWNvbmRzLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICAgICAgRm9ySW4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKU3VuU3BpZGVyOgogICAzZC1j
dWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2Ljc5OTArLTAu
Mjg5MCAgICAgICAgICAgIDYuNzk2MCstMC4xMDI5ICAgICAgICAKICAgM2QtbW9ycGggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy45MTczKy0wLjA4MjIgICAgID8g
ICAgICA4LjE1NTIrLTAuMTYxMCAgICAgICAgPyBtaWdodCBiZSAxLjAzMDF4IHNsb3dlcgogICAz
ZC1yYXl0cmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjU2MzUr
LTAuMTc2NyAgICAgICAgICAgIDguNTMyMystMC4wOTI1ICAgICAgICAKICAgYWNjZXNzLWJpbmFy
eS10cmVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi40MTMzKy0wLjE0MTYgICAg
ID8gICAgICAyLjQ1MDArLTAuMTQwOSAgICAgICAgPyBtaWdodCBiZSAxLjAxNTJ4IHNsb3dlcgog
ICBhY2Nlc3MtZmFubmt1Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjAx
NDkrLTAuMjc1MiAgICAgICAgICAgIDcuOTY1NSstMC4xOTU0ICAgICAgICAKICAgYWNjZXNzLW5i
b2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy45NTk1Ky0wLjE4MTkg
ICAgID8gICAgICAzLjk5NzkrLTAuMTk5MSAgICAgICAgPwogICBhY2Nlc3MtbnNpZXZlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjAyNjkrLTAuMDg0NiAgICAgPyAgICAg
IDUuMDU1MCstMC4xNjg0ICAgICAgICA/CiAgIGJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEuNjQ1NSstMC4wMjQ1ICAgICAgICAgICAgMS42MzMyKy0w
LjA1OTIgICAgICAgIAogICBiaXRvcHMtYml0cy1pbi1ieXRlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA1LjQxMTMrLTAuMTA4NiAgICAgPyAgICAgIDUuNDU3NSstMC4xNDk3ICAgICAg
ICA/CiAgIGJpdG9wcy1iaXR3aXNlLWFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIuNjk4OCstMC4xNzUyICAgICAgICAgICAgMi42OTgyKy0wLjEyOTIgICAgICAgIAogICBiaXRv
cHMtbnNpZXZlLWJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ljg2MDQrLTAu
MTM4MiAgICAgPyAgICAgIDUuMDAxMystMC4zMDA1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI5MHgg
c2xvd2VyCiAgIGNvbnRyb2xmbG93LXJlY3Vyc2l2ZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDIuNTA3MystMC4wOTIwICAgICA/ICAgICAgMi41MTEwKy0wLjEyMTIgICAgICAgID8KICAg
Y3J5cHRvLWFlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS40NzU1
Ky0wLjM0MDcgICAgICAgICAgICA1LjM1NzUrLTAuMTE3NyAgICAgICAgICBtaWdodCBiZSAxLjAy
MjB4IGZhc3RlcgogICBjcnlwdG8tbWQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAzLjEwNjUrLTAuMTAwOSAgICAgICAgICAgIDMuMDY5OCstMC4wOTY0ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDEyMHggZmFzdGVyCiAgIGNyeXB0by1zaGExICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMuMTc0MystMC43MDIxICAgICAgICAgICAgMi45NjA1Ky0w
LjA1OTYgICAgICAgICAgbWlnaHQgYmUgMS4wNzIyeCBmYXN0ZXIKICAgZGF0ZS1mb3JtYXQtdG9m
dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS4xNDY4Ky0wLjM0NjIgICAgID8g
ICAgIDExLjU0OTMrLTAuNjgyNyAgICAgICAgPyBtaWdodCBiZSAxLjAzNjF4IHNsb3dlcgogICBk
YXRlLWZvcm1hdC14cGFyYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjUyMTUr
LTAuMjU0NyAgICAgICAgICAgIDcuNTE1NistMC40NDk0ICAgICAgICAKICAgbWF0aC1jb3JkaWMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy45NzM3Ky0wLjEwODAgICAg
ID8gICAgICA0LjAyNDgrLTAuMDY2NSAgICAgICAgPyBtaWdodCBiZSAxLjAxMjl4IHNsb3dlcgog
ICBtYXRoLXBhcnRpYWwtc3VtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ljg4
MjArLTAuMjE1MyAgICAgICAgICAgIDguODI5NystMC4xODY5ICAgICAgICAKICAgbWF0aC1zcGVj
dHJhbC1ub3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi41NjE1Ky0wLjA4NjUg
ICAgID8gICAgICAyLjY4MjcrLTAuMTM2MCAgICAgICAgPyBtaWdodCBiZSAxLjA0NzN4IHNsb3dl
cgogICByZWdleHAtZG5hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw
LjIxNDErLTAuNjI5OSAgICAgICAgICAgIDkuOTgzOCstMC4yMTE0ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDIzMXggZmFzdGVyCiAgIHN0cmluZy1iYXNlNjQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDUuMjAxMCstMC4yNTYxICAgICA/ICAgICAgNS40MDYxKy0wLjMyMjcgICAg
ICAgID8gbWlnaHQgYmUgMS4wMzk0eCBzbG93ZXIKICAgc3RyaW5nLWZhc3RhICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOC40NTYwKy0wLjE1MDYgICAgID8gICAgICA4LjU4
MzQrLTAuMzcwMiAgICAgICAgPyBtaWdodCBiZSAxLjAxNTF4IHNsb3dlcgogICBzdHJpbmctdGFn
Y2xvdWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLjM1OTUrLTAuNTc5NCAg
ICAgICAgICAgMTMuMTk0MCstMC41MDUyICAgICAgICAgIG1pZ2h0IGJlIDEuMDEyNXggZmFzdGVy
CiAgIHN0cmluZy11bnBhY2stY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYu
ODgwOSstMC4zMzQ0ICAgICA/ICAgICAyNy42MzkyKy0wLjcyNzIgICAgICAgID8gbWlnaHQgYmUg
MS4wMjgyeCBzbG93ZXIKICAgc3RyaW5nLXZhbGlkYXRlLWlucHV0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNi40NTAyKy0wLjI3ODcgICAgID8gICAgICA2LjQ1MjMrLTAuMjQ3MyAgICAg
ICAgPwoKICAgPGFyaXRobWV0aWM+ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNi43Nzc3Ky0wLjA5NzMgICAgID8gICAgICA2LjgyNzArLTAuMTA0MCAgICAgICAgPyBtaWdo
dCBiZSAxLjAwNzN4IHNsb3dlcgogICA8Z2VvbWV0cmljPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA1LjU0NDQrLTAuMDg3NyAgICAgPyAgICAgIDUuNTY5NCstMC4wNjUz
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDA0NXggc2xvd2VyCiAgIDxoYXJtb25pYz4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNjIwOCstMC4wODY3ICAgICA/ICAgICAg
NC42MzU4Ky0wLjA0NzQgICAgICAgID8gbWlnaHQgYmUgMS4wMDMzeCBzbG93ZXIKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9UICAg
ICAgICAgICAgICAgICAgICAgIEZvckluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCkxvbmdTcGlkZXI6CiAgIDNkLWN1YmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDExNjIuMzMwNCstMjIuNjIzMyAgICAgICAgMTE1My44MzIzKy05Ljg3NjEg
ICAgICAgIAogICAzZC1tb3JwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxODU0LjE2NDMrLTUuMTIzMSAgICAgPyAgIDE4NTQuNzQ2NystMy42ODQ0ICAgICAgICA/CiAg
IDNkLXJheXRyYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMjcuOTkx
MystOS40NzA1ICAgICAgICAgMTEyNC4xOTY4Ky0xMS4wNTE1ICAgICAgIAogICBhY2Nlc3MtYmlu
YXJ5LXRyZWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDA0LjY3MTUrLTguMDQwMSAg
ICAgPyAgIDE0MDYuNTA0OSstMTcuNTc0NiAgICAgICA/CiAgIGFjY2Vzcy1mYW5ua3VjaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTEuNTM4MystMTQuNTI1MCAgICAgICAgIDQ0
Ny4xMDEyKy0xOS42MDA1ICAgICAgIAogICBhY2Nlc3MtbmJvZHkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxMDI2Ljg0NzArLTEuMzcwOSAgICAgICAgIDEwMjYuNzg5NCstMS40
NjQ2ICAgICAgICAKICAgYWNjZXNzLW5zaWV2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTQyNC45NzUyKy03NC4wODYzICAgICAgICAxNDE5LjE1OTUrLTIwLjk4MzYgICAgICAg
CiAgIGJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgNTEu
MjM1NistNC42MDA3ICAgICAgICAgICA0OS45OTU4Ky0wLjc2MTAgICAgICAgICAgbWlnaHQgYmUg
MS4wMjQ4eCBmYXN0ZXIKICAgYml0b3BzLWJpdHMtaW4tYnl0ZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMyMy40MjczKy0xMy42MzUyICAgID8gICAgMzI4LjI5OTQrLTQuNTEzNiAgICAg
ICAgPyBtaWdodCBiZSAxLjAxNTF4IHNsb3dlcgogICBiaXRvcHMtbnNpZXZlLWJpdHMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOTg2Ljk3NzArLTYuMzM1MCAgICAgPyAgICA5OTMuMjEx
MystMy44OTA2ICAgICAgICA/CiAgIGNvbnRyb2xmbG93LXJlY3Vyc2l2ZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA3MzEuNjQ3MystMS43MDkyICAgICAgICAgIDczMC43NjEyKy0xLjg2NzIg
ICAgICAgIAogICBjcnlwdG8tYWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOTYxLjI5MTArLTI4Ljk4NjggICAgICAgICA5NTYuNDgyNSstNS43NjIzICAgICAgICAKICAg
Y3J5cHRvLW1kNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwNS45ODcy
Ky01LjczMDUgICAgID8gICAgODA2Ljk5ODcrLTE0LjkzNjcgICAgICAgPwogICBjcnlwdG8tc2hh
MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTg3LjA3NTErLTMuMDE4NCAg
ICAgPyAgICA5ODkuNzM0NystNy4yOTg0ICAgICAgICA/CiAgIGRhdGUtZm9ybWF0LXRvZnRlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ODMuNDk2NSstMjguNzQ3NSAgICA/ICAgMTAy
My4wMzA4Ky0yNC4xMjIyICAgICAgID8gbWlnaHQgYmUgMS4wNDAyeCBzbG93ZXIKICAgZGF0ZS1m
b3JtYXQteHBhcmIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzMy4yNTIzKy0zMS4y
Mjk0ICAgICAgICAxMTI5Ljk3NTArLTM1LjYzNjcgICAgICAgCiAgIG1hdGgtY29yZGljICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MjUuMTg1NystNy43MTgwICAgICA/ICAg
IDgzNi41Njc5Ky0xNi4xMjIwICAgICAgID8gbWlnaHQgYmUgMS4wMTM4eCBzbG93ZXIKICAgbWF0
aC1wYXJ0aWFsLXN1bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzMi4wNzUzKy03
LjMyNTYgICAgICAgICAxMDI5LjY2ODMrLTYuNTE1MSAgICAgICAgCiAgIG1hdGgtc3BlY3RyYWwt
bm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNzYuOTI0MystMS4xNTQwICAgICAg
ICAgMTA3NS41NDQ3Ky0zLjA3MTYgICAgICAgIAogICBzdHJpbmctYmFzZTY0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNDk4LjUxMjUrLTAuNjEwMSAgICAgXiAgICA0OTUuMzQy
MistMS4xNjUxICAgICAgICBeIGRlZmluaXRlbHkgMS4wMDY0eCBmYXN0ZXIKICAgc3RyaW5nLWZh
c3RhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDczNS4wOTE1Ky05LjUyMTcg
ICAgIF4gICAgNjc4Ljc1MTIrLTE3LjM1NDMgICAgICAgXiBkZWZpbml0ZWx5IDEuMDgzMHggZmFz
dGVyCiAgIHN0cmluZy10YWdjbG91ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
MzcuODc3OSstMTIuNDc1NyAgICBeICAgIDMxNC4wNjc3Ky00LjcyMDEgICAgICAgIF4gZGVmaW5p
dGVseSAxLjA3NTh4IGZhc3RlcgoKICAgPGFyaXRobWV0aWM+ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDkwNS41NzE2Ky0yLjg1MzQgICAgICAgICAgOTAzLjIxNjUrLTQuOTE5
MSAgICAgICAgICBtaWdodCBiZSAxLjAwMjZ4IGZhc3RlcgogICA8Z2VvbWV0cmljPiAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzYzLjA0MzUrLTUuMTUzNCAgICAgICAgICA3
NTguMjE4MCstMy4zNzk2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDA2NHggZmFzdGVyCiAgIDxoYXJt
b25pYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzIuNzUxMystMTgu
MDkzNSAgICAgICAgIDQ2NS4zMjk2Ky0yLjA5MDcgICAgICAgICAgbWlnaHQgYmUgMS4wMTU5eCBm
YXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVG9UICAgICAgICAgICAgICAgICAgICAgIEZvckluICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgClY4U3BpZGVyOgogICBjcnlwdG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcwLjUwMDQrLTEuNzMzMyAgICAgICAgICAgNjku
ODUzOCstMC4zMjY1ICAgICAgICAKICAgZGVsdGFibHVlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA4NC4xMzgzKy0xLjAzMTcgICAgID8gICAgIDg0LjgwNTMrLTAuOTk0
NSAgICAgICAgPwogICBlYXJsZXktYm95ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDYyLjE2NDMrLTMuNzA2NSAgICAgICAgICAgNjIuMDI5OCstNC45NjcxICAgICAgICAK
ICAgcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOC43
NjY1Ky0wLjM5MTggICAgICAgICAgIDM4LjQyMTQrLTEuMDQ0MiAgICAgICAgCiAgIHJlZ2V4cCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODYuMDQ5NCstMC43Mzgz
ICAgICA/ICAgICA4Ni41OTIwKy0zLjQwMTIgICAgICAgID8KICAgcmljaGFyZHMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ni4yNDk4Ky0xLjAwMDEgICAgID8gICAg
IDk2LjgzMDUrLTEuNTA1OCAgICAgICAgPwogICBzcGxheSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQyLjE4NDgrLTAuNTk3MCAgICAgPyAgICAgNDIuODk1OSst
MC41NjE4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE2OXggc2xvd2VyCgogICA8YXJpdGhtZXRpYz4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LjU3OTErLTAuMTk1MyAgICAg
PyAgICAgNjguNzc1NSstMS4zMjcxICAgICAgICA/IG1pZ2h0IGJlIDEuMDAyOXggc2xvd2VyCiAg
IDxnZW9tZXRyaWM+ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjUuMTY2
OCstMC4xNjQxICAgICA/ICAgICA2NS4zMTkwKy0xLjI2NDkgICAgICAgID8gbWlnaHQgYmUgMS4w
MDIzeCBzbG93ZXIKICAgPGhhcm1vbmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA2MS41NzEyKy0wLjE1MzAgICAgID8gICAgIDYxLjY4NzcrLTEuMTUwOCAgICAgICAg
PyBtaWdodCBiZSAxLjAwMTl4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICAgICAgRm9y
SW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKT2N0YW5lOgogICBlbmNy
eXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMzQ2OTArLTAu
MDAyOTggICAgPyAgICAgMC4zNDgyOSstMC4wMDIzMiAgICAgICA/CiAgIGRlY3J5cHQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4zMDUwMistMC4wMDk2OCAgICA/
ICAgICA2LjM0MDY4Ky0wLjA1NzYwICAgICAgID8KICAgZGVsdGFibHVlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4MiAgICAgICAwLjM2NzYwKy0wLjAwNTg1ICAgID8gICAgIDAuMzY3
NjIrLTAuMDA2OTQgICAgICAgPwogICBlYXJsZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuNzU4NDMrLTAuMDEwNTAgICAgPyAgICAgMC43NjExMCstMC4wMDg1
OCAgICAgICA/CiAgIGJveWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOC44NTYxMistMC4xMTY2NSAgICAgICAgICA4LjgxOTQ0Ky0wLjEyNDE3ICAgICAgIAog
ICBuYXZpZXItc3Rva2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDYuMzY3
MTMrLTAuMDAzMzIgICAgICAgICAgNi4zNTkzMCstMC4wMjI3NCAgICAgICAKICAgcmF5dHJhY2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgICAyLjE5NTgyKy0wLjAxMTM4
ICAgICEgICAgIDIuMjQ0MjcrLTAuMDMzMjQgICAgICAgISBkZWZpbml0ZWx5IDEuMDIyMXggc2xv
d2VyCiAgIHJpY2hhcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAg
MC4xODkwOCstMC4wMDMzNCAgICA/ICAgICAwLjE5MTM4Ky0wLjAwODUyICAgICAgID8gbWlnaHQg
YmUgMS4wMTIyeCBzbG93ZXIKICAgc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4MiAgICAgICAwLjU0MzkzKy0wLjAwMjY4ICAgICAgICAgIDAuNTQzNjkrLTAuMDA5Njgg
ICAgICAgCiAgIHJlZ2V4cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAg
ICA1Ni4wMjczMSstMS4zMTUyNCAgICA/ICAgIDU2LjAzNzMyKy0wLjU5ODM5ICAgICAgID8KICAg
cGRmanMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgIDc1LjYyNjYz
Ky0wLjM4ODk2ICAgIF4gICAgNzMuNTUzMTcrLTAuNDY5NTcgICAgICAgXiBkZWZpbml0ZWx5IDEu
MDI4MnggZmFzdGVyCiAgIG1hbmRyZWVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eDIgICAgICA3MC44NTkxNystMS4wNjEzNyAgICA/ICAgIDcxLjgyNTgzKy0xLjcyNzU0ICAgICAg
ID8gbWlnaHQgYmUgMS4wMTM2eCBzbG93ZXIKICAgZ2JlbXUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4MiAgICAgIDU2LjY3NzA0Ky0wLjQxNzA3ICAgICAgICAgNTYuNjczMTMr
LTAuNzkzNDQgICAgICAgCiAgIGNsb3N1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMC43NTk0NistMC4wMDMxMCAgICAhICAgICAwLjc3NTAwKy0wLjAwNDI4ICAg
ICAgICEgZGVmaW5pdGVseSAxLjAyMDV4IHNsb3dlcgogICBqcXVlcnkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuMjAwODMrLTAuMTAwMTUgICAgISAgICAgOS40
OTMxMystMC4wNDQzMyAgICAgICAhIGRlZmluaXRlbHkgMS4wMzE4eCBzbG93ZXIKICAgYm94MmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgIDIwLjE2MjU3Ky0wLjA3
NTYxICAgICEgICAgMjAuNTExOTkrLTAuMjcxMjYgICAgICAgISBkZWZpbml0ZWx5IDEuMDE3M3gg
c2xvd2VyCiAgIHpsaWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAg
IDY4My40OTIzNSstNi4wOTUxNSAgICAgICAgNjY0LjcwMTg0Ky03OC45OTg2NiAgICAgICAgbWln
aHQgYmUgMS4wMjgzeCBmYXN0ZXIKICAgdHlwZXNjcmlwdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4MiAgICAxMDg2LjAxNDUzKy0xOS4wMDkwNiAgID8gIDEwODYuMjA0OTYrLTUuMjk5
MzkgICAgICAgPwoKICAgPGFyaXRobWV0aWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTM4LjEwOTEwKy0xLjMxOTAxICAgICAgICAxMzYuODMyMjIrLTQuODc2OTcgICAgICAg
ICBtaWdodCBiZSAxLjAwOTN4IGZhc3RlcgogICA8Z2VvbWV0cmljPiAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTAuMjA4ODMrLTAuMDI4NDUgICAgPyAgICAxMC4yMzMwNCst
MC4wNzU1OSAgICAgICA/IG1pZ2h0IGJlIDEuMDAyNHggc2xvd2VyCiAgIDxoYXJtb25pYz4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4xMDkwNystMC4wMDUzMiAgICA/
ICAgICAxLjExNjkxKy0wLjAyMDA1ICAgICAgID8gbWlnaHQgYmUgMS4wMDcxeCBzbG93ZXIKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VG9UICAgICAgICAgICAgICAgICAgICAgIEZvckluICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCktyYWtlbjoKICAgYWktYXN0YXIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA0NjIuMDczKy0xMy45MDEgICAgID8gICAgIDQ3Ni43MjQrLTIyLjM4
NiAgICAgICAgPyBtaWdodCBiZSAxLjAzMTd4IHNsb3dlcgogICBhdWRpby1iZWF0LWRldGVjdGlv
biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3My42NDkrLTUuMDQ1ICAgICAgXiAgICAg
MTMxLjg1NystMC42NDUgICAgICAgICBeIGRlZmluaXRlbHkgMS4zMTcweCBmYXN0ZXIKICAgYXVk
aW8tZGZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDcuNDcwKy0z
Ljg1MSAgICAgID8gICAgIDIxMS45NDcrLTguMjE0ICAgICAgICAgPyBtaWdodCBiZSAxLjAyMTZ4
IHNsb3dlcgogICBhdWRpby1mZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwMS4zOTIrLTAuMjAwICAgICAgICAgICAgMTAxLjE1NSstMC42MDMgICAgICAgICAKICAg
YXVkaW8tb3NjaWxsYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDAuNjQ0
Ky00LjA4NiAgICAgICAgICAgIDI5OS43MzArLTEuMzkxICAgICAgICAgCiAgIGltYWdpbmctZGFy
a3Jvb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM5LjkyMSstMy4wNzEgICAg
ICAgICAgICAyMzkuNDUzKy0xLjM5NCAgICAgICAgIAogICBpbWFnaW5nLWRlc2F0dXJhdGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ny40MTUrLTIuMTIzICAgICAgPyAgICAgIDk3
Ljg4OSstMy4xNjAgICAgICAgICA/CiAgIGltYWdpbmctZ2F1c3NpYW4tYmx1ciAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTU5LjI2NistMC42NDQgICAgICA/ICAgICAxNTkuMzY1Ky0xLjAy
MyAgICAgICAgID8KICAganNvbi1wYXJzZS1maW5hbmNpYWwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNjguNTg1Ky0wLjgyMiAgICAgICAgICAgICA2OC4wMTArLTIuMjUwICAgICAgICAg
CiAgIGpzb24tc3RyaW5naWZ5LXRpbmRlcmJveCAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5
LjU5OCstMC4yMzQgICAgICBeICAgICAgODYuMzk4Ky0wLjk3MiAgICAgICAgIF4gZGVmaW5pdGVs
eSAxLjAzNzB4IGZhc3RlcgogICBzdGFuZm9yZC1jcnlwdG8tYWVzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA3Ni4zODkrLTIuNTU5ICAgICAgPyAgICAgIDc2LjY0NystMS40ODcgICAg
ICAgICA/CiAgIHN0YW5mb3JkLWNyeXB0by1jY20gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDgwLjAxNistMTEuMzk5ICAgICAgICAgICAgNzYuMTI1Ky0xOC4zMDggICAgICAgICAgbWln
aHQgYmUgMS4wNTExeCBmYXN0ZXIKICAgc3RhbmZvcmQtY3J5cHRvLXBia2RmMiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyMTAuNjQzKy0wLjYzNiAgICAgIF4gICAgIDIwNC42MDQrLTAuNzAz
ICAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDI5NXggZmFzdGVyCiAgIHN0YW5mb3JkLWNyeXB0by1z
aGEyNTYtaXRlcmF0aXZlICAgICAgICAgICAgICAgICAgIDcxLjIyNSstMC45MDggICAgICAgICAg
ICAgNzEuMTk5Ky0xLjQzMCAgICAgICAgIAoKICAgPGFyaXRobWV0aWM+ICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxNjcuMDIwKy0xLjExMiAgICAgICAgICAgIDE2NC4zNjQr
LTEuNzgxICAgICAgICAgICBtaWdodCBiZSAxLjAxNjJ4IGZhc3RlcgogICA8Z2VvbWV0cmljPiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOS41MzUrLTEuMzg4ICAgICAg
ICAgICAgMTM2LjA4NCstMi41MDUgICAgICAgICAgIG1pZ2h0IGJlIDEuMDI1NHggZmFzdGVyCiAg
IDxoYXJtb25pYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE5Ljgx
NCstMS41NTggICAgICAgICAgICAxMTYuNzY5Ky0zLjM5NiAgICAgICAgICAgbWlnaHQgYmUgMS4w
MjYxeCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVG9UICAgICAgICAgICAgICAgICAgICAgIEZvckluICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCkpTUmVncmVzczoKICAgYWRhcHQtdG8tZG91Ymxl
LWRpdmlkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNy45ODI1Ky0wLjcwMDUgICAgID8g
ICAgIDE4LjIyNTUrLTAuMjczMCAgICAgICAgPyBtaWdodCBiZSAxLjAxMzV4IHNsb3dlcgogICBh
bGlhc2VkLWFyZ3VtZW50cy1nZXRieXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAxLjAwNDgr
LTAuMDgwOSAgICAgPyAgICAgIDEuMDQyMSstMC4wNjAwICAgICAgICA/IG1pZ2h0IGJlIDEuMDM3
MXggc2xvd2VyCiAgIGFsbG9jYXRlLWJpZy1vYmplY3QgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIuODMyMCstMC4yODg5ICAgICA/ICAgICAgMi44Mzk1Ky0wLjMxNTkgICAgICAgID8K
ICAgYXJpdHktbWlzbWF0Y2gtaW5saW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC45
NDU2Ky0wLjA3ODYgICAgID8gICAgICAwLjk5NDUrLTAuMDk1NyAgICAgICAgPyBtaWdodCBiZSAx
LjA1MTh4IHNsb3dlcgogICBhcnJheS1hY2Nlc3MtcG9seW1vcnBoaWMtc3RydWN0dXJlICAgICAg
ICAgICAgICAgICA4LjUzMjUrLTAuMTk0OSAgICAgISAgICAgIDguODg4NSstMC4xMTI3ICAgICAg
ICAhIGRlZmluaXRlbHkgMS4wNDE3eCBzbG93ZXIKICAgYXJyYXktbm9uYXJyYXktcG9seW1vcmhw
aWMtYWNjZXNzICAgICAgICAgICAgICAgICA1MC43ODUzKy0xLjI1OTcgICAgICAgICAgIDUwLjU5
NzQrLTAuNTQwMyAgICAgICAgCiAgIGFycmF5LXByb3RvdHlwZS1ldmVyeSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxMDAuMDkzNCstMi4xMTcyICAgICA/ICAgIDEwMC42NjA4Ky0zLjU3Mjkg
ICAgICAgID8KICAgYXJyYXktcHJvdG90eXBlLWZvckVhY2ggICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwMS4wNDc4Ky0xLjY0NTIgICAgICAgICAgIDk5LjkxMDErLTIuMzIxNyAgICAgICAgICBt
aWdodCBiZSAxLjAxMTR4IGZhc3RlcgogICBhcnJheS1wcm90b3R5cGUtbWFwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTIzLjEyMjcrLTEuNzM2NyAgICAgICAgICAxMjIuNjg0NCstMS4z
MjA5ICAgICAgICAKICAgYXJyYXktcHJvdG90eXBlLXNvbWUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEwMC40OTc2Ky0zLjMwMjQgICAgID8gICAgMTAwLjcwNzgrLTEuNTUyNCAgICAgICAg
PwogICBhcnJheS1zcGxpY2UtY29udGlndW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3
LjYwNDIrLTEuOTg4MyAgICAgPyAgICAgNTcuNzQ0MCstMS44MjM3ICAgICAgICA/CiAgIGFycmF5
LXdpdGgtZG91YmxlLWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNjU0NCstMC4x
MDM5ICAgICA/ICAgICAgNS43MTgwKy0wLjEwOTQgICAgICAgID8gbWlnaHQgYmUgMS4wMTEyeCBz
bG93ZXIKICAgYXJyYXktd2l0aC1kb3VibGUtaW5jcmVtZW50ICAgICAgICAgICAgICAgICAgICAg
ICAgMy45NTIzKy0wLjEzOTIgICAgID8gICAgICA0LjAyMzkrLTAuMjI5NSAgICAgICAgPyBtaWdo
dCBiZSAxLjAxODF4IHNsb3dlcgogICBhcnJheS13aXRoLWRvdWJsZS1tdWwtYWRkICAgICAgICAg
ICAgICAgICAgICAgICAgICA2LjUzOTArLTAuMTAxOSAgICAgICAgICAgIDYuNTM1NCstMC4wNjY4
ICAgICAgICAKICAgYXJyYXktd2l0aC1kb3VibGUtc3VtICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNC4xODc5Ky0wLjE3MzUgICAgID8gICAgICA0LjE5MjErLTAuMDM2NyAgICAgICAgPwog
ICBhcnJheS13aXRoLWludDMyLWFkZC1zdWIgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ljky
NDcrLTAuMzIyMCAgICAgPyAgICAgMTAuMDQ4MCstMC4xOTg2ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDEyNHggc2xvd2VyCiAgIGFycmF5LXdpdGgtaW50MzItb3ItZG91YmxlLXN1bSAgICAgICAgICAg
ICAgICAgICAgIDQuMjYyOCstMC4xMDk5ICAgICA/ICAgICAgNC4yNjU0Ky0wLjExOTMgICAgICAg
ID8KICAgQXJyYXlCdWZmZXItRGF0YVZpZXctYWxsb2MtbGFyZ2UtbG9uZy1saXZlZCAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk3LjA3NDIr
LTEuMTQ3OSAgICAgICAgICAgOTYuNjQ2OCstMC43NjgwICAgICAgICAKICAgQXJyYXlCdWZmZXIt
RGF0YVZpZXctYWxsb2MtbG9uZy1saXZlZCAgICAgICAgICAgICAyNi4yOTcyKy0wLjMxNjQgICAg
ICAgICAgIDI2LjA5NjIrLTAuNjY4OCAgICAgICAgCiAgIEFycmF5QnVmZmVyLUludDMyQXJyYXkt
Ynl0ZU9mZnNldCAgICAgICAgICAgICAgICAgIDQuNDg5OCstMC4xOTkyICAgICAgICAgICAgNC4z
ODkyKy0wLjIyNDIgICAgICAgICAgbWlnaHQgYmUgMS4wMjI5eCBmYXN0ZXIKICAgQXJyYXlCdWZm
ZXItSW50OEFycmF5LWFsbG9jLWxhcmdlLWxvbmctbGl2ZWQgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMS40OTMyKy0wLjk3OTMgICAgICAg
ICAgMTAxLjM2MDUrLTAuMjkwMyAgICAgICAgCiAgIEFycmF5QnVmZmVyLUludDhBcnJheS1hbGxv
Yy1sb25nLWxpdmVkLWJ1ZmZlciAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQyLjQyNTErLTEuNjk2MSAgICAgICAgICAgNDEuNzM0NSstMC45
OTQzICAgICAgICAgIG1pZ2h0IGJlIDEuMDE2NXggZmFzdGVyCiAgIEFycmF5QnVmZmVyLUludDhB
cnJheS1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgMjUuNjM5NSstMC42NzMzICAgICAgICAg
ICAyNS41Mjk4Ky0xLjA4NDggICAgICAgIAogICBBcnJheUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2Mg
ICAgICAgICAgICAgICAgICAgICAgIDIyLjQ4NTUrLTAuNTk1MCAgICAgICAgICAgMjIuMjgxNCst
MC4xMjM5ICAgICAgICAKICAgYXNtanNfYm9vbF9idWcgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOC42ODQxKy0wLjA4NDQgICAgICAgICAgICA4LjU0MTErLTAuMTAxOSAgICAg
ICAgICBtaWdodCBiZSAxLjAxNjd4IGZhc3RlcgogICBhc3NpZ24tY3VzdG9tLXNldHRlci1wb2x5
bW9ycGhpYyAgICAgICAgICAgICAgICAgICA0LjEzNzgrLTAuMTAyOCAgICAgPyAgICAgIDQuMTU4
OCstMC4wODk0ICAgICAgICA/CiAgIGFzc2lnbi1jdXN0b20tc2V0dGVyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDUuNTg3MCstMC4wNTAxICAgICA/ICAgICAgNS42MjIxKy0wLjA5NTEg
ICAgICAgID8KICAgYmFzaWMtc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxNC4zNjE2Ky0xLjQ3NDUgICAgICAgICAgIDE0LjI2OTgrLTEuMDgxMSAgICAgICAgCiAg
IGJpZy1pbnQtbXVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuMjQ0
MSstMC4xNzQ5ICAgICAgICAgICAgNS4yMjAzKy0wLjE5NzEgICAgICAgIAogICBib29sZWFuLXRl
c3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjAyMTkrLTAuMTgzMCAg
ICAgICAgICAgIDMuOTc5MistMC4wODEwICAgICAgICAgIG1pZ2h0IGJlIDEuMDEwN3ggZmFzdGVy
CiAgIGJyYW5jaC1mb2xkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQu
NDMxOCstMC4wNDA2ICAgICAgICAgICAgNC4zOTQ3Ky0wLjE2MDQgICAgICAgIAogICBieS12YWwt
Z2VuZXJpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLjM5NjgrLTAuNTUz
NiAgICAgPyAgICAgMTEuNDkxOSstMC4xODQwICAgICAgICA/CiAgIGNhbGwtc3ByZWFkLWFwcGx5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcuMTg1OCstMC40ODUyICAgICAgICAg
ICAxNi44MTg5Ky0wLjIwMzggICAgICAgICAgbWlnaHQgYmUgMS4wMjE4eCBmYXN0ZXIKICAgY2Fs
bC1zcHJlYWQtY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy41NzM0Ky0w
LjIxMjAgICAgICAgICAgICA3LjU0OTArLTAuMTYwNiAgICAgICAgCiAgIGNhcHR1cmVkLWFzc2ln
bm1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNTI1MystMC4yMDc3ICAgICA/
ICAgICAgMC41NTYzKy0wLjEwODMgICAgICAgID8gbWlnaHQgYmUgMS4wNTkxeCBzbG93ZXIKICAg
Y2FzdC1pbnQtdG8tZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy45MzAy
Ky0wLjIzNTggICAgICAgICAgICA3LjkxNTUrLTAuMjI1MiAgICAgICAgCiAgIGNlbGwtYXJndW1l
bnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuMDQ3OSstMC4xMzA3ICAg
ICA/ICAgICAxMC4xMDI4Ky0wLjM0NDkgICAgICAgID8KICAgY2ZnLXNpbXBsaWZ5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy40MTEzKy0wLjA1NzQgICAgID8gICAgICAz
LjQ3MjcrLTAuMDIyOSAgICAgICAgPyBtaWdodCBiZSAxLjAxODB4IHNsb3dlcgogICBjaGFpbi1n
ZXR0ZXItYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLjc3NTUrLTAuNTQ3
NyAgICAgICAgICAgMTIuNDM4MCstMC4zMDgxICAgICAgICAgIG1pZ2h0IGJlIDEuMDI3MXggZmFz
dGVyCiAgIGNtcGVxLW9iai10by1vYmotb3RoZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTEuMzMyMCstMC42NDQ3ICAgICAgICAgICAxMS4zMTI0Ky0wLjQ3OTAgICAgICAgIAogICBjb25z
dGFudC10ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjQzMTArLTAu
MTA4MyAgICAgPyAgICAgIDcuNDc2MistMC4wNzQ4ICAgICAgICA/CiAgIERhdGFWaWV3LWN1c3Rv
bS1wcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAxMDMuNzc3MystMS4wNjYwICAgICAg
ICAgIDEwMi42ODUyKy0yLjUwNDQgICAgICAgICAgbWlnaHQgYmUgMS4wMTA2eCBmYXN0ZXIKICAg
ZGVsYXktdGVhci1vZmYtYXJndW1lbnRzLXN0cmljdG1vZGUgICAgICAgICAgICAgICAgMy4xMDk5
Ky0wLjE1MDggICAgID8gICAgICAzLjE1NzUrLTAuMDI3NyAgICAgICAgPyBtaWdodCBiZSAxLjAx
NTN4IHNsb3dlcgogICBkZXN0cnVjdHVyaW5nLWFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA3LjUwOTkrLTAuMTI0NSAgICAgICAgICAgIDcuNDg4NistMC4wOTY5ICAgICAgICAK
ICAgZGVzdHJ1Y3R1cmluZy1zd2FwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy42
MDIxKy0wLjA0MzQgICAgID8gICAgICA3LjYyNTQrLTAuMTMxMiAgICAgICAgPwogICBkaXJlY3Qt
YXJndW1lbnRzLWdldGJ5dmFsICAgICAgICAgICAgICAgICAgICAgICAgICAxLjA2MTUrLTAuMDI3
MiAgICAgPyAgICAgIDEuMDkxMistMC4wODkzICAgICAgICA/IG1pZ2h0IGJlIDEuMDI3OXggc2xv
d2VyCiAgIGRvdWJsZS1nZXQtYnktdmFsLW91dC1vZi1ib3VuZHMgICAgICAgICAgICAgICAgICAg
IDUuNDY2OCstMC4wMzk0ICAgICAgICAgICAgNS4zNjU0Ky0wLjI1OTkgICAgICAgICAgbWlnaHQg
YmUgMS4wMTg5eCBmYXN0ZXIKICAgZG91YmxlLXBvbGx1dGlvbi1nZXRieXZhbCAgICAgICAgICAg
ICAgICAgICAgICAgICAgOS41OTA5Ky0wLjEzMzkgICAgICAgICAgICA5LjUxNzUrLTAuMjI1OCAg
ICAgICAgCiAgIGRvdWJsZS1wb2xsdXRpb24tcHV0YnlvZmZzZXQgICAgICAgICAgICAgICAgICAg
ICAgIDUuMjgwMystMC4wODEyICAgICAgICAgICAgNS4xOTg1Ky0wLjE5MjEgICAgICAgICAgbWln
aHQgYmUgMS4wMTU3eCBmYXN0ZXIKICAgZG91YmxlLXRvLWludDMyLXR5cGVkLWFycmF5LW5vLWlu
bGluZSAgICAgICAgICAgICAgMi41NDQ2Ky0wLjAzOTQgICAgID8gICAgICAyLjU1MjkrLTAuMTAx
OCAgICAgICAgPwogICBkb3VibGUtdG8taW50MzItdHlwZWQtYXJyYXkgICAgICAgICAgICAgICAg
ICAgICAgICAyLjE4MzgrLTAuMTE4OCAgICAgICAgICAgIDIuMTgyNistMC4xMjU3ICAgICAgICAK
ICAgZG91YmxlLXRvLXVpbnQzMi10eXBlZC1hcnJheS1uby1pbmxpbmUgICAgICAgICAgICAgMi42
MjE1Ky0wLjE0MjkgICAgID8gICAgICAyLjcyNDUrLTAuMTU1NCAgICAgICAgPyBtaWdodCBiZSAx
LjAzOTN4IHNsb3dlcgogICBkb3VibGUtdG8tdWludDMyLXR5cGVkLWFycmF5ICAgICAgICAgICAg
ICAgICAgICAgICAyLjMwMjIrLTAuMDQ4MSAgICAgICAgICAgIDIuMjkwMCstMC4wODk1ICAgICAg
ICAKICAgZW1wdHktc3RyaW5nLXBsdXMtaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OC45MDQxKy0wLjQzNDUgICAgID8gICAgICA5LjA2NzgrLTAuMzEzOSAgICAgICAgPyBtaWdodCBi
ZSAxLjAxODR4IHNsb3dlcgogICBlbXNjcmlwdGVuLWN1YmUyaGFzaCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQ3LjIyMTcrLTAuOTMyMSAgICAgICAgICAgNDcuMDQwNSstMC42ODA3ICAg
ICAgICAKICAgZXh0ZXJuYWwtYXJndW1lbnRzLWdldGJ5dmFsICAgICAgICAgICAgICAgICAgICAg
ICAgMS44ODUwKy0wLjE1ODIgICAgID8gICAgICAxLjk0ODkrLTAuMTQ3MyAgICAgICAgPyBtaWdo
dCBiZSAxLjAzMzl4IHNsb3dlcgogICBleHRlcm5hbC1hcmd1bWVudHMtcHV0Ynl2YWwgICAgICAg
ICAgICAgICAgICAgICAgICAyLjYxMzUrLTAuMTM2MSAgICAgICAgICAgIDIuNTgxMSstMC4yMzE1
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEyNnggZmFzdGVyCiAgIGZpeGVkLXR5cGVkLWFycmF5LXN0
b3JhZ2UtdmFyLWluZGV4ICAgICAgICAgICAgICAgIDEuMzkwNSstMC4xMTYxICAgICA/ICAgICAg
MS40MTA0Ky0wLjEyNTAgICAgICAgID8gbWlnaHQgYmUgMS4wMTQzeCBzbG93ZXIKICAgZml4ZWQt
dHlwZWQtYXJyYXktc3RvcmFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wMTYxKy0wLjEw
MTAgICAgID8gICAgICAxLjA0MzArLTAuMTc2MSAgICAgICAgPyBtaWdodCBiZSAxLjAyNjZ4IHNs
b3dlcgogICBGbG9hdDMyQXJyYXktbWF0cml4LW11bHQgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2LjEzMTArLTAuNDEwNyAgICAgICAgICAgIDUuODE5OSstMC40MjQxICAgICAgICAgIG1pZ2h0
IGJlIDEuMDUzNHggZmFzdGVyCiAgIEZsb2F0MzJBcnJheS10by1GbG9hdDY0QXJyYXktc2V0ICAg
ICAgICAgICAgICAgICAgNzQuNDIzMistMi45NzY1ICAgICAgICAgICA3MS45NTEzKy0wLjEwMjIg
ICAgICAgICAgbWlnaHQgYmUgMS4wMzQ0eCBmYXN0ZXIKICAgRmxvYXQ2NEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQgICAgICAgICAgICAgICAgICAgICA4NS41MzM2Ky0xLjIyODUgICAgID8gICAgIDg2
LjQ4MDArLTAuOTc2OCAgICAgICAgPyBtaWdodCBiZSAxLjAxMTF4IHNsb3dlcgogICBGbG9hdDY0
QXJyYXktdG8tSW50MTZBcnJheS1zZXQgICAgICAgICAgICAgICAgICAgIDk0Ljg2MjcrLTAuMzky
NyAgICAgPyAgICAgOTUuODc1OCstMi42MjUwICAgICAgICA/IG1pZ2h0IGJlIDEuMDEwN3ggc2xv
d2VyCiAgIGZvbGQtZG91YmxlLXRvLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MjAuNjE2MystMC40MDIwICAgICA/ICAgICAyMC42ODE5Ky0wLjQ4MzUgICAgICAgID8KICAgZm9s
ZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1yYXJlLWludCAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LjU2OTYrLTAuNDI0
MCAgICAgPyAgICAgMTguNzAxOCstMC4zMDcwICAgICAgICA/CiAgIGZvbGQtZ2V0LWJ5LWlkLXRv
LW11bHRpLWdldC1ieS1vZmZzZXQgICAgICAgICAgICAgMTguOTE2NystMC43NDY1ICAgICAgICAg
ICAxOC40NjUyKy0wLjUyMDYgICAgICAgICAgbWlnaHQgYmUgMS4wMjQ1eCBmYXN0ZXIKICAgZm9s
ZC1tdWx0aS1nZXQtYnktb2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMi4xOTc5Ky0wLjA2ODkgICAg
ICAgICAgIDEyLjAyNTErLTAuNjI3OCAgICAgICAgICBtaWdodCBiZSAxLjAxNDR4IGZhc3Rlcgog
ICBmb2xkLW11bHRpLWdldC1ieS1vZmZzZXQtdG8tcG9seS1nZXQtYnktb2Zmc2V0ICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuMDkzOCst
MC4zODk5ICAgICA/ICAgICAxMi4zNzgyKy0xLjEyODMgICAgICAgID8gbWlnaHQgYmUgMS4wMjM1
eCBzbG93ZXIKICAgZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0LWJ5LW9mZnNl
dCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEyLjQyMzgrLTAuNDk1MyAgICAgPyAgICAgMTIuODA1MistMC40OTY3ICAgICAgICA/IG1pZ2h0
IGJlIDEuMDMwN3ggc2xvd2VyCiAgIGZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnkt
b2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTEuNTE1OSstMC4wOTU2ICAgICAgICAgICAxMS4yOTg1Ky0wLjUyNjkgICAgICAgICAg
bWlnaHQgYmUgMS4wMTkyeCBmYXN0ZXIKICAgZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXJl
cGxhY2Utb3ItdHJhbnNpdGlvbi1wdXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuNzQ4OCstMC4yOTA3ICAgICA/ICAg
ICAxNi4wOTU1Ky0wLjQ0NTkgICAgICAgID8gbWlnaHQgYmUgMS4wMjIweCBzbG93ZXIKICAgZm9s
ZC1wdXQtYnktaWQtdG8tbXVsdGktcHV0LWJ5LW9mZnNldCAgICAgICAgICAgICAyMC40NzQxKy0w
LjM4ODIgICAgICAgICAgIDIwLjI0NjMrLTEuMTUzOSAgICAgICAgICBtaWdodCBiZSAxLjAxMTN4
IGZhc3RlcgogICBmb2xkLXB1dC1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwLjc5MDErLTAuMjA2NiAgICAgPyAgICAgMTAuODQwMystMC4wODk0ICAgICAgICA/CiAg
IGZvci1vZi1pdGVyYXRlLWFycmF5LWVudHJpZXMgICAgICAgICAgICAgICAgICAgICAgIDguMjY1
NCstMC4zMDMyICAgICAgICAgICAgNy45OTAzKy0wLjI0MDAgICAgICAgICAgbWlnaHQgYmUgMS4w
MzQ0eCBmYXN0ZXIKICAgZm9yLW9mLWl0ZXJhdGUtYXJyYXkta2V5cyAgICAgICAgICAgICAgICAg
ICAgICAgICAgMy40Mjc0Ky0wLjE2OTQgICAgICAgICAgICAzLjE4MTUrLTAuMTc0NiAgICAgICAg
ICBtaWdodCBiZSAxLjA3NzN4IGZhc3RlcgogICBmb3Itb2YtaXRlcmF0ZS1hcnJheS12YWx1ZXMg
ICAgICAgICAgICAgICAgICAgICAgICAyLjkxOTgrLTAuMTcyOSAgICAgPyAgICAgIDIuOTMzOSst
MC4yMTYyICAgICAgICA/CiAgIGZyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjIuOTM4OCstMC41NjE3ICAgICAgICAgICAyMi41Mzk4Ky0wLjQ1NDcgICAg
ICAgICAgbWlnaHQgYmUgMS4wMTc3eCBmYXN0ZXIKICAgZnRsLWxpYnJhcnktaW5saW5pbmctZGF0
YXZpZXcgICAgICAgICAgICAgICAgICAgICA4OS43ODc3Ky0wLjYyNTEgICAgID8gICAgIDkxLjIz
ODUrLTEuMDU2MyAgICAgICAgPyBtaWdodCBiZSAxLjAxNjJ4IHNsb3dlcgogICBmdGwtbGlicmFy
eS1pbmxpbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0Ljk5MjUrLTAuOTUzNiAg
ICAgPyAgICAgNjcuMjgwOCstMi4wOTg3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDM1Mnggc2xvd2Vy
CiAgIGZ1bmN0aW9uLWRvdC1hcHBseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEu
OTk1NystMC4xNTI2ICAgICAgICAgICAgMS45ODI2Ky0wLjA3ODYgICAgICAgIAogICBmdW5jdGlv
bi10ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjM4MjArLTAuMTE0
OSAgICAgPyAgICAgIDQuNDcxNCstMC4xMTYxICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwNHggc2xv
d2VyCiAgIGZ1bmN0aW9uLXdpdGgtZXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MzIuMTk3MCstMS4wMDQzICAgICA/ICAgICAzMi4zMTc0Ky0wLjQ5NjQgICAgICAgID8KICAgZ2Nz
ZS1wb2x5LWdldC1sZXNzLW9idmlvdXMgICAgICAgICAgICAgICAgICAgICAgICAyNC45OTYzKy0w
LjU2MjkgICAgICAgICAgIDI0LjczMTkrLTAuMzM0OSAgICAgICAgICBtaWdodCBiZSAxLjAxMDd4
IGZhc3RlcgogICBnY3NlLXBvbHktZ2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDI0LjgyNjgrLTAuMzMyMyAgICAgPyAgICAgMjUuMDAwNCstMS4wMDA4ICAgICAgICA/CiAg
IGdjc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuMzY0
MCstMC4zODIwICAgICA/ICAgICAgNi42NjQ5Ky0xLjEwMDIgICAgICAgID8gbWlnaHQgYmUgMS4w
NDczeCBzbG93ZXIKICAgZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tc2ltcGxlICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDMuMTg4MCstMC4xNjAxICAgICAgICAgICAgMy4xNzQ3Ky0wLjA5ODEgICAg
ICAgIAogICBnZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbiAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4
LjI3MDMrLTAuMDY2MSAgICAgPyAgICAgIDguNDEzOCstMC4xMDQ5ICAgICAgICA/IG1pZ2h0IGJl
IDEuMDE3M3ggc2xvd2VyCiAgIGdldC1ieS1pZC1jaGFpbi1mcm9tLXRyeS1ibG9jayAgICAgICAg
ICAgICAgICAgICAgIDYuOTA2OSstMC4xMzMxICAgICAgICAgICAgNi44Mjc1Ky0wLjE5MzggICAg
ICAgICAgbWlnaHQgYmUgMS4wMTE2eCBmYXN0ZXIKICAgZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbiAgICAgICAgICAgICAgNy42OTczKy0wLjg0MjUgICAgICAgICAgICA3LjM1
NDcrLTAuMTMzNyAgICAgICAgICBtaWdodCBiZSAxLjA0NjZ4IGZhc3RlcgogICBnZXQtYnktaWQt
cHJvdG8tb3Itc2VsZiAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyLjU0NTUrLTAuODY4OCAg
ICAgICAgICAgMjIuMzUzNistMS4xMjM4ICAgICAgICAKICAgZ2V0LWJ5LWlkLXF1YWRtb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy44MDUzKy0wLjE3NjIgICAgID8g
ICAgICAzLjgwNTUrLTAuMDY1NSAgICAgICAgPwogICBnZXQtYnktaWQtc2VsZi1vci1wcm90byAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIyLjk5ODQrLTAuODUxOCAgICAgICAgICAgMjIuOTQ3
MystMC42MTkxICAgICAgICAKICAgZ2V0LWJ5LXZhbC1vdXQtb2YtYm91bmRzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNS40MjI5Ky0wLjE3MTMgICAgID8gICAgICA1LjQ0ODIrLTAuMjUxMSAg
ICAgICAgPwogICBnZXRfY2FsbGVlX21vbm9tb3JwaGljICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA0LjM0MTMrLTAuMjgwNiAgICAgPyAgICAgIDQuNDY0MCstMC4yMjkwICAgICAgICA/IG1p
Z2h0IGJlIDEuMDI4M3ggc2xvd2VyCiAgIGdldF9jYWxsZWVfcG9seW1vcnBoaWMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQuMTE1MSstMC4xNjg2ICAgICAgICAgICAgNC4wMDgyKy0wLjIy
MjcgICAgICAgICAgbWlnaHQgYmUgMS4wMjY2eCBmYXN0ZXIKICAgZ2V0dGVyLW5vLWFjdGl2YXRp
b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS41OTgxKy0wLjE0MTQgICAgICAgICAg
ICA1LjU4NzIrLTAuMTI1OCAgICAgICAgCiAgIGdldHRlci1yaWNoYXJkcyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxMjkuMTk3MystNy4wNTQxICAgICA/ICAgIDEyOS44NjEwKy00
LjUzODAgICAgICAgID8KICAgZ2V0dGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNi4zMzM5Ky0wLjA4NzYgICAgICAgICAgICA2LjMyMjIrLTAuMDQ0MyAgICAg
ICAgCiAgIGdsb2JhbC12YXItY29uc3QtaW5mZXItZmlyZS1mcm9tLW9wdCAgICAgICAgICAgICAg
IDEuMjEwMSstMC4wNDc4ICAgICAgICAgICAgMS4xMDQ5Ky0wLjEwODYgICAgICAgICAgbWlnaHQg
YmUgMS4wOTUyeCBmYXN0ZXIKICAgZ2xvYmFsLXZhci1jb25zdC1pbmZlciAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMS4xNDQ4Ky0wLjEyMjQgICAgICAgICAgICAxLjEwNDkrLTAuMjI5OCAg
ICAgICAgICBtaWdodCBiZSAxLjAzNjF4IGZhc3RlcgogICBIYXNoTWFwLXB1dC1nZXQtaXRlcmF0
ZS1rZXlzICAgICAgICAgICAgICAgICAgICAgIDMzLjc0MTArLTEuMjI0NiAgICAgPyAgICAgMzMu
ODQ2OCstMC42MjAwICAgICAgICA/CiAgIEhhc2hNYXAtcHV0LWdldC1pdGVyYXRlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMzMuMjU5MystMC40MjM1ICAgICA/ICAgICAzNC42NDU2Ky00LjEy
ODQgICAgICAgID8gbWlnaHQgYmUgMS4wNDE3eCBzbG93ZXIKICAgSGFzaE1hcC1zdHJpbmctcHV0
LWdldC1pdGVyYXRlICAgICAgICAgICAgICAgICAgICAzNy45NzkwKy0yLjIwODIgICAgID8gICAg
IDM5LjU1NzcrLTEuMzA1OSAgICAgICAgPyBtaWdodCBiZSAxLjA0MTZ4IHNsb3dlcgogICBob2lz
dC1tYWtlLXJvcGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1LjEzNzUrLTEu
NDEwOCAgICAgICAgICAgMTMuNzI2MCstMS40NTE4ICAgICAgICAgIG1pZ2h0IGJlIDEuMTAyOHgg
ZmFzdGVyCiAgIGhvaXN0LXBvbHktY2hlY2stc3RydWN0dXJlLWVmZmVjdGZ1bC1sb29wICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNDYz
OSstMC4xOTc2ICAgICAgICAgICAgNi4yNTk1Ky0wLjE5MDIgICAgICAgICAgbWlnaHQgYmUgMS4w
MzI3eCBmYXN0ZXIKICAgaG9pc3QtcG9seS1jaGVjay1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAg
ICAgICAgICAgNC43NjQ4Ky0wLjE3NzYgICAgID8gICAgICA0Ljg0MzArLTAuNDgyNCAgICAgICAg
PyBtaWdodCBiZSAxLjAxNjR4IHNsb3dlcgogICBpbXVsLWRvdWJsZS1vbmx5ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEwLjI0MTQrLTAuNDE1OCAgICAgPyAgICAgMTAuMzk4Nyst
MS4xODIxICAgICAgICA/IG1pZ2h0IGJlIDEuMDE1NHggc2xvd2VyCiAgIGltdWwtaW50LW9ubHkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuNjU2NSstMC4wOTQ2ICAgICA/
ICAgICAxMi44NTEzKy0wLjE4NjcgICAgICAgID8gbWlnaHQgYmUgMS4wMTU0eCBzbG93ZXIKICAg
aW11bC1taXhlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC4yNTIw
Ky0wLjk0NzEgICAgICAgICAgIDEwLjAzNzQrLTAuNzU2OSAgICAgICAgICBtaWdodCBiZSAxLjAy
MTR4IGZhc3RlcgogICBpbi1mb3VyLWNhc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDIzLjgyNjMrLTAuMzUyMyAgICAgICAgICAgMjMuODIwNystMC4yODExICAgICAgICAK
ICAgaW4tb25lLWNhc2UtZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMi4z
NjMwKy0wLjIwNTkgICAgID8gICAgIDEyLjM5NzArLTAuMDc4NyAgICAgICAgPwogICBpbi1vbmUt
Y2FzZS10cnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLjM0MzcrLTAuMTIx
MyAgICAgPyAgICAgMTIuMzQzOCstMC4wOTM5ICAgICAgICA/CiAgIGluLXR3by1jYXNlcyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuODI1NystMC4yMDY2ICAgICA/ICAg
ICAxMi44MzIyKy0wLjE5OTggICAgICAgID8KICAgaW5kZXhlZC1wcm9wZXJ0aWVzLWluLW9iamVj
dHMgICAgICAgICAgICAgICAgICAgICAgMy42ODE2Ky0wLjA1MzIgICAgICAgICAgICAzLjU5NjYr
LTAuMTIwMiAgICAgICAgICBtaWdodCBiZSAxLjAyMzZ4IGZhc3RlcgogICBpbmZlci1jbG9zdXJl
LWNvbnN0LXRoZW4tbW92LW5vLWlubGluZSAgICAgICAgICAgICA0LjIyNjArLTAuMDc1MSAgICAg
ICAgICAgIDQuMjE1NistMC4xNTIzICAgICAgICAKICAgaW5mZXItY2xvc3VyZS1jb25zdC10aGVu
LW1vdiAgICAgICAgICAgICAgICAgICAgICAyNC4zNjEwKy0wLjE3NzMgICAgID8gICAgIDI0LjY4
NzQrLTAuMjE4OCAgICAgICAgPyBtaWdodCBiZSAxLjAxMzR4IHNsb3dlcgogICBpbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZSAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1LjA0MjcrLTAuMzg4MCAgICAg
PyAgICAgMTUuMjI0MCstMC43MTY0ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyMXggc2xvd2VyCiAg
IGluZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUgICAgICAgICAgICAgMjguMjA3
OCstMi4wNDc5ICAgICAgICAgICAyNy44NjA3Ky0wLjMwMjEgICAgICAgICAgbWlnaHQgYmUgMS4w
MTI1eCBmYXN0ZXIKICAgaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5l
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NjQuMTQwMystMC4yOTU1ICAgICA/ICAgICA2NC4yNTAyKy0wLjI3MDMgICAgICAgID8KICAgaW5m
ZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXIgICAgICAgICAgICAgICAgICAyNy45NTg5Ky0w
LjU4MDUgICAgID8gICAgIDI4LjAxMjcrLTAuNjU1MCAgICAgICAgPwogICBpbmZlci1jb25zdGFu
dC1nbG9iYWwtcHJvcGVydHkgICAgICAgICAgICAgICAgICAgICA0LjQ2NTUrLTAuMDg3NCAgICAg
PyAgICAgIDQuNTU3OCstMC4xMjc3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIwN3ggc2xvd2VyCiAg
IGluZmVyLWNvbnN0YW50LXByb3BlcnR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMTIw
NSstMC4xMjgxICAgICA/ICAgICAgMy4yNDYyKy0wLjM5MzIgICAgICAgID8gbWlnaHQgYmUgMS4w
NDAzeCBzbG93ZXIKICAgaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycyAgICAgICAgICAg
ICAgICAgICAxNC44MjUzKy0wLjIzNDIgICAgICAgICAgIDE0Ljc0MjkrLTAuMjUzNCAgICAgICAg
CiAgIGluZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMgICAgICAgICAgICAgICAgICAgMTQu
MjMxOSstMC41MTcyICAgICAgICAgICAxNC4wODcyKy0wLjY4OTggICAgICAgICAgbWlnaHQgYmUg
MS4wMTAzeCBmYXN0ZXIKICAgaW5mZXItb25lLXRpbWUtY2xvc3VyZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxNC4wMjIzKy0wLjI2MzkgICAgID8gICAgIDE0LjE0NzIrLTAuMzc2OCAgICAg
ICAgPwogICBpbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUgICAgICAgICAgICAgICAgICAgICAg
IDI0LjQxODUrLTAuNTM5NCAgICAgPyAgICAgMjQuNzE2MistMC4zMTQ3ICAgICAgICA/IG1pZ2h0
IGJlIDEuMDEyMnggc2xvd2VyCiAgIGlubGluZS1hcmd1bWVudHMtYWNjZXNzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEuODg3MCstMC4wODcyICAgICA/ICAgICAgMS45Mjg1Ky0wLjE3MDkg
ICAgICAgID8gbWlnaHQgYmUgMS4wMjIweCBzbG93ZXIKICAgaW5saW5lLWFyZ3VtZW50cy1hbGlh
c2VkLWFjY2VzcyAgICAgICAgICAgICAgICAgICAgMi4xNDkyKy0wLjA0ODEgICAgID8gICAgICAy
LjE3MDYrLTAuMDMwNiAgICAgICAgPwogICBpbmxpbmUtYXJndW1lbnRzLWxvY2FsLWVzY2FwZSAg
ICAgICAgICAgICAgICAgICAgIDE5LjM3MDErLTAuOTA3OSAgICAgXiAgICAgMTYuNTc5MistMC42
MjczICAgICAgICBeIGRlZmluaXRlbHkgMS4xNjgzeCBmYXN0ZXIKICAgaW5saW5lLWdldC1zY29w
ZWQtdmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS43NDYwKy0wLjE4MTQgICAgICAg
ICAgICA1LjY0NzArLTAuMDc0MiAgICAgICAgICBtaWdodCBiZSAxLjAxNzV4IGZhc3RlcgogICBp
bmxpbmVkLXB1dC1ieS1pZC10cmFuc2l0aW9uICAgICAgICAgICAgICAgICAgICAgIDEyLjkzNjcr
LTAuMjMyMCAgICAgICAgICAgMTIuNzU2MystMC4zMjQxICAgICAgICAgIG1pZ2h0IGJlIDEuMDE0
MXggZmFzdGVyCiAgIGludC1vci1vdGhlci1hYnMtdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAg
ICAgICAgIDYuNzgyNSstMC4xMjk0ICAgICAgICAgICAgNi43MzA1Ky0wLjIwMjggICAgICAgIAog
ICBpbnQtb3Itb3RoZXItYWJzLXplcm8tdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgIDI1Ljg1
MTErLTAuODAxMCAgICAgICAgICAgMjUuNzY0NSstMC4zMDE3ICAgICAgICAKICAgaW50LW9yLW90
aGVyLWFkZC10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAgICAgNS43NjkwKy0wLjEwODUg
ICAgICAgICAgICA1LjcxMzArLTAuMDUyMyAgICAgICAgCiAgIGludC1vci1vdGhlci1hZGQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNjUxNistMC4xMzkxICAgICA/ICAgICAg
Ny42ODEyKy0wLjI0NDEgICAgICAgID8KICAgaW50LW9yLW90aGVyLWRpdi10aGVuLWdldC1ieS12
YWwgICAgICAgICAgICAgICAgICAgNC45OTY3Ky0wLjEwNDAgICAgICAgICAgICA0Ljk0MzQrLTAu
MDg2NCAgICAgICAgICBtaWdodCBiZSAxLjAxMDh4IGZhc3RlcgogICBpbnQtb3Itb3RoZXItbWF4
LXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA2LjMyMjgrLTAuMzg5MSAgICAgICAg
ICAgIDYuMjUzMystMC4yNzI0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDExMXggZmFzdGVyCiAgIGlu
dC1vci1vdGhlci1taW4tdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAgIDQuODY4Nyst
MC4xMTAyICAgICA/ICAgICAgNC45MjUyKy0wLjE0MDEgICAgICAgID8gbWlnaHQgYmUgMS4wMTE2
eCBzbG93ZXIKICAgaW50LW9yLW90aGVyLW1vZC10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAg
ICAgICAgNC45NDI1Ky0wLjEwMzUgICAgID8gICAgICA0Ljk2MzQrLTAuMDY4MSAgICAgICAgPwog
ICBpbnQtb3Itb3RoZXItbXVsLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA1LjEw
NzMrLTAuNzI3NSAgICAgICAgICAgIDQuOTA5MistMC4zMTA4ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDQwM3ggZmFzdGVyCiAgIGludC1vci1vdGhlci1uZWctdGhlbi1nZXQtYnktdmFsICAgICAgICAg
ICAgICAgICAgIDYuMTAwMystMC4xMTE4ICAgICAgICAgICAgNi4wNjA1Ky0wLjA2MjMgICAgICAg
IAogICBpbnQtb3Itb3RoZXItbmVnLXplcm8tdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgIDI1
Ljg3MDQrLTAuNDI4NiAgICAgICAgICAgMjUuNTIyOCstMC4zMDE1ICAgICAgICAgIG1pZ2h0IGJl
IDEuMDEzNnggZmFzdGVyCiAgIGludC1vci1vdGhlci1zdWItdGhlbi1nZXQtYnktdmFsICAgICAg
ICAgICAgICAgICAgIDUuNzc0NistMC4wODQzICAgICAgICAgICAgNS42ODgyKy0wLjA1NjMgICAg
ICAgICAgbWlnaHQgYmUgMS4wMTUyeCBmYXN0ZXIKICAgaW50LW9yLW90aGVyLXN1YiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNC41MzQzKy0wLjEzNjcgICAgID8gICAgICA0LjU1
ODIrLTAuMjQ4MiAgICAgICAgPwogICBpbnQtb3ZlcmZsb3ctbG9jYWwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA1LjYyMTYrLTAuMDg4NiAgICAgICAgICAgIDUuNTkwOCstMC4wOTQ5
ICAgICAgICAKICAgSW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgICAgICAg
ICAgICA2MS45MDIzKy0xLjQ5NDUgICAgICAgICAgIDYwLjk3NzcrLTAuMzg5MSAgICAgICAgICBt
aWdodCBiZSAxLjAxNTJ4IGZhc3RlcgogICBJbnQxNkFycmF5LWJ1YmJsZS1zb3J0LXdpdGgtYnl0
ZUxlbmd0aCAgICAgICAgICAgIDM5LjAyODArLTAuMzQ3NiAgICAgPyAgICAgMzkuMTMxOCstMS4w
NTEyICAgICAgICA/CiAgIEludDE2QXJyYXktYnViYmxlLXNvcnQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMzcuOTY0MSstMC40NDc1ICAgICA/ICAgICAzOC40MjE3Ky0wLjk5MjkgICAgICAg
ID8gbWlnaHQgYmUgMS4wMTIxeCBzbG93ZXIKICAgSW50MTZBcnJheS1sb2FkLWludC1tdWwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMS44Nzg5Ky0wLjE2ODkgICAgICAgICAgICAxLjgyMTMr
LTAuMDkzNyAgICAgICAgICBtaWdodCBiZSAxLjAzMTZ4IGZhc3RlcgogICBJbnQxNkFycmF5LXRv
LUludDMyQXJyYXktc2V0ICAgICAgICAgICAgICAgICAgICAgIDcxLjQ3MjQrLTIuMzMzNiAgICAg
PyAgICAgNzMuMDMwMCstNC44MDMxICAgICAgICA/IG1pZ2h0IGJlIDEuMDIxOHggc2xvd2VyCiAg
IEludDMyQXJyYXktYWxsb2MtbGFyZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYuODE0
MistMS4zNjAxICAgICA/ICAgICAzNi45ODM5Ky0xLjE1NTIgICAgICAgID8KICAgSW50MzJBcnJh
eS1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgICAgICAgICAgICA2Ny44NjU1Ky0wLjI4Mjcg
ICAgICAgICAgIDY3Ljc2NTArLTAuMjEyOCAgICAgICAgCiAgIEludDMyQXJyYXktYWxsb2MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuODg5MistMC4xMDQ0ICAgICA/ICAgICAg
My45MDgwKy0wLjA5OTcgICAgICAgID8KICAgSW50MzJBcnJheS1JbnQ4QXJyYXktdmlldy1hbGxv
YyAgICAgICAgICAgICAgICAgICAxMi42NzA0Ky0wLjY4NzUgICAgICAgICAgIDEyLjQxNDcrLTAu
NjQwNyAgICAgICAgICBtaWdodCBiZSAxLjAyMDZ4IGZhc3RlcgogICBpbnQ1Mi1zcGlsbCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLjI0NjMrLTAuMjY1MSAgICAgPyAg
ICAgMTAuMjU2NSstMC4zNDU5ICAgICAgICA/CiAgIEludDhBcnJheS1hbGxvYy1sb25nLWxpdmVk
ICAgICAgICAgICAgICAgICAgICAgICAgNTUuNjQ3NCstMS4zNjE4ICAgICA/ICAgICA1NS45Mjcz
Ky0xLjI5OTcgICAgICAgID8KICAgSW50OEFycmF5LWxvYWQtd2l0aC1ieXRlTGVuZ3RoICAgICAg
ICAgICAgICAgICAgICAgNC41ODM3Ky0wLjExMTYgICAgID8gICAgICA0LjYzMzIrLTAuMDU1OSAg
ICAgICAgPyBtaWdodCBiZSAxLjAxMDh4IHNsb3dlcgogICBJbnQ4QXJyYXktbG9hZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjU1NTcrLTAuMDg5MyAgICAgPyAgICAgIDQu
NjA0MistMC4wNzIyICAgICAgICA/IG1pZ2h0IGJlIDEuMDEwNnggc2xvd2VyCiAgIGludGVnZXIt
ZGl2aWRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQuMjM3OCstMC4zMDQ1
ICAgICAgICAgICAxNC4xNDQwKy0wLjIzODEgICAgICAgIAogICBpbnRlZ2VyLW1vZHVsbyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjYyMzQrLTAuMjAxMCAgICAgICAgICAg
IDIuNTY2NSstMC4xNTk2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIyMnggZmFzdGVyCiAgIGxhcmdl
LWludC1jYXB0dXJlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguNjQ4OCstMC41
NzY1ICAgICA/ICAgICAgOC43NTE0Ky0wLjMwNjAgICAgICAgID8gbWlnaHQgYmUgMS4wMTE5eCBz
bG93ZXIKICAgbGFyZ2UtaW50LW5lZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyMC44MjU3Ky0wLjQxOTkgICAgID8gICAgIDIwLjkyOTArLTAuNDk5NyAgICAgICAgPwogICBs
YXJnZS1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5LjE2MTYr
LTAuNzAwNSAgICAgICAgICAgMTguOTM5MCstMC43OTI5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEx
OHggZmFzdGVyCiAgIGxvZ2ljYWwtbm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDYuMTI5OSstMC4yODYyICAgICA/ICAgICAgNi40MjI3Ky0wLjIyNDYgICAgICAgID8g
bWlnaHQgYmUgMS4wNDc4eCBzbG93ZXIKICAgbG90cy1vZi1maWVsZHMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxNC4zMjA3Ky0wLjQ1ODcgICAgID8gICAgIDE0LjQxNjYrLTAu
NjE4OCAgICAgICAgPwogICBtYWtlLWluZGV4ZWQtc3RvcmFnZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzLjYzMjArLTAuMzYzMyAgICAgPyAgICAgIDMuNjM0NistMC4zOTM0ICAgICAg
ICA/CiAgIG1ha2Utcm9wZS1jc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDUuMTgyNCstMC4xNTM5ICAgICA/ICAgICAgNS4yNzk4Ky0wLjQzNTQgICAgICAgID8gbWlnaHQg
YmUgMS4wMTg4eCBzbG93ZXIKICAgbWFyc2FnbGlhLWxhcmdlci1pbnRzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA1Mi42NTg4Ky0xLjA0MDkgICAgID8gICAgIDUzLjU1OTYrLTEuMTk5MyAg
ICAgICAgPyBtaWdodCBiZSAxLjAxNzF4IHNsb3dlcgogICBtYXJzYWdsaWEtb3NyLWVudHJ5ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4LjIzMjArLTAuNDE2NyAgICAgICAgICAgMjgu
MDk5MystMC43MzU1ICAgICAgICAKICAgbWV0aG9kLW9uLW51bWJlciAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyNi43OTg5Ky0wLjkwNTggICAgIF4gICAgIDI1LjMyODgrLTAuMjE5
NiAgICAgICAgXiBkZWZpbml0ZWx5IDEuMDU4MHggZmFzdGVyCiAgIG1pc2Mtc3RyaWN0LWVxICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTEuODgxMystMS44MTczICAgICA/ICAg
ICA1Mi42MjEzKy0wLjY0OTYgICAgICAgID8gbWlnaHQgYmUgMS4wMTQzeCBzbG93ZXIKICAgbmVn
YXRpdmUtemVyby1kaXZpZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC40MzA1Ky0w
LjEwMzggICAgICAgICAgICAwLjQwNjArLTAuMTAxMSAgICAgICAgICBtaWdodCBiZSAxLjA2MDN4
IGZhc3RlcgogICBuZWdhdGl2ZS16ZXJvLW1vZHVsbyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjQyMzUrLTAuMTAwNSAgICAgICAgICAgIDAuNDAyMCstMC4wNzc0ICAgICAgICAgIG1p
Z2h0IGJlIDEuMDUzNHggZmFzdGVyCiAgIG5lZ2F0aXZlLXplcm8tbmVnYXRlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMzYwNSstMC4wMTQ3ICAgICA/ICAgICAgMC40MDcwKy0wLjA5
ODcgICAgICAgID8gbWlnaHQgYmUgMS4xMjkweCBzbG93ZXIKICAgbmVzdGVkLWZ1bmN0aW9uLXBh
cnNpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICA0MS42NjQ0Ky0xLjcwODcgICAgICAgICAg
IDQxLjA1MjcrLTAuNDIzMiAgICAgICAgICBtaWdodCBiZSAxLjAxNDl4IGZhc3RlcgogICBuZXct
YXJyYXktYnVmZmVyLWRlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjQ5NTgrLTAu
MDY1NyAgICAgICAgICAgIDMuNDM2MistMC4xMDM0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE3NHgg
ZmFzdGVyCiAgIG5ldy1hcnJheS1idWZmZXItcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDkuMjg3NystMC40NDk1ICAgICAgICAgICAgOS4yNDQ4Ky0wLjE5MzggICAgICAgIAogICBu
ZXctYXJyYXktZGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0LjM5Njcr
LTAuMzIwNyAgICAgPyAgICAgMTQuNTcwMCstMC41NDc2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEy
MHggc2xvd2VyCiAgIG5ldy1hcnJheS1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDYuMjkzNystMC4yNjYxICAgICAgICAgICAgNi4yODcyKy0wLjMyMDAgICAgICAgIAog
ICBudW1iZXItdGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjk0
MjIrLTAuMDQ4OCAgICAgPyAgICAgIDMuOTgyNystMC4xNDMwICAgICAgICA/IG1pZ2h0IGJlIDEu
MDEwM3ggc2xvd2VyCiAgIG9iamVjdC1jbG9zdXJlLWNhbGwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDcuNTc4NystMC4xNzI4ICAgICA/ICAgICAgNy41OTgzKy0wLjEyNzIgICAgICAg
ID8KICAgb2JqZWN0LXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NC4yNzc4Ky0wLjA3OTIgICAgICAgICAgICA0LjIxNTIrLTAuMTQ3MiAgICAgICAgICBtaWdodCBi
ZSAxLjAxNDl4IGZhc3RlcgogICBwb2x5LWNoYWluLWFjY2Vzcy1kaWZmZXJlbnQtcHJvdG90eXBl
cy1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMy43NjMyKy0wLjA4MjggICAgICAgICAgICAzLjcwMzErLTAuMDMxOSAgICAgICAg
ICBtaWdodCBiZSAxLjAxNjJ4IGZhc3RlcgogICBwb2x5LWNoYWluLWFjY2Vzcy1kaWZmZXJlbnQt
cHJvdG90eXBlcyAgICAgICAgICAgICAzLjEwNTErLTAuMTE1NyAgICAgPyAgICAgIDMuMTExMyst
MC4xMzk2ICAgICAgICA/CiAgIHBvbHktY2hhaW4tYWNjZXNzLXNpbXBsZXIgICAgICAgICAgICAg
ICAgICAgICAgICAgIDMuNjY5OSstMC4wNzIxICAgICA/ICAgICAgMy43MDc3Ky0wLjA4NDEgICAg
ICAgID8gbWlnaHQgYmUgMS4wMTAzeCBzbG93ZXIKICAgcG9seS1jaGFpbi1hY2Nlc3MgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMi41NDM4Ky0wLjQ4MjIgICAgID8gICAgICAyLjY2
NDArLTAuNTM4OCAgICAgICAgPyBtaWdodCBiZSAxLjA0NzN4IHNsb3dlcgogICBwb2x5LXN0cmlj
dGVxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4Ljg5ODErLTEuMzUyOCAg
ICAgPyAgICAgNjkuMzExMCstMS4yMDU1ICAgICAgICA/CiAgIHBvbHltb3JwaGljLWFycmF5LWNh
bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMDQ3MistMC4xMzcxICAgICA/ICAgICAg
Mi4wNjkzKy0wLjI5NDggICAgICAgID8gbWlnaHQgYmUgMS4wMTA4eCBzbG93ZXIKICAgcG9seW1v
cnBoaWMtZ2V0LWJ5LWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4wMTY1Ky0wLjA0
NTIgICAgICAgICAgICAzLjk3MDgrLTAuMTExNCAgICAgICAgICBtaWdodCBiZSAxLjAxMTV4IGZh
c3RlcgogICBwb2x5bW9ycGhpYy1wdXQtYnktaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDYzLjE2NjArLTQ2Ljg3NDMgICAgICAgICAgNjEuMjc5MCstMjMuMDg0OCAgICAgICAgIG1pZ2h0
IGJlIDEuMDMwOHggZmFzdGVyCiAgIHBvbHltb3JwaGljLXN0cnVjdHVyZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjMuMTQzNCstMC40NjU2ICAgICAgICAgICAyMy4wMTg2Ky0wLjM2MDcg
ICAgICAgIAogICBwb2x5dmFyaWFudC1tb25vbW9ycGhpYy1nZXQtYnktaWQgICAgICAgICAgICAg
ICAgIDExLjE0MTgrLTAuMTg5MCAgICAgPyAgICAgMTEuMjEwMSstMC4xNTM2ICAgICAgICA/CiAg
IHByb3RvLWdldHRlci1hY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuNTEz
NystMC4yOTI4ICAgICA/ICAgICAxMi41NTg1Ky0wLjE5NDQgICAgICAgID8KICAgcHV0LWJ5LWlk
LXJlcGxhY2UtYW5kLXRyYW5zaXRpb24gICAgICAgICAgICAgICAgICAxMC45NjgwKy0wLjI5MzYg
ICAgICAgICAgIDEwLjgxMjcrLTAuMzI2MiAgICAgICAgICBtaWdodCBiZSAxLjAxNDR4IGZhc3Rl
cgogICBwdXQtYnktaWQtc2xpZ2h0bHktcG9seW1vcnBoaWMgICAgICAgICAgICAgICAgICAgICAz
LjM4NzQrLTAuMDQxMCAgICAgPyAgICAgIDMuNDA5MSstMC4xMjM4ICAgICAgICA/CiAgIHB1dC1i
eS1pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTguMjQwNistMC43
NDMyICAgICAgICAgICAxNy44OTc2Ky0wLjQ4NTEgICAgICAgICAgbWlnaHQgYmUgMS4wMTkyeCBm
YXN0ZXIKICAgcHV0LWJ5LXZhbC1sYXJnZS1pbmRleC1ibGFuay1pbmRleGluZy10eXBlICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuMTU2
NSstMC4yNzM0ICAgICA/ICAgICAgOS4yNjk1Ky0wLjIxNDAgICAgICAgID8gbWlnaHQgYmUgMS4w
MTIzeCBzbG93ZXIKICAgcHV0LWJ5LXZhbC1tYWNoaW5lLWludCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMy4wNjQ1Ky0wLjA0MzEgICAgICAgICAgICAzLjAxMzUrLTAuMDg0NSAgICAgICAg
ICBtaWdodCBiZSAxLjAxNjl4IGZhc3RlcgogICByYXJlLW9zci1leGl0LW9uLWxvY2FsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDE4LjA0NzMrLTAuMzg0MSAgICAgPyAgICAgMTguMjY4Nyst
MC42NTM2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyM3ggc2xvd2VyCiAgIHJlZ2lzdGVyLXByZXNz
dXJlLWZyb20tb3NyICAgICAgICAgICAgICAgICAgICAgICAgMjYuNjMwMystMC4xOTQyICAgICA/
ICAgICAyNi44MjcwKy0wLjY5MDMgICAgICAgID8KICAgc2V0dGVyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4zOTcwKy0wLjExMDYgICAgID8gICAgICA2LjQ0
NzArLTAuMDkzOSAgICAgICAgPwogICBzaW1wbGUtYWN0aXZhdGlvbi1kZW1vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDI5LjQ4NjIrLTAuMTk2NCAgICAgPyAgICAgMjkuNTYyNystMC41NDU0
ICAgICAgICA/CiAgIHNpbXBsZS1nZXR0ZXItYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTguNDU5MistMC40MDMyICAgICAgICAgICAxOC4zNDI4Ky0wLjQ2NTAgICAgICAgIAog
ICBzbG93LWFycmF5LXByb2ZpbGUtY29udmVyZ2VuY2UgICAgICAgICAgICAgICAgICAgICAzLjY0
NTMrLTAuMTA3NiAgICAgPyAgICAgIDMuNjczOCstMC4wOTI1ICAgICAgICA/CiAgIHNsb3ctY29u
dmVyZ2VuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMjU3MistMC4xNzQw
ICAgICA/ICAgICAgNC4zNjE4Ky0wLjI5NTAgICAgICAgID8gbWlnaHQgYmUgMS4wMjQ2eCBzbG93
ZXIKICAgc3BhcnNlLWNvbmRpdGlvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MS4zNjI3Ky0wLjAyNjggICAgICAgICAgICAxLjMxMzcrLTAuMDg5NyAgICAgICAgICBtaWdodCBi
ZSAxLjAzNzN4IGZhc3RlcgogICBzcGxpY2UtdG8tcmVtb3ZlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDIxLjk1NjcrLTAuMTQ0NiAgICAgPyAgICAgMjIuMzY2NistMC4zODM4ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDE4N3ggc2xvd2VyCiAgIHN0cmluZy1jaGFyLWNvZGUtYXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkuNzAwNCstMC4yMTgxICAgICA/ICAgICAxOS43
MjIzKy0wLjI2NTkgICAgICAgID8KICAgc3RyaW5nLWNvbmNhdC1vYmplY3QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMi42NTg0Ky0wLjQyMzAgICAgICAgICAgICAyLjU2MjMrLTAuMTg1
MiAgICAgICAgICBtaWdodCBiZSAxLjAzNzV4IGZhc3RlcgogICBzdHJpbmctY29uY2F0LXBhaXIt
b2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAyLjYxNTYrLTAuNDkyOSAgICAgPyAgICAg
IDIuNjQ0MSstMC4yNzg2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDEwOXggc2xvd2VyCiAgIHN0cmlu
Zy1jb25jYXQtcGFpci1zaW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgMTUuNzg2MSstMC4x
NTcxICAgICAgICAgICAxNS42MDU4Ky0wLjI3MDUgICAgICAgICAgbWlnaHQgYmUgMS4wMTE1eCBm
YXN0ZXIKICAgc3RyaW5nLWNvbmNhdC1zaW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxNS41OTQ0Ky0wLjI4MDIgICAgID8gICAgIDE1Ljg4MzArLTAuMjg0MSAgICAgICAgPyBtaWdo
dCBiZSAxLjAxODV4IHNsb3dlcgogICBzdHJpbmctY29ucy1yZXBlYXQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEwLjEwMTIrLTAuNDIwMCAgICAgICAgICAgMTAuMDk2MCstMC4zMTA0
ICAgICAgICAKICAgc3RyaW5nLWNvbnMtdG93ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOS4zMjIzKy0wLjQ2MTIgICAgID8gICAgICA5Ljc5MTkrLTAuMjI4OCAgICAgICAgPyBt
aWdodCBiZSAxLjA1MDR4IHNsb3dlcgogICBzdHJpbmctZXF1YWxpdHkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDM2LjkxNjgrLTAuNDI2OSAgICAgPyAgICAgMzcuODA1OCstMS4x
MzEwICAgICAgICA/IG1pZ2h0IGJlIDEuMDI0MXggc2xvd2VyCiAgIHN0cmluZy1nZXQtYnktdmFs
LWJpZy1jaGFyICAgICAgICAgICAgICAgICAgICAgICAgMTEuNjExOSstMC4yMzgzICAgICA/ICAg
ICAxMi4wNDAzKy0wLjQ2NTQgICAgICAgID8gbWlnaHQgYmUgMS4wMzY5eCBzbG93ZXIKICAgc3Ry
aW5nLWdldC1ieS12YWwtb3V0LW9mLWJvdW5kcy1pbnNhbmUgICAgICAgICAgICAgNS4zNzMwKy0w
LjE2NDcgICAgICAgICAgICA1LjMwNzMrLTAuMTI1OCAgICAgICAgICBtaWdodCBiZSAxLjAxMjR4
IGZhc3RlcgogICBzdHJpbmctZ2V0LWJ5LXZhbC1vdXQtb2YtYm91bmRzICAgICAgICAgICAgICAg
ICAgICA2LjAxMDArLTAuMDg1MSAgICAgPyAgICAgIDYuMDc4NSstMC4xNzU1ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDExNHggc2xvd2VyCiAgIHN0cmluZy1nZXQtYnktdmFsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQuNjc1NSstMC4wODMwICAgICA/ICAgICAgNC42ODUzKy0wLjA0
ODMgICAgICAgID8KICAgc3RyaW5nLWhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi40Njg3Ky0wLjEwMTEgICAgID8gICAgICAyLjUxMTArLTAuMTM3OCAgICAgICAg
PyBtaWdodCBiZSAxLjAxNzJ4IHNsb3dlcgogICBzdHJpbmctbG9uZy1pZGVudC1lcXVhbGl0eSAg
ICAgICAgICAgICAgICAgICAgICAgIDMzLjIyMjgrLTEuNTUxMyAgICAgICAgICAgMzMuMTA0OSst
MS4xMTUzICAgICAgICAKICAgc3RyaW5nLXJlcGVhdC1hcml0aCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzOS4zOTUwKy0wLjg5MjIgICAgID8gICAgIDM5Ljk0NjArLTIuNDcxMyAgICAg
ICAgPyBtaWdodCBiZSAxLjAxNDB4IHNsb3dlcgogICBzdHJpbmctc3ViICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDc4LjMwNDMrLTEuMjE1MyAgICAgPyAgICAgNzkuNTcx
MistMC42ODI3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE2Mnggc2xvd2VyCiAgIHN0cmluZy10ZXN0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuOTY4OCstMC4wNTM0ICAg
ICA/ICAgICAgMy45OTg1Ky0wLjEzNzAgICAgICAgID8KICAgc3RyaW5nLXZhci1lcXVhbGl0eSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NS41MDU0Ky0wLjcyNTcgICAgICAgICAgIDc0
LjY2MDMrLTEuNjI3MCAgICAgICAgICBtaWdodCBiZSAxLjAxMTN4IGZhc3RlcgogICBzdHJ1Y3R1
cmUtaG9pc3Qtb3Zlci10cmFuc2l0aW9ucyAgICAgICAgICAgICAgICAgICAzLjE2MzMrLTAuMTA1
MiAgICAgISAgICAgIDMuNDUxMCstMC4xMDkzICAgICAgICAhIGRlZmluaXRlbHkgMS4wOTEweCBz
bG93ZXIKICAgc3Vic3RyaW5nLWNvbmNhdC13ZWlyZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1NC41NjAzKy0xLjE1MDQgICAgICAgICAgIDUzLjI5NTArLTAuODQ4MSAgICAgICAgICBtaWdo
dCBiZSAxLjAyMzd4IGZhc3RlcgogICBzdWJzdHJpbmctY29uY2F0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDU2LjkxNDcrLTAuNjgxNSAgICAgICAgICAgNTYuODE3MCstMS4zMjI0
ICAgICAgICAKICAgc3Vic3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA2Mi40MTM0Ky0xLjMxOTUgICAgICAgICAgIDYyLjE1MDMrLTAuODM0MyAgICAgICAgCiAg
IHN3aXRjaC1jaGFyLWNvbnN0YW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMTA5
NSstMC4wOTI4ICAgICA/ICAgICAgMy4xMzk4Ky0wLjEwODggICAgICAgID8KICAgc3dpdGNoLWNo
YXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy42OTU2Ky0wLjEwNzAg
ICAgID8gICAgICA3LjcwNTcrLTAuMDQ4OSAgICAgICAgPwogICBzd2l0Y2gtY29uc3RhbnQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjgzOTgrLTAuMTc2MiAgICAgPyAgICAg
IDkuODYwNSstMC42ODI4ICAgICAgICA/CiAgIHN3aXRjaC1zdHJpbmctYmFzaWMtYmlnLXZhciAg
ICAgICAgICAgICAgICAgICAgICAgMjEuNjU3NSstMS4yNzM2ICAgICA/ICAgICAyMi4xNjY0Ky0w
LjM3NzYgICAgICAgID8gbWlnaHQgYmUgMS4wMjM1eCBzbG93ZXIKICAgc3dpdGNoLXN0cmluZy1i
YXNpYy1iaWcgICAgICAgICAgICAgICAgICAgICAgICAgICAyNi4wODkyKy01Ljk3ODMgICAgICAg
ICAgIDI1LjE5NDArLTUuMzY0OSAgICAgICAgICBtaWdodCBiZSAxLjAzNTV4IGZhc3RlcgogICBz
d2l0Y2gtc3RyaW5nLWJhc2ljLXZhciAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ljk1Mzkr
LTAuNDEwNSAgICAgPyAgICAgMjYuODEyMCstMS4wNDA2ICAgICAgICA/IG1pZ2h0IGJlIDEuMDMz
MXggc2xvd2VyCiAgIHN3aXRjaC1zdHJpbmctYmFzaWMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjcuNDYwNistMi42ODc3ICAgICA/ICAgICAyNy42NDcwKy0yLjU1MDYgICAgICAgID8K
ICAgc3dpdGNoLXN0cmluZy1iaWctbGVuZ3RoLXRvd2VyLXZhciAgICAgICAgICAgICAgICAyNS4x
NDk2Ky0wLjIzNjMgICAgID8gICAgIDI1LjE4ODUrLTAuNjQxMSAgICAgICAgPwogICBzd2l0Y2gt
c3RyaW5nLWxlbmd0aC10b3dlci12YXIgICAgICAgICAgICAgICAgICAgIDE5Ljc2MzErLTAuNjMw
NiAgICAgPyAgICAgMTkuOTIxMCstMC42MzkwICAgICAgICA/CiAgIHN3aXRjaC1zdHJpbmctbGVu
Z3RoLXRvd2VyICAgICAgICAgICAgICAgICAgICAgICAgMTQuNjAyMSstMC4xMDYwICAgICA/ICAg
ICAxNC43NzEyKy0wLjMxNzkgICAgICAgID8gbWlnaHQgYmUgMS4wMTE2eCBzbG93ZXIKICAgc3dp
dGNoLXN0cmluZy1zaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC42ODE2Ky0w
LjQ1MjIgICAgID8gICAgIDE0Ljc5MDkrLTAuMzI4MSAgICAgICAgPwogICBzd2l0Y2ggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLjQ1NzErLTAuMjM4MyAgICAg
PyAgICAgMTMuNDk3NCstMC4zNzI5ICAgICAgICA/CiAgIHRlYXItb2ZmLWFyZ3VtZW50cy1zaW1w
bGUgICAgICAgICAgICAgICAgICAgICAgICAgIDIuMTQ0OCstMC4wNjUyICAgICAgICAgICAgMi4w
OTMzKy0wLjAwMzIgICAgICAgICAgbWlnaHQgYmUgMS4wMjQ2eCBmYXN0ZXIKICAgdGVhci1vZmYt
YXJndW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4zMTE1Ky0wLjE0MzIg
ICAgID8gICAgICAzLjQ1NzMrLTAuMzYzMyAgICAgICAgPyBtaWdodCBiZSAxLjA0NDB4IHNsb3dl
cgogICB0ZW1wb3JhbC1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3
LjExNjArLTAuNzc5MCAgICAgICAgICAgMTcuMDI2MistMC43MzY1ICAgICAgICAKICAgdG8taW50
MzItYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMC41ODkwKy0wLjI1
NTggICAgID8gICAgIDIwLjcyMTUrLTAuNTAxNCAgICAgICAgPwogICB1bmRlZmluZWQtdGVzdCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjExOTYrLTAuMDIzMSAgICAgPyAg
ICAgIDQuMTM0OSstMC4xNDM2ICAgICAgICA/CiAgIHVucHJvZmlsZWQtbGljbSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMjcuNDAwMSstMC42OTIzICAgICA/ICAgICAyNy40Njkz
Ky0wLjQ5MTIgICAgICAgID8KICAgd2VpcmQtaW5saW5pbmctY29uc3QtcHJvcCAgICAgICAgICAg
ICAgICAgICAgICAgICAgMi4zMTQ1Ky0wLjE4NDggICAgID8gICAgICAyLjMxOTkrLTAuMTM4MiAg
ICAgICAgPwoKICAgPGFyaXRobWV0aWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxOS4zNTgyKy0wLjIxMzEgICAgID8gICAgIDE5LjM2MDcrLTAuMTQ2MyAgICAgICAgPyBt
aWdodCBiZSAxLjAwMDF4IHNsb3dlcgogICA8Z2VvbWV0cmljPiAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEwLjAzNDcrLTAuMDUxNyAgICAgPyAgICAgMTAuMDQwNCstMC4w
NDUwICAgICAgICA/IG1pZ2h0IGJlIDEuMDAwNnggc2xvd2VyCiAgIDxoYXJtb25pYz4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuOTkyMCstMC4xMDQxICAgICA/ICAg
ICAgNS4wMTM5Ky0wLjA0MjcgICAgICAgID8gbWlnaHQgYmUgMS4wMDQ0eCBzbG93ZXIKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9U
ICAgICAgICAgICAgICAgICAgICAgIEZvckluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCkFzbUJlbmNoOgogICBiaWdmaWIuY3BwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNjczLjM4NjgrLTYuNTcxNyAgICAgPyAgICA2ODAuMDM0MistOC4xNTM0
ICAgICAgICA/CiAgIGNyYXkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA2ODAuODkxNystMTEuNzE5MCAgICAgICAgIDY3NS41MTgwKy01LjQzODQgICAgICAgIAog
ICBkcnkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjk5LjU1
MzQrLTgxLjU4MjcgICAgICAgICA2OTcuMDEzNCstNzUuNjA4MSAgICAgICAKICAgRmxvYXRNTS5j
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk1MC45ODE0Ky0xLjgwMzcg
ICAgID8gICAgOTUyLjgxMTIrLTMuNTE5MyAgICAgICAgPwogICBnY2MtbG9vcHMuY3BwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MjgyLjg3ODYrLTMzLjU0NzkgICAgICAgIDYy
NjQuNDkxMystMjYuMTEyMSAgICAgICAKICAgbi1ib2R5LmMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTY4My44ODE4Ky00LjYzOTUgICAgID8gICAxNjg0LjkwMzMrLTEu
MzkwMyAgICAgICAgPwogICBRdWlja3NvcnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNTY5LjY2NTMrLTE1LjkwMTAgICAgPyAgICA1NjkuODg0MistMi45MDUzICAgICAg
ICA/CiAgIHN0ZXBhbm92X2NvbnRhaW5lci5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4
NjEuNDI4OCstMTkuODkwNiAgICAgICAgNDg1NS44Nzg0Ky0yOC4wMTkzICAgICAgIAogICBUb3dl
cnMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA3LjE0MjArLTEu
OTI4NiAgICAgPyAgICA0MDcuOTU0MSstMC40MjY3ICAgICAgICA/CgogICA8YXJpdGhtZXRpYz4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODY3Ljc1NjcrLTEwLjYzOTEgICAg
ICAgIDE4NjUuMzg3NistOC42MzYwICAgICAgICAgIG1pZ2h0IGJlIDEuMDAxM3ggZmFzdGVyCiAg
IDxnZW9tZXRyaWM+ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNTQuMDY3
MistMTguMzE1MCAgICAgICAgMTE1My45OTQyKy0xNS40NTcxICAgICAgICAgbWlnaHQgYmUgMS4w
MDAxeCBmYXN0ZXIKICAgPGhhcm1vbmljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDg0OC4yMTU5Ky0xNy40MzUwICAgID8gICAgODQ4LjY4MTMrLTE0Ljc1OTkgICAgICAg
PyBtaWdodCBiZSAxLjAwMDV4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb1QgICAgICAgICAgICAgICAgICAgICAgRm9y
SW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQWxsIGJlbmNobWFya3M6
CiAgIDxhcml0aG1ldGljPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzYu
NzE2NSstMC4zNzk4ICAgICAgICAgIDEzNi4zMDgyKy0wLjQzNDAgICAgICAgICAgbWlnaHQgYmUg
MS4wMDMweCBmYXN0ZXIKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxNi4zMTUwKy0wLjAzOTMgICAgICAgICAgIDE2LjMwODQrLTAuMDY2OCAgICAg
ICAgICBtaWdodCBiZSAxLjAwMDR4IGZhc3RlcgogICA8aGFybW9uaWM+ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA0LjMwNzUrLTAuMDUyMyAgICAgPyAgICAgIDQuMzI5
NistMC4wMzc4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDA1MXggc2xvd2VyCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvVCAgICAgICAg
ICAgICAgICAgICAgICBGb3JJbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IApHZW9tZWFuIG9mIHByZWZlcnJlZCBtZWFuczoKICAgPHNjYWxlZC1yZXN1bHQ+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA2Ny45MDA0Ky0wLjE2MTYgICAgICAgICAgIDY3Ljgw
MzgrLTAuMzE3MyAgICAgICAgICBtaWdodCBiZSAxLjAwMTR4IGZhc3RlcgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235162</attachid>
            <date>2014-07-18 18:26:29 -0700</date>
            <delta_ts>2014-07-23 18:20:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140718182612.patch</filename>
            <type>text/plain</type>
            <size>221668</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1OSBA
QAorMjAxNC0wNy0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0dlbmVyaWNQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzSW5kZXhlZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwpOgor
ICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6fkZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNWYWxpZCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6
OkZvckluQ29udGV4dDo6bG9jYWwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvcklu
Q29udGV4dDo6dHlwZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6aW5k
ZXgpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OnR5cGUpOgorICAgICAgICAoSlNDOjpJbmRleGVk
Rm9ySW5Db250ZXh0OjppbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpw
dXNoT3B0aW1pc2VkRm9ySW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cG9wT3B0aW1pc2VkRm9ySW4pOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0
ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwpOgorICAg
ICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRMb29wSGVhZGVyKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Ob2RlOjplbWl0TXVsdGlMb29wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJTY29wZS5oOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
RG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9k
ZSk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpT
Qzo6SklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SW50MzJMb2FkKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdExvYWRG
b3JBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2dlbmVyaWNfcHJv
cGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9wbmFtZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25leHRfZW51bWVyYXRvcl9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF90b19pbmRleF9zdHJpbmcpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUxvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRC
eVZhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFs
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0RG91YmxlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUxv
YWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREb3VibGVHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBwYXJzZXIvTm9k
ZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5jcHA6CisgICAgICAgIChKU0M6OkFy
Z3VtZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9DbGFzc0lu
Zm8uaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChK
U0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
OgorICAgICAgICAqIHJ1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6c2hv
dWxkRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNob3VsZEluY2x1
ZGVKU09iamVjdFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjptb2RlVGhhdFNraXBzSlNP
YmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNBY3RpdmF0aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAg
ICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldEVudW1l
cmFibGVMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5
TmFtZXMpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmdldE93bk5vbkluZGV4UHJvcGVydHlO
YW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OmdldENsYXNzUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpoYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJv
cGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpwcm9wZXJ0eU5hbWVBdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppZGVudGlmaWVyU2V0KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm90b3R5cGVDaGFpbik6CisgICAgICAgIChKU0M6OkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSUQpOgorICAgICAg
ICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5KToK
KyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNMZW5ndGhPZmZzZXQpOgorICAgICAgICAoSlNDOjpK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQp
OgorICAgICAgICAoSlNDOjpzdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Z2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNQcm94eS5jcHA6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmdldEVudW1lcmFibGVMZW5n
dGgpOgorICAgICAgICAoSlNDOjpKU1Byb3h5OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToK
KyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNQcm94eS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5j
cHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg6CisgICAgICAgIChKU0M6OlJl
ZkNvdW50ZWRJZGVudGlmaWVyU2V0Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6OlJlZkNvdW50
ZWRJZGVudGlmaWVyU2V0OjpzaXplKToKKyAgICAgICAgKEpTQzo6UmVmQ291bnRlZElkZW50aWZp
ZXJTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjpQcm9wZXJ0eU5h
bWVBcnJheSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5TmFtZUFycmF5OjphZGQpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YWRkS25vd25VbmlxdWUpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eU5hbWVBcnJheTo6aWRlbnRpZmllclNldCk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5TmFtZUFycmF5OjpjYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5TmFtZUFycmF5OjpzZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCk6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4
cE9iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6
Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpT
dHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJv
bVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0Q2FjaGVkU3RydWN0dXJl
UHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FjaGVk
U3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6c2V0Q2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjYW5DYWNoZVN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkNhY2hlR2VuZXJpY1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRp
ZXNRdWlja2x5KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJl
RGF0YTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpj
YWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlUmFyZURhdGE6OnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkR2VuZXJpY1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVSYXJlRGF0YTo6c2V0Q2Fj
aGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTQtMDctMTcgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBERkcgRmx1c2go
U2V0TG9jYWwpIHN0b3JlIGVsaW1pbmF0aW9uIGlzIG92ZXJ6ZWFsb3VzIGZvciBjYXB0dXJlZCB2
YXJpYWJsZXMgaW4gdGhlIHByZXNlbmNlIG9mIG5vZGVzIHRoYXQgaGF2ZSBubyBlZmZlY3RzIGJ1
dCBtYXkgdGhyb3cgKG1lcmdlIHRydW5rIHIxNzExOTApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNp
b24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxNiw3ICs1MTYsNyBAQCB2b2lkIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9y
IGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgICAgICAg
ICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykpKQorICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEo
ZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtKSB8fCBzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKSkKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFy
ZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljRnVu
Y3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBTdHJp
bmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKICAgICAgICAgICAgICAgICBTdGF0aWNGdW5j
dGlvbkVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAo
IShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0pIHx8ICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgICAgIGlmICgh
KGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgc2hv
dWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBuYW1lKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
NzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODEzLDYgKzgxMyw4IEBACiAJCTFD
QUE5QTIzMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDQUE5QTIxMThG
NEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJ
MjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3MTUyQkFBQTcwMDkx
RUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVy
LmggKi87IH07CisJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHAgKi87IH07CisJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAq
LzsgfTsKIAkJMkEyODI1RDAxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMjgyNUNG
MTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi87IH07CiAJCTJBNDhE
MTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExQjU3NDE3NkEyMjREMDAwRTJB
MjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9OwogCQkyQTRCQjdGMzE4QTQxMTc5MDA4
QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIxOEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFu
YWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTgzNiw2ICs4MzgsNyBAQAogCQkyQUM5MjJC
QzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUM5MjJCQTE4QTE2MTgyMDAzQ0Uw
RkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggKi87IH07CiAJCTJBQ0NGM0RFMTg1RkUyNkIw
MDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0YzREMxODVGRTI2QjAwODNFMkFE
IC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi87IH07CiAJCTJBQ0NGM0RGMTg1
RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQ0NGM0REMTg1RkUyNkIwMDgz
RTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLzsgfTsKKwkJMkFEMkVERkIx
OTc5OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFEMkVERkExOTc5OUUzODAwNEQ2NDc4IC8qIEVu
dW1lcmF0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTJBRDg5MzJCMTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBRDg5MzI5
MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLzsgfTsKIAkJMkFERkEy
NjMxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQURGQTI2MjE4RUYzNTQwMDA0RjlGQ0MgLyogR0NM
b2dnaW5nLmNwcCAqLzsgfTsKIAkJMkFGNzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVy
ZUlEVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkFGNzM4MkExOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwICovOyB9
OwpAQCAtMjk2MSw2ICsyOTY0LDggQEAKIAkJMUNBQTlBMjExOEY0QTIyMDAwMEEzNjlEIC8qIEpT
R2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8q
IEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3Ry
aW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBMDVBQkQzMTk2MURG
MjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVsYXllZFJlbGVhc2VTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIwODUgLyogR0NT
ZWdtZW50ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21l
bnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMzQzRjc3MThBMTc0
OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjk4NSw2ICsyOTkwLDcgQEAKIAkJMkFDOTIyQkExOEExNjE4MjAw
M0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExEV0FSRkRlYnVnTGluZUluZm8uaDsgcGF0aCA9IGZ0bC9GVExEV0FSRkRl
YnVnTGluZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFDQ0YzREMxODVG
RTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9y
ZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVy
RWxpc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBRDJFREZBMTk3
OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRW51bWVyYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xv
Z2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NMb2dnaW5n
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFGNzM4MkExOEJCQkY5MjAwOEE1
QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3RydWN0dXJlSURUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00OTc1LDYgKzQ5ODEsOSBAQAogCQkJCTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBX
ZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFy
cmllci5oICovLAogCQkJCUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJ
bmxpbmVzLmggKi8sCisJCQkJMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAgKi8sCisJCQkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovLAorCQkJCTJBRDJFREZBMTk3OTlFMzgwMDRENjQ3
OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcnVudGltZTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01OTM5LDYgKzU5NDgsNyBAQAogCQkJCTBGNkIx
Q0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFSTTY0QXNzZW1ibGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyQUQyRURGQjE5Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25N
b2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkRBRDM4RjE5NUExNjRFMDBGMzA0NjQgLyogVHlw
ZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkZCNzIxNTE5NTM3NjBDMDBCQjYxMkUg
LyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJGQjcxM0ExOTUzNzRCODAwQkI2MTJF
IC8qIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTk2LDYg
KzY2MDYsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5
QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJFMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYw
MDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICov
LApAQCAtNzc0Myw2ICs3NzU0LDcgQEAKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyog
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0
MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyogREZHU1NBQ29udmVyc2lvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMjBDQjkxODU1NkEz
NTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1
dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNp
b24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDE2IEBACiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9kaWRfY2FsbCIsICJsZW5ndGgiIDogMiB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5kIiwgImxlbmd0aCIgOiAyIH0sCi0gICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJs
ZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVzX3dp
dGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwgImxlbmd0aCIgOiAzIH0sCisgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSIsICJsZW5ndGgiIDogNSB9LAor
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSIsICJsZW5n
dGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX2dlbmVyaWNfcHJvcGVy
dHkiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9kaXJl
Y3RfcG5hbWUiLCAibGVuZ3RoIiA6IDcgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dl
dF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvciIsICJsZW5ndGgiIDogNCB9LAorICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvciIsICJs
ZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbmV4dF9lbnVtZXJhdG9y
X3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b19p
bmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfQogICAgICAgICBdCiAgICAgfSwKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
aAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsOCBAQCB2b2lkIGNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAg
Y2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9u
b3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKICAgICBjYXNlIG9wX3B1c2hfbmFt
ZV9zY29wZToKQEAgLTE1MCw2ICsxNTIsMTAgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
T2Zmc2V0KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAg
IGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJl
X3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToK
KyAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZToKICAgICBjYXNlIG9wX2dldF9ieV92
YWw6CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgogICAgIGNhc2Ugb3BfaW46CkBA
IC0xNzksNiArMTg1LDggQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3I6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2Nh
bGxfdmFyYXJnczogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9w
Y29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwpAQCAtMTg2LDYgKzE5NCw3IEBAIHZv
aWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAgICAg
Y2FzZSBvcF9uZXh0X3BuYW1lOiB7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0
b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7CkBAIC0yOTgsNiArMzA3LDE1IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9m
ZnNldChDb2RlQmwKICN1bmRlZiBMTElOVF9IRUxQRVJfT1BDT0RFUwogICAgICAgICByZXR1cm47
CiAgICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJz
dCBhcmd1bWVudC4KKyAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKKyAgICBjYXNlIG9wX2dl
dF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJs
ZV9sZW5ndGg6CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICBjYXNlIG9w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0
eToKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0
dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5h
bWU6CiAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToK
ICAgICBjYXNlIG9wX3N0cmNhdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsx
Mzk5LDkxIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBpdCAr
PSBPUENPREVfTEVOR1RIKG9wX25leHRfcG5hbWUpIC0gMTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7CisgICAg
ICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2Ug
PSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgiKTsKKyAgICAgICAg
ICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aCkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAg
aW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaXRbNF0udS5hcnJh
eVByb2ZpbGU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlcywgJXAiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgYXJy
YXlQcm9maWxlKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50IGRzdCA9
IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5k
OworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGludCBlbnVtZXJhdG9yID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCBy
ZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShwcm9wZXJ0eU5hbWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRh
dGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsx
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIGludCBwcm9wZXJ0eU5hbWUgPSBpdFszXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfZ2Vu
ZXJpY19wcm9wZXJ0eSIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcyIsIHJl
Z2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0
ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9M
RU5HVEgob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogeworICAgICAgICAg
ICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRb
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5TmFtZSA9IGl0WzNdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBpbmRleCA9IGl0WzRdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBlbnVtZXJhdG9yID0gaXRbNV0udS5vcGVyYW5kOworICAgICAgICAgICAgVmFsdWVQ
cm9maWxlKiBwcm9maWxlID0gaXRbNl0udS5wcm9maWxlOworICAgICAgICAgICAgcHJpbnRMb2Nh
dGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2RpcmVjdF9wbmFtZSIp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMsICVzLCAlcCIsIHJlZ2lz
dGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJO
YW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKGVudW1lcmF0b3IpLmRhdGEoKSwgcHJvZmlsZSk7CisgICAgICAgICAgICBpdCAr
PSBPUENPREVfTEVOR1RIKG9wX2dldF9kaXJlY3RfcG5hbWUpIC0gMTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5
X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dldF9zdHJ1Y3R1cmVf
cHJvcGVydHlfZW51bWVyYXRvciIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwg
cmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9l
bnVtZXJhdG9yKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGlu
dCBkc3QgPSBpdFsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGludCBsZW5ndGggPSBpdFszXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBpbnQgc3RydWN0dXJlRW51bWVyYXRvciA9IGl0WzRdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2dl
dF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYo
IiVzLCAlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
YmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUobGVuZ3RoKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShz
dHJ1Y3R1cmVFbnVtZXJhdG9yKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xF
TkdUSChvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKSAtIDE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFt
ZTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGludCBlbnVtZXJhdG9yID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGluZGV4
ID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAib3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lIik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpLCByZWdpc3Rlck5hbWUoaW5kZXgpLmRhdGEo
KSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX25leHRfZW51bWVyYXRvcl9w
bmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF90b19pbmRleF9zdHJpbmc6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsxXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJvcF90b19pbmRl
eF9zdHJpbmciKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFt
ZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGluZGV4KS5kYXRhKCkpOworICAgICAgICAgICAg
aXQgKz0gT1BDT0RFX0xFTkdUSChvcF90b19pbmRleF9zdHJpbmcpIC0gMTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOiB7CiAg
ICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50
TG9jYXRpb25PcEFuZFJlZ2lzdGVyT3BlcmFuZChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInB1
c2hfd2l0aF9zY29wZSIsIHIwKTsKQEAgLTE3OTksNiArMTg4NCwxMyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IGpdLnUub3BlcmFuZCA9IHBjW2pdLnUub3BlcmFuZDsKICAgICAgICAgfQogICAgICAgICBzd2l0
Y2ggKHBjWzBdLnUub3Bjb2RlKSB7CisgICAgICAgIGNhc2Ugb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHk6IHsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW29wTGVuZ3RoIC0g
MV0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUlu
ZGV4XSA9IEFycmF5UHJvZmlsZShpKTsKKworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBv
cExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoK
ICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICAgICAgY2FzZSBvcF9nZXRf
YnlfdmFsOgpAQCAtMTgwOSw2ICsxOTAxLDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDJd
ID0gJm1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJbmRleF07CiAgICAgICAgICAgICBGQUxM
VEhST1VHSDsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKICAg
ICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQzNiwxOCArMTQzNiwzMCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEFyCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpID4gMDsgaS0tKSB7
Ci0gICAgICAgIEZvckluQ29udGV4dCYgY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaSAt
IDFdOwotICAgICAgICBpZiAoY29udGV4dC5wcm9wZXJ0eVJlZ2lzdGVyID09IHByb3BlcnR5KSB7
Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2dldF9ieV9wbmFtZSk7Ci0gICAgICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoY29udGV4dC5leHBlY3RlZFN1YnNjcmlwdFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0Lml0ZXJSZWdpc3Rlci0+aW5kZXgo
KSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29udGV4dC5pbmRleFJlZ2lz
dGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIHJldHVybiBkc3Q7CisgICAgICAgIEZvckluQ29u
dGV4dCogY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaSAtIDFdLmdldCgpOworICAgICAg
ICBpZiAoY29udGV4dC0+bG9jYWwoKSAhPSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGlmICghY29udGV4dC0+aXNWYWxpZCgpKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnR5cGUoKSA9PSBGb3JJbkNvbnRleHQ6OkluZGV4ZWRG
b3JJbkNvbnRleHRUeXBlKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IHN0YXRpY19jYXN0PElu
ZGV4ZWRGb3JJbkNvbnRleHQqPihjb250ZXh0KS0+aW5kZXgoKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNvbnRleHQtPnR5cGUoKSA9PSBGb3JJbkNv
bnRleHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dFR5cGUpOworICAgICAgICBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQgPSBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQqPihjb250ZXh0KTsKKyAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZGlyZWN0X3BuYW1lKTsKKyAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChiYXNlLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5
LT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUNvbnRl
eHQtPmluZGV4KCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Ry
dWN0dXJlQ29udGV4dC0+ZW51bWVyYXRvcigpLT5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KKwogICAg
IFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwog
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bf
Z2V0X2J5X3ZhbCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7CkBAIC0y
MTYxLDcgKzIxNzMsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNj
CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0PiBzYXZlZFNjb3Bl
Q29udGV4dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gc2F2ZWRTd2l0Y2hDb250
ZXh0U3RhY2s7Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IHNhdmVkRm9ySW5Db250ZXh0
U3RhY2s7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gc2F2
ZWRGb3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IHBvcHBlZFRy
eUNvbnRleHRzOwogICAgICAgICBMYWJlbFNjb3BlU3RvcmUgc2F2ZWRMYWJlbFNjb3BlczsKICAg
ICAgICAgd2hpbGUgKHRvcFNjb3BlID4gYm90dG9tU2NvcGUgJiYgdG9wU2NvcGUtPmlzRmluYWxs
eUJsb2NrKSB7CkBAIC0yMTg4LDcgKzIyMDAsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0Q29tcGxleFBvcFNjCiAgICAgICAgICAgICAgICAgbV9zd2l0Y2hDb250ZXh0U3RhY2suc2hy
aW5rKGZpbmFsbHlDb250ZXh0LnN3aXRjaENvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGZsaXBGb3JJbnMpIHsKLSAgICAgICAgICAgICAgICBzYXZlZEZv
ckluQ29udGV4dFN0YWNrID0gbV9mb3JJbkNvbnRleHRTdGFjazsKKyAgICAgICAgICAgICAgICBz
YXZlZEZvckluQ29udGV4dFN0YWNrLnN3YXAobV9mb3JJbkNvbnRleHRTdGFjayk7CiAgICAgICAg
ICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuZm9ySW5D
b250ZXh0U3RhY2tTaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChmbGlwVHJp
ZXMpIHsKQEAgLTIyMjgsNyArMjI0MCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b21wbGV4UG9wU2MKICAgICAgICAgICAgIGlmIChmbGlwU3dpdGNoZXMpCiAgICAgICAgICAgICAg
ICAgbV9zd2l0Y2hDb250ZXh0U3RhY2sgPSBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKICAgICAg
ICAgICAgIGlmIChmbGlwRm9ySW5zKQotICAgICAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2sgPSBzYXZlZEZvckluQ29udGV4dFN0YWNrOworICAgICAgICAgICAgICAgIG1fZm9ySW5Db250
ZXh0U3RhY2suc3dhcChzYXZlZEZvckluQ29udGV4dFN0YWNrKTsKICAgICAgICAgICAgIGlmIChm
bGlwVHJpZXMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV90cnlDb250ZXh0U3RhY2suc2l6
ZSgpID09IGZpbmFsbHlDb250ZXh0LnRyeUNvbnRleHRTdGFja1NpemUpOwogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHBvcHBlZFRyeUNvbnRleHRzLnNpemUoKTsgaS0tOykgewpA
QCAtMjU2MSw0ICsyNTczLDEyOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVy
YXRpb24oCiAgICAgZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKIH0KIAorUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIHJldHVybiBk
c3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzR2VuZXJpY1By
b3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJv
cGVydHlOYW1lKQoreworICAgIGVtaXRPcGNvZGUob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJv
cGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBVbmxp
bmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKKyAgICBl
bWl0T3Bjb2RlKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5k
ZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5TmFtZS0+aW5kZXgoKSk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFycmF5UHJvZmlsZSk7CisgICAgcmV0dXJuIGRz
dDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHBy
b3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3sKKyAgICBlbWl0T3Bjb2RlKG9w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3Qt
PmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZW51bWVyYXRvci0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsK
K30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBsZW5ndGgpCit7CisgICAgZW1pdE9wY29kZShvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5
X2VudW1lcmF0b3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQobGVuZ3RoLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0
b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgs
IFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpCit7CisgICAgZW1pdE9wY29kZShvcF9n
ZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgo
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGxlbmd0aC0+aW5kZXgoKSk7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIHJl
dHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV4dEVu
dW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yLCBSZWdpc3RlcklEKiBpbmRleCkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX25leHRfZW51bWVy
YXRvcl9wbmFtZSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGVudW1lcmF0b3ItPmluZGV4KCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpCit7CisgICAgZW1pdE9wY29kZShvcF90b19pbmRl
eF9zdHJpbmcpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChpbmRleC0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsK
K30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCit7CisgICAg
aWYgKCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRT
dGFjay5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxJbmRleGVkRm9ySW5Db250ZXh0Pihsb2NhbFJl
Z2lzdGVyLCBpbmRleFJlZ2lzdGVyKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCit7CisgICAgaWYg
KCFsb2NhbFJlZ2lzdGVyKQorICAgICAgICByZXR1cm47CisgICAgbV9mb3JJbkNvbnRleHRTdGFj
ay5yZW1vdmVMYXN0KCk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hTdHJ1Y3R1
cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4
UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1l
cmF0b3JSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFN0cnVj
dHVyZUZvckluQ29udGV4dD4obG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3RlciwgcHJvcGVydHlS
ZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyKSk7Cit9CisKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OnBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKK3sK
KyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2ZvckluQ29u
dGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW52
YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCit7
CisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRleHRzIGlzIGtpbmQgb2Yg
d2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmIAorICAgIC8vIGVpdGhlciBvZiB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKKyAgICAvLyAKKyAgICAvLyAoMSkgVGhlIGxv
b3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0
aGUgbG9vcC4KKyAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIGNhcHR1
cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KKyAgICAvLworICAgIC8v
IFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJlbHkgdGhhdCBpdCdz
IG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YgCisgICAgLy8gImFuYWx5c2lzIiB0byBtYWtlIGl0
ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMsIHdlIHdvdWxkIGVp
dGhlciBoYXZlIAorICAgIC8vIHRvIHBlcmZvcm0gc29tZSBmbG93LXNlbnNpdGl2ZSBhbmFseXNp
cyB0byBzZWUgaWYvd2hlbiB0aGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgd2FzIAorICAgIC8v
IHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBjaGVja3MgdG8g
c2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbiAKKyAgICAvLyByZWFzc2lnbmVkIGZyb20gaXRz
IG9yaWdpbmFsIHZhbHVlLgorICAgIGZvciAoc2l6ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNr
LnNpemUoKTsgaSA+IDA7IGktLSkgeworICAgICAgICBGb3JJbkNvbnRleHQqIGNvbnRleHQgPSBt
X2ZvckluQ29udGV4dFN0YWNrW2kgLSAxXS5nZXQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxv
Y2FsKCkgIT0gbG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
b250ZXh0LT5pbnZhbGlkYXRlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDExICs5Nyw3NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRmlu
YWxseUNvbnRleHQgZmluYWxseUNvbnRleHQ7CiAgICAgfTsKIAotICAgIHN0cnVjdCBGb3JJbkNv
bnRleHQgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhwZWN0ZWRTdWJzY3JpcHRSZWdp
c3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJSZWdpc3RlcjsKLSAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGluZGV4UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBwcm9wZXJ0eVJlZ2lzdGVyOworICAgIGNsYXNzIEZvckluQ29udGV4dCB7CisgICAgcHVi
bGljOgorICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKKyAg
ICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAgICAs
IG1faXNWYWxpZCh0cnVlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IH5Gb3JJbkNvbnRleHQoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlk
YXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsgfQorCisgICAgICAgIGVudW0gRm9ySW5Db250ZXh0
VHlwZSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBlLAorICAgICAgICAg
ICAgSW5kZXhlZEZvckluQ29udGV4dFR5cGUKKyAgICAgICAgfTsKKyAgICAgICAgdmlydHVhbCBG
b3JJbkNvbnRleHRUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisKKyAgICAgICAgUmVnaXN0ZXJJRCog
bG9jYWwoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsUmVnaXN0ZXIuZ2V0KCk7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2xvY2FsUmVnaXN0ZXI7CisgICAg
ICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIH07CisKKyAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0cnVj
dHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBp
bmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yUmVnaXN0ZXIpCisgICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lz
dGVyKQorICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3RlcikKKyAgICAg
ICAgICAgICwgbV9wcm9wZXJ0eVJlZ2lzdGVyKHByb3BlcnR5UmVnaXN0ZXIpCisgICAgICAgICAg
ICAsIG1fZW51bWVyYXRvclJlZ2lzdGVyKGVudW1lcmF0b3JSZWdpc3RlcikKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBGb3JJbkNvbnRleHRUeXBlIHR5cGUoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlRm9ySW5Db250ZXh0VHlw
ZTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJl
Z2lzdGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rl
ci5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1f
aW5kZXhSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVydHlSZWdp
c3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvclJlZ2lzdGVyOwor
ICAgIH07CisKKyAgICBjbGFzcyBJbmRleGVkRm9ySW5Db250ZXh0IDogcHVibGljIEZvckluQ29u
dGV4dCB7CisgICAgcHVibGljOgorICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0KFJlZ2lzdGVy
SUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCisgICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX2luZGV4UmVn
aXN0ZXIoaW5kZXhSZWdpc3RlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCBGb3JJbkNvbnRleHRUeXBlIHR5cGUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gSW5kZXhlZEZvckluQ29udGV4dFR5cGU7CisgICAgICAgIH0KKworICAgICAgICBS
ZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdp
c3RlcjsKICAgICB9OwogCiAgICAgc3RydWN0IFRyeURhdGEgewpAQCAtNDMxLDYgKzQ5NiwxNSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFByb3BlcnR5TmFt
ZXMoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBpLCBSZWdp
c3RlcklEKiBzaXplLCBMYWJlbCogYnJlYWtUYXJnZXQpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0TmV4dFByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIFJlZ2lzdGVySUQqIGl0ZXIsIExhYmVsKiB0
YXJnZXQpOwogCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNJbmRleGVkUHJvcGVydHkoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUp
OworICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzR2VuZXJpY1By
b3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEVudW1lcmFibGVMZW5ndGgo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoLCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJh
dG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1l
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5k
ZXgpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGluZGV4KTsKKwogICAgICAgICB2b2lkIGVtaXRSZWFkT25seUV4Y2Vw
dGlvbklmTmVlZGVkKCk7CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcg
bXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KQEAgLTQ2MCwxNiArNTM0LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udGV4dChTdGF0ZW1lbnROb2RlKiBmaW5h
bGx5QmxvY2spOwogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250ZXh0KCk7CiAKLSAgICAgICAg
dm9pZCBwdXNoT3B0aW1pc2VkRm9ySW4oUmVnaXN0ZXJJRCogZXhwZWN0ZWRTdWJzY3JpcHQsIFJl
Z2lzdGVySUQqIGl0ZXIsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJl
Z2lzdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBGb3JJbkNvbnRleHQgY29udGV4dCA9IHsg
ZXhwZWN0ZWRTdWJzY3JpcHQsIGl0ZXIsIGluZGV4LCBwcm9wZXJ0eVJlZ2lzdGVyIH07Ci0gICAg
ICAgICAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChjb250ZXh0KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgcG9wT3B0aW1pc2VkRm9ySW4oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQorICAgICAgICB2
b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCog
aW5kZXgpOworICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsKTsKKyAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKTsKKyAgICAgICAgdm9pZCBwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsKTsKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9j
YWwoUmVnaXN0ZXJJRCogbG9jYWwpOwogCiAgICAgICAgIExhYmVsU2NvcGVQdHIgYnJlYWtUYXJn
ZXQoY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBMYWJlbFNjb3BlUHRyIGNvbnRpbnVlVGFy
Z2V0KGNvbnN0IElkZW50aWZpZXImKTsKQEAgLTY2OCw3ICs3MzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBWZWN0b3I8Q29udHJvbEZsb3dDb250ZXh0LCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9zY29wZUNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFN3aXRjaEluZm8+
IG1fc3dpdGNoQ29udGV4dFN0YWNrOwotICAgICAgICBWZWN0b3I8Rm9ySW5Db250ZXh0PiBtX2Zv
ckluQ29udGV4dFN0YWNrOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZvckluQ29u
dGV4dD4+IG1fZm9ySW5Db250ZXh0U3RhY2s7CiAgICAgICAgIFZlY3RvcjxUcnlDb250ZXh0PiBt
X3RyeUNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxSZWZQdHI8UmVnaXN0
ZXJJRD4sIGNvbnN0IERlY29uc3RydWN0aW9uUGF0dGVybk5vZGUqPj4gbV9kZWNvbnN0cnVjdGVk
UGFyYW1ldGVyczsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNzEyMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MDUsMTIgKzE1MDUsMTQgQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJl
c29sdmVOb2RlOjplbWl0QgogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHJlc3VsdC5n
ZXQoKSwgbG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50
KGdlbmVyYXRvciwgcmVzdWx0LmdldCgpLCByZXN1bHQuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0
b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1
bHREZXNjcmlwdG9yKCkpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5n
ZXQoKSwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9y
SW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVU
b0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQuZ2V0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2lnbm1l
bnQoZ2VuZXJhdG9yLCBsb2NhbC5nZXQoKSwgbG9jYWwuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0
b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1
bHREZXNjcmlwdG9yKCkpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRl
eHRGb3JMb2NhbChsb2NhbC5nZXQoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQogCkBAIC0xNTQwLDExICsx
NTQyLDEzIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXBEc3QuZ2V0KCks
IG1fcmlnaHQpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0
ZW1wRHN0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5pbnZhbGlkYXRlRm9ySW5Db250
ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3Rp
bmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wRHN0LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBS
ZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwuZ2V0KCksIG1fcmln
aHQpOworICAgICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxv
Y2FsLmdldCgpKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklm
TmVlZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE5MjAsMTAyICsxOTI0LDIxNyBAQCB2
b2lkIEZvck5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JJbk5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLXZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQorUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjp0
cnlHZXRCb3VuZExvY2FsKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7Ci0gICAgTGFi
ZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxv
b3ApOwotCi0gICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1lbnRMb2NhdGlvbigpKSB7Ci0gICAg
ICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRvciwgIkxlZnQgc2lkZSBvZiBmb3It
aW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVy
KCk7CisgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKKyAgICAg
ICAgaWYgKGxvY2FsLmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gbG9jYWwuZ2V0KCk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBzdGFydE9mZnNldCgp
LCBsaW5lU3RhcnRPZmZzZXQoKSk7CisgICAgaWYgKG1fbGV4cHItPmlzRGVjb25zdHJ1Y3Rpb25O
b2RlKCkpIHsKKyAgICAgICAgRGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSogYXNzaWduTm9k
ZSA9IHN0YXRpY19jYXN0PERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqPihtX2xleHByKTsK
KyAgICAgICAgYXV0byBiaW5kaW5nID0gYXNzaWduTm9kZS0+YmluZGluZ3MoKTsKKyAgICAgICAg
aWYgKCFiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIGdlbmVyYXRvci5lbWl0Tm9kZShiYXNlLmdldCgpLCBtX2V4cHIpOwotICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBzaXplID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
aXRlciA9IGdlbmVyYXRvci5lbWl0R2V0UHJvcGVydHlOYW1lcyhnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCksIHNpemUuZ2V0KCksIHNjb3BlLT5icmVha1Rhcmdl
dCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwor
ICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJp
bmRpbmcpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmct
PmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwo
aWRlbnQpOworICAgICAgICBpZiAobG9jYWwuaXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBsb2NhbC5nZXQoKTsKKyAgICB9CiAKLSAgICBS
ZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdExvb3BI
aW50KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU5hbWU7Ci0gICAgYm9vbCBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IGZhbHNlOwordm9pZCBGb3JJ
bk5vZGU6OmVtaXRMb29wSGVhZGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSkKK3sKICAgICBpZiAobV9sZXhwci0+aXNSZXNvbHZlTm9kZSgp
KSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc3RhdGljX2Nhc3Q8UmVzb2x2
ZU5vZGUqPihtX2xleHByKS0+aWRlbnRpZmllcigpOwogICAgICAgICBMb2NhbCBsb2NhbCA9IGdl
bmVyYXRvci5sb2NhbChpZGVudCk7Ci0gICAgICAgIGlmICghbG9jYWwuZ2V0KCkpIHsKLSAgICAg
ICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOworICAgICAgICBp
ZiAobG9jYWwuZ2V0KCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0
KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGdlbmVy
YXRvci5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAg
ICBSZWdpc3RlcklEKiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLCBpZGVudCwgcHJvcGVydHlOYW1lLCBn
ZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZO
b3RGb3VuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlw
dCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9
IGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLnB1c2hP
cHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQoKSwgaS5nZXQo
KSwgbG9jYWwuZ2V0KCkpOwotICAgICAgICAgICAgb3B0aW1pemVkRm9yaW5BY2Nlc3MgPSB0cnVl
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2xleHByLT5pc0RvdEFjY2Vzc29yTm9kZSgp
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNz
b3JOb2RlKCkpIHsKICAgICAgICAgRG90QWNjZXNzb3JOb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGlj
X2Nhc3Q8RG90QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gYXNzaWduTm9kZS0+aWRlbnRpZmllcigpOwotICAgICAgICBwcm9wZXJ0eU5h
bWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBwcm90ZWN0ID0gcHJvcGVydHlOYW1lOwogICAgICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7Ci0KICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZvdCgpLCBhc3NpZ25Ob2RlLT5kaXZv
dFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kKCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnQsIHByb3BlcnR5TmFtZSk7Ci0gICAgfSBlbHNlIGlmIChtX2xl
eHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChtX2xleHByLT5pc0JyYWNrZXRBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBCcmFj
a2V0QWNjZXNzb3JOb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8QnJhY2tldEFjY2Vzc29y
Tm9kZSo+KG1fbGV4cHIpOwotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJvcGVydHlO
YW1lOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShhc3NpZ25Ob2RlLT5iYXNlKCkpOwogICAgICAgICBSZWdpc3RlcklEKiBzdWJzY3JpcHQgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWduTm9kZS0+c3Vic2NyaXB0KCkpOwotICAgICAgICAKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhhc3NpZ25Ob2RlLT5kaXZvdCgpLCBh
c3NpZ25Ob2RlLT5kaXZvdFN0YXJ0KCksIGFzc2lnbk5vZGUtPmRpdm90RW5kKCkpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHN1YnNjcmlwdCwgcHJvcGVydHlO
YW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobV9sZXhwci0+aXNEZWNvbnN0cnVj
dGlvbk5vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9sZXhwci0+
aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgewogICAgICAgICBEZWNvbnN0cnVjdGluZ0Fzc2lnbm1l
bnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVjb25zdHJ1Y3RpbmdBc3NpZ25tZW50
Tm9kZSo+KG1fbGV4cHIpOwogICAgICAgICBhdXRvIGJpbmRpbmcgPSBhc3NpZ25Ob2RlLT5iaW5k
aW5ncygpOwotICAgICAgICBpZiAoYmluZGluZy0+aXNCaW5kaW5nTm9kZSgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIHNpbXBsZUJpbmRpbmcgPSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJpbmRp
bmcpOwotICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IHNpbXBsZUJpbmRpbmctPmJvdW5k
UHJvcGVydHkoKTsKLSAgICAgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlk
ZW50KTsKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGxvY2FsLmdldCgpOwotICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCBJIGVtaXQgZXhwcmVzc2lvbiBpbmZvIGhlcmU/Ci0gICAgICAg
ICAgICBpZiAoIXByb3BlcnR5TmFtZSB8fCBsb2NhbC5pc0NhcHR1cmVkKCkgfHwgZ2VuZXJhdG9y
LmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgICAgICAgICAgZ290
byBnZW5lcmljQmluZGluZzsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJh
dG9yLmVtaXRNb3ZlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgICAgIGdlbmVyYXRvci5wdXNoT3B0aW1pc2VkRm9ySW4oZXhwZWN0ZWRTdWJzY3JpcHQu
Z2V0KCksIGl0ZXIuZ2V0KCksIGkuZ2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBv
cHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICBnb3RvIGNvbXBsZXRlZFNp
bXBsZUJpbmRpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGdlbmVyaWNCaW5kaW5nOgot
ICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgaWYgKCFiaW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKKyAgICAgICAgICAgIGFzc2lnbk5v
ZGUtPmJpbmRpbmdzKCktPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHNpbXBsZUJpbmRpbmcg
PSBzdGF0aWNfY2FzdDxCaW5kaW5nTm9kZSo+KGJpbmRpbmcpOworICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHNpbXBsZUJpbmRpbmctPmJvdW5kUHJvcGVydHkoKTsKKyAgICAgICAg
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAoIWxvY2Fs
LmdldCgpIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgYXNzaWduTm9kZS0+
YmluZGluZ3MoKS0+YmluZFZhbHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBjb21wbGV0ZWRTaW1wbGVCaW5kaW5nOgot
ICAgICAgICA7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQogCi0gICAgaWYgKG9wdGltaXplZEZvcmluQWNjZXNzKQotICAgICAgICBnZW5lcmF0b3IucG9w
T3B0aW1pc2VkRm9ySW4oKTsKK3ZvaWQgRm9ySW5Ob2RlOjplbWl0TXVsdGlMb29wQnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIGlm
ICghbV9sZXhwci0+aXNBc3NpZ25tZW50TG9jYXRpb24oKSkgeworICAgICAgICBlbWl0VGhyb3dS
ZWZlcmVuY2VFcnJvcihnZW5lcmF0b3IsICJMZWZ0IHNpZGUgb2YgZm9yLWluIHN0YXRlbWVudCBp
cyBub3QgYSByZWZlcmVuY2UuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXROZXh0
UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgYmFzZS5nZXQoKSwgaS5nZXQoKSwgc2l6ZS5nZXQo
KSwgaXRlci5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxp
bmVTdGFydE9mZnNldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1Rh
cmdldCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsZW5ndGg7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHN0cnVjdHVyZUVudW1lcmF0b3I7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGJh
c2UuZ2V0KCksIG1fZXhwcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdGhpcy0+
dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOworCisgICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBs
b29wLgorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdM
YWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BT
dGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BF
bmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAgICAgICBsZW5ndGggPSBnZW5lcmF0b3Iu
ZW1pdEdldEVudW1lcmFibGVMZW5ndGgoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdl
dCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3Vs
dCA9IGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcChvcF9sZXNzLCBnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIGkuZ2V0KCksIGxlbmd0aC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmRmFsc2UocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRIYXNJbmRleGVkUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBpLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIHNjb3Bl
LT5jb250aW51ZVRhcmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdFRvSW5kZXhTdHJp
bmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdldCgpKTsKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BI
ZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRv
ci5wdXNoSW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5w
b3BJbmRleGVkRm9ySW5TY29wZShsb2NhbC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
SW5jKGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgp
KTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CisgICAgfQorCisgICAgLy8gU3RydWN0dXJlIHBy
b3BlcnR5IGxvb3AuCisgICAgeworICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJh
dG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJl
bD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJl
bD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworCisgICAgICAgIHN0cnVjdHVyZUVu
dW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGxlbmd0aC5nZXQoKSk7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgc3Ry
dWN0dXJlRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50
KCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0
VW5hcnlPcChvcF9lcV9udWxsLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFt
ZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc1N0cnVjdHVyZVByb3Bl
cnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1
cmVFbnVtZXJhdG9yLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShy
ZXN1bHQuZ2V0KCksIHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKworICAgICAgICB0aGlzLT5l
bWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAg
Z2VuZXJhdG9yLnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpLCBpLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5w
b3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9w
ZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmVFbnVtZXJhdG9yLmdldCgpLCBp
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7Cisg
ICAgICAgIAorICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CisgICAgfQorCisgICAgLy8gR2VuZXJpYyBw
cm9wZXJ0eSBsb29wLgorICAgIHsKKyAgICAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVy
YXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAgICAgICBSZWZQdHI8TGFi
ZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWZQdHI8TGFi
ZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZ2VuZXJpY0VudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldEdlbmVyaWNQcm9w
ZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBsZW5n
dGguZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCkpOworICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdE5leHRF
bnVtZXJhdG9yUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZ2VuZXJpY0VudW1lcmF0
b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0g
Z2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVl
KHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7
CisKKyAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUu
Z2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsK
KworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmlj
RW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VW5hcnlP
cChvcF9lcV9udWxsLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwor
CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzR2VuZXJpY1Byb3BlcnR5KHJlc3VsdC5nZXQoKSwg
YmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgCisgICAgICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChs
b29wRW5kLmdldCgpKTsKKyAgICB9CisKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9m
ZnNldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7Cit9CisKK3ZvaWQg
Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQoreworICAgIHRoaXMtPmVtaXRNdWx0aUxvb3BCeXRlY29kZShnZW5lcmF0
b3IsIGRzdCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGb3JPZk5v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJTY29wZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHJldmlzaW9uIDE3MTIz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAogICAgIEpTU2NvcGUqIGpz
U2NvcGUoKSBjb25zdCB7IHJldHVybiBtX3Njb3BlLmdldCgpOyB9CiAKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgSlNPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
U2NvcGU+IG1fc2NvcGU7CiAgICAgV3JpdGVCYXJyaWVyPERlYnVnZ2VyU2NvcGU+IG1fbmV4dDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSkgXAogICAgIG1hY3Jv
KEpTT2JqZWN0X2J1dHRlcmZseSkgXAogICAgIG1hY3JvKEpTVmFyaWFibGVPYmplY3RfcmVnaXN0
ZXJzKSBcCisgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5
TmFtZXMpIFwKICAgICBtYWNybyhOYW1lZFByb3BlcnRpZXMpIFwKICAgICBtYWNybyhJbmRleGVk
SW50MzJQcm9wZXJ0aWVzKSBcCiAgICAgbWFjcm8oSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTc3NywxMyArMTc3Nyw1MSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBJ
bjoKKyAgICBjYXNlIEluOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdo
ZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CiAgICAg
ICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUoU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKKyAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0dlbmVy
aWNQcm9wZXJ0eTogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTog
eworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51
bWVyYXRvcjogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUoU3BlY1N0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTgzLDYgKzMxODMsODIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW4pOwogICAgICAgICB9CiAKKyAgICAgICAg
Y2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0
RW51bWVyYWJsZUxlbmd0aCwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEhhc0dlbmVy
aWNQcm9wZXJ0eSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eTogeworICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFw
aChIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgCisgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksCisgICAgICAgICAgICAgICAg
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSksCisg
ICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHkpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eTogeworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGdldEFycmF5TW9kZUNvbnNpZGVyaW5nU2xvd1BhdGgoY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOworICAgICAgICAgICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3Jh
cGgoSGFzSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYmFzZSwg
cHJvcGVydHkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgaGFzSXRlcmFibGVQcm9wZXJ0eSk7CisgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSk7CisKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQocHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCAKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0RGlyZWN0UG5hbWUsIE9wSW5mbygwKSwg
T3BJbmZvKHByZWRpY3Rpb24pKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9k
aXJlY3RfcG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJl
X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoR2V0U3RydWN0dXJl
UHJvcGVydHlFbnVtZXJhdG9yLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9y
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51
bWVyYXRvcjogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFtZTogewor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChOZXh0RW51bWVyYXRvclBuYW1lLCAKKyAgICAgICAgICAgICAg
ICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwK
KyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV4dF9lbnVtZXJh
dG9yX3BuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5n
OiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKFRvSW5kZXhTdHJpbmcsIAorICAgICAgICAgICAgICAg
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7
CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworICAgICAgICB9
CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBz
aG91bGQgbm90IGhhcHBlbiBiZWNhdXNlIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tlcgogICAgICAg
ICAgICAgLy8gc2hvdWxkIGhhdmUgY2F1Z2h0IGl0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTMsNiArMTkzLDE1IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQKICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgogICAgIGNhc2Ugb3BfaW46CiAgICAgY2Fz
ZSBvcF9nZXRfZnJvbV9zY29wZToKKyAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoK
KyAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OgorICAgIGNhc2Ugb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OgorICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVy
dHlfZW51bWVyYXRvcjoKKyAgICBjYXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0
b3I6CisgICAgY2FzZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CisgICAgY2FzZSBvcF90b19p
bmRleF9zdHJpbmc6CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogCiAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDYgKzE0NSw5MSBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIGRlZihQ
dXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgSGFz
R2VuZXJpY1Byb3BlcnR5OgorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVt
ZXJhdG9yOgorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNl
IEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShX
b3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6
IHsKKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2Jq
ZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBOZXh0RW51bWVy
YXRvclBuYW1lOiB7CisgICAgICAgIHJlYWQoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZFByb3BlcnR5TmFtZXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgcmVhZChKU0NlbGxfaW5kZXhpbmdUeXBlKTsKKyAg
ICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRz
KCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAg
ICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdy
aXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJ
bkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAg
ICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAg
ICAgICAgd3JpdGUoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAg
aWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWFk
KFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAg
ICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0
b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoQXJyYXlTdG9yYWdlUHJvcGVydGllcyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVh
ZChXb3JsZCk7CisgICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICByZWFkKFdvcmxk
KTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYXNlIEFyaXRoQWRkOgogICAgIGNhc2UgQXJp
dGhTdWI6CiAgICAgY2FzZSBBcml0aE5lZ2F0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4NywxMSBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgorICAgIGNhc2UgSGFzR2VuZXJp
Y1Byb3BlcnR5OgorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6CisgICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6CisgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpAQCAtMjA5LDYgKzIxNCwxMCBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBOZXdGdW5j
dGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgogICAgIGNhc2UgVGhyb3dS
ZWZlcmVuY2VFcnJvcjoKKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjoK
KyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgY2FzZSBOZXh0RW51
bWVyYXRvclBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTcxMjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAzMCw2ICsxMDMwLDY0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgb2Jz
ZXJ2ZVVzZUtpbmRPbk5vZGU8U3RyaW5nVXNlPihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAg
ICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAg
ICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsK
KyAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJh
eU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIFNwZWNOb25lLCBub2RlLT5mbGFncygpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJsZXNzQXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFt
ZTogeworICAgICAgICAgICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCk7CisgICAgICAgICAgICBFZGdlJiBwcm9wZXJ0eSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMik7CisgICAgICAgICAgICBFZGdlJiBlbnVtZXJhdG9yID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAzKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4ocHJvcGVydHkpOworICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkludDMyVXNlPihpbmRleCk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVz
ZT4oZW51bWVyYXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50
MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAg
Zml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIE5leHRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3du
SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogeworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogICAgICAgICAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRo
ZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRk
IGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwMSw2ICsxMDAxLDcgQEAgc3RydWN0IE5vZGUg
ewogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgc3dpdGNoIChv
cCgpKSB7CisgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CkBA
IC0xMjYxLDYgKzEyNjIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgQXJyYXlQ
b3A6CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzEyMzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4OCw2ICsyODgsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjaywgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIFwKKyAgICAvKiBGb3ItaW4gZW51bWVyYXRpb24gb3Bjb2Rl
cyAqL1wKKyAgICBtYWNybyhHZXRFbnVtZXJhYmxlTGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSGFzSW5kZXhlZFByb3BlcnR5LCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhIYXNTdHJ1Y3R1cmVQcm9w
ZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8o
SGFzR2VuZXJpY1Byb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4p
IFwKKyAgICBtYWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNW
YXJBcmdzIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oR2V0U3RydWN0dXJlUHJvcGVydHlF
bnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8o
R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRKUykgXAorICAgIG1hY3JvKE5leHRFbnVtZXJhdG9yUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMp
CiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQg
Zm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51
bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlkTWFzaykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MCw2ICsxODAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAg
ICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRp
dmVDYWxsOgpAQCAtNTUwLDYgKzU1MSwzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVt
ZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBOZXh0RW51bWVyYXRvclBuYW1lOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY0NlbGwgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNl
IHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCwxNSBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNl
IEdldEdldHRlcjoKICAgICBjYXNlIEdldFNldHRlcjoKKyAgICBjYXNlIEdldEVudW1lcmFibGVM
ZW5ndGg6CisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6CisgICAgY2FzZSBIYXNTdHJ1Y3R1
cmVQcm9wZXJ0eToKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICBjYXNlIEdldERp
cmVjdFBuYW1lOgorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOgorICAg
IGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjoKKyAgICBjYXNlIE5leHRFbnVtZXJh
dG9yUG5hbWU6CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGNhc2UgTmF0aXZlQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTcxMjM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAj
aW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5j
bHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCkBAIC00NTQ4LDYgKzQ1NDksMjUyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCisgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uR2V0RW51bWVyYWJsZUxlbmd0aCwgcmVzdWx0R1BSLCBiYXNlLmdwcigpKTsKKyAg
ICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1
bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VQYXlsb2FkR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7CisgICAgICAg
IEdQUlJlZyBiYXNlVGFnR1BSID0gYmFzZS50YWdHUFIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCBwcm9w
ZXJ0eS5ncHIoKSk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5
OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAg
R1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0
VGFnKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlVGFnR1BSID0gYmFzZS50YWdHUFIoKTsK
KyAgICAgICAgR1BSUmVnIGJhc2VQYXlsb2FkR1BSID0gYmFzZS5wYXlsb2FkR1BSKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2Fk
R1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9
IHJlc3VsdFRhZy5ncHIoKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAgICAgICBz
Y3JhdGNoR1BSLCAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0
b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhD
YWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHksIHJl
c3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZVRhZ0dQUiwgYmFzZVBheWxvYWRHUFIs
IHByb3BlcnR5R1BSKSk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0
eTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAg
IEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
CisgICAgICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZTogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
ICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hEb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIHNjcmF0Y2hGUFIs
IHNjcmF0Y2hGUFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGlu
ZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdFBheWxvYWRHUFIpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCBiYXNlR1BSLCBpbmRleEdQUikpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgIEVk
Z2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAg
ICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAx
KTsKKyAgICAgICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAyKTsKKyAgICAgICAgRWRnZSYgZW51bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZh
ckFyZ0NoaWxkKG5vZGUsIDMpOworCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgYmFzZUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBwcm9wZXJ0eUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgo
dGhpcywgaW5kZXhFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRv
cih0aGlzLCBlbnVtZXJhdG9yRWRnZSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2Fk
KHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQ
UiA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdy
b25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0
b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgCisgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRj
aEdQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChi
YXNlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7CisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGlu
ZUFjY2Vzcy5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0
Y2hHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaEdQUik7
CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAvLyBXZSB1c2UgcmVzdWx0UGF5bG9hZEdQUiBhcyBhIHRlbXBvcmFyeSBoZXJl
LiBXZSBoYXZlIHRvIG1ha2Ugc3VyZSBjbG9iYmVyIGl0IGFmdGVyIGdldHRpbmcgdGhlIAorICAg
ICAgICAvLyB2YWx1ZSBvdXQgb2YgaW5kZXhHUFIgYW5kIGVudW1lcmF0b3JHUFIgYmVjYXVzZSBy
ZXN1bHRQYXlsb2FkR1BSIGNvdWxkIHJldXNlIGVpdGhlciBvZiB0aG9zZSByZWdpc3RlcnMuCisg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0UGF5bG9hZEdQUik7IAorICAgICAgICBp
bnQzMl90IG9mZnNldE9mRmlyc3RCdXR0ZXJmbHlQcm9wZXJ0eSA9IC0yICogc3RhdGljX2Nhc3Q8
aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7IAorICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdEJ1dHRlcmZseVByb3BlcnR5
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIp
OworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRQ
YXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdEJ1dHRlcmZseVByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bENlbGwsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZUdQUiwgc2NyYXRjaEdQ
UiwgcHJvcGVydHlHUFIpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50
MzJPcGVyYW5kIGxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3Vs
dCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgYmFzZS5ncHIo
KSwgbGVuZ3RoLmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgbGVuZ3RoKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRHZW5lcmljUHJvcGVy
dHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIGxlbmd0aC5ncHIoKSwgZW51bWVy
YXRvci5ncHIoKSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlJlc3Vs
dCByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlz
KTsKKworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBy
ZXN1bHRUYWcuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0
UGF5bG9hZC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgCisgICAgICAgICAgICBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVs
bFRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgaW5Cb3VuZHMubGluaygm
bV9qaXQpOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5h
bWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdH
UFIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQUiwgaW5kZXguZ3ByKCkpOworICAgICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2Ug
Rm9yY2VPU1JFeGl0OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKElu
YWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5j
bHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5j
bHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgi
CiAKQEAgLTQ1ODIsNiArNDU4MywyMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVuZ3RoLCBy
ZXN1bHRHUFIsIGJhc2UuZ3ByKCkpOworICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6
IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0R1BSLCBi
YXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworCisg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3Bl
cnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwor
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIsIAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgbW92ZVRydWVU
byhyZXN1bHRHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9u
SGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKSk7Cisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgQXJyYXlNb2RlIG1v
ZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewor
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91
czogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAg
ICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0
Y2guZnByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7
CisKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3JhdGNoRlBSKTsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoRG91YmxlKE1hY3JvQXNzZW1i
bGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6IHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5LCByZXN1bHRHUFIsIGJh
c2VHUFIsIGluZGV4R1BSKSk7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewor
ICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
MCk7CisgICAgICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgMSk7CisgICAgICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFy
QXJnQ2hpbGQobm9kZSwgMik7CisgICAgICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
cHJvcGVydHkodGhpcywgcHJvcGVydHlFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVy
YW5kIGluZGV4KHRoaXMsIGluZGV4RWRnZSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGVudW1lcmF0b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOworICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDFHUFIgPSBzY3JhdGNo
MS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CisK
KyAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgc2NyYXRjaDFHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9uZ1N0cnVj
dHVyZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisgICAgICAg
ICAgICBzY3JhdGNoMUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBv
dXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCAKKyAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVt
ZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChiYXNlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAg
IC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgIG91dE9mTGluZUFjY2Vzcy5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoMUdQUik7CisgICAgICAgIG1faml0
LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2gxR1BS
KTsKKyAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5zaWdu
RXh0ZW5kMzJUb1B0cihzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMkdQUiwgc2NyYXRjaDFHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCAKKyAgICAgICAgICAgIC0yICogc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpLCByZXN1bHRHUFIpOworCisgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWwsIHJlc3Vs
dEdQUiwgYmFzZUdQUiwgcHJvcGVydHlHUFIpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldFN0cnVj
dHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5k
IGxlbmd0aCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQo
dGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRT
dHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSwgbGVuZ3Ro
LmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgbGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCksIGxlbmd0aC5ncHIoKSwgZW51bWVyYXRvci5ncHIo
KSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgTmV4dEVudW1lcmF0b3JQbmFtZTogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
U3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDIodGhpcyk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICAgICAg
R1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworICAgICAgICBHUFJSZWcg
aW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2Ny
YXRjaDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMkdQUiA9IHNjcmF0Y2gyLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCAKKyAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNMZW5ndGhPZmZzZXQoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRHUFIpOworCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGluQm91bmRzLmxp
bmsoJm1faml0KTsKKworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRy
KHNjcmF0Y2gyR1BSLCBzY3JhdGNoMkdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgU3BlY3VsYXRlSW50
MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQUiwgaW5kZXguZ3ByKCkpOworICAgICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogI2lmIEVO
QUJMRShGVExfSklUKSAgICAgICAgCiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDogewogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzQsNiArMTAzNCwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwp
KTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKENfSklUT3BlcmF0aW9uX0VDWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDWkMgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmcz
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGNlbGwpKTsKQEAg
LTExMzIsNiArMTE0MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
RXhlY1N0YXRlKCk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aENhbGxGcmFtZVJvbGxi
YWNrT25FeGNlcHRpb25TZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEFyZ3VtZW50VHlw
ZTE+CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihGdW5jdGlvblR5cGUgb3Bl
cmF0aW9uLCBOb1Jlc3VsdFRhZywgQXJndW1lbnRUeXBlMSBhcmcxKQpAQCAtMTI0OCw2ICsxMjYz
LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIoY2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNaIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
c3R1YkluZm8pLCBhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwpAQCAtMTI2Myw2ICsxMjgzLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpa
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTMxMSw2ICsxMzQxLDIxIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19K
SVRPcGVyYXRpb25fRUpKQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9F
Slogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FSlpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklU
T3BlcmF0aW9uX0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzKGFyZzEpOwpAQCAtMTQ4NCw2ICsxNTI5LDE2
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIGFyZzEp
CisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkMgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJl
ZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFy
ZzFUYWcsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpzc1og
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTUxNSw2ICsxNTcwLDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
Y2VsbCkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUNaIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAg
IH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VT
c2lDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJpbmdJbXBs
KiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw2ICszMDMs
MTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVf
T1Aob3BfcmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX3Njb3Bl
KQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX3Njb3BlKQorCisgICAgICAgIERFRklORV9P
UChvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfZ2Vu
ZXJpY19wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX09QKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkpCisgICAgICAgIERFRklORV9PUChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKKyAgICAgICAg
REVGSU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCisgICAgICAgIERFRklORV9PUChvcF9nZXRf
c3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgICAgIERFRklORV9PUChvcF9nZXRf
Z2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgICAgICBERUZJTkVfT1Aob3BfbmV4dF9l
bnVtZXJhdG9yX3BuYW1lKQorICAgICAgICBERUZJTkVfT1Aob3BfdG9faW5kZXhfc3RyaW5nKQog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgfQpAQCAtNDIwLDYgKzQzMCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF90b19udW1iZXIpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF90b19wcmltaXRpdmUpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZGlyZWN0
X3BuYW1lKQogCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9yZXNvbHZlX3Njb3BlKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw2ICsyMjcsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbElu
Zm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eShieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9kZSk7Cisg
ICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChW
TSogdm0sIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgh
dm0tPmNhblVzZUpJVCgpKSB7CkBAIC0yNTYsNiArMjYzLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRy
ZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlW
YWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIAorICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyosIFJldHVy
bkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDYWxsKFZNKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKICAgICAgICAg
Q29kZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qLCBOYXRpdmVGdW5jdGlvbik7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CkBAIC0zMzYsNiArMzQ1LDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRl
ZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuCiAgICAgICAgIC8vIFN0cnVjdHVyZSBpcyBhbHJlYWR5
IHByb2ZpbGVkLiBSZXR1cm5zIHRoZSBzbG93IGNhc2VzLiBGYWxsLXRocm91Z2gKICAgICAgICAg
Ly8gY2FzZSBjb250YWlucyByZXN1bHQgaW4gcmVnVDAsIGFuZCBpdCBpcyBub3QgeWV0IHByb2Zp
bGVkLgorICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJMb2FkKEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkgeyByZXR1cm4gZW1pdENvbnRpZ3VvdXNMb2Fk
KGluc3RydWN0aW9uLCBiYWRUeXBlLCBJbnQzMlNoYXBlKTsgfQorICAgICAgICBKdW1wTGlzdCBl
bWl0RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAg
ICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSA9IENvbnRpZ3VvdXNTaGFw
ZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIEp1bXBMaXN0IGVtaXRMb2FkRm9yQXJy
YXlNb2RlKEluc3RydWN0aW9uKiwgSklUQXJyYXlNb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
KTsKKwogICAgICAgICBKdW1wTGlzdCBlbWl0SW50MzJHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpIHsgcmV0dXJuIGVtaXRDb250aWd1b3Vz
R2V0QnlWYWwoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIEludDMyU2hhcGUpOyB9CiAgICAgICAgIEp1
bXBMaXN0IGVtaXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Q29udGlndW91c0dldEJ5VmFsKEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUg
PSBDb250aWd1b3VzU2hhcGUpOwpAQCAtNTQ5LDYgKzU2NCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX3VuZXhwZWN0ZWRfbG9hZChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX3Vyc2hpZnQoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfaGFz
X2dlbmVyaWNfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9n
ZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX25leHRfZW51bWVyYXRvcl9wbmFtZShJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKEluc3RydWN0aW9uKik7
CiAKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYml0YW5k
KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNjAy
LDYgKzYyNiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3Rv
X3ByaW1pdGl2ZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF91bnNpZ25lZChJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF91
cnNoaWZ0KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2RpcmVj
dF9wbmFtZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
IAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNzEyMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
aW5saW5lIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVHZXRCeVZhbChJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdERvdWJsZUxvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUp
OworICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlZ1QwKTsKKyAgICBzdWI2NCh0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorI2Vsc2UK
K2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAg
IEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXREb3VibGVMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICBtb3ZlRG91YmxlVG9JbnRzKGZwUmVnVDAsIHJlZ1QwLCByZWdUMSk7CisgICAgcmV0
dXJuIHNsb3dDYXNlczsKK30KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCitBTFdBWVNfSU5M
SU5FIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRMb2FkRm9yQXJyYXlNb2RlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIEpJVEFycmF5TW9kZSBhcnJheU1vZGUsIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBj
YXNlIEpJVEludDMyOgorICAgICAgICByZXR1cm4gZW1pdEludDMyTG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworICAgIGNhc2UgSklURG91YmxlOgorICAgICAgICByZXR1cm4gZW1p
dERvdWJsZUxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICBjYXNlIEpJVENv
bnRpZ3VvdXM6CisgICAgICAgIHJldHVybiBlbWl0Q29udGlndW91c0xvYWQoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgcmV0
dXJuIGVtaXRBcnJheVN0b3JhZ2VMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJ
VDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQoreworICAgIHJl
dHVybiBlbWl0Q29udGlndW91c0xvYWQoaW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIGV4cGVjdGVkU2hh
cGUpOworfQorCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSkKK3sKKyAgICByZXR1cm4gZW1pdEFycmF5U3RvcmFnZUxvYWQoaW5zdHJ1Y3Rpb24s
IGJhZFR5cGUpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dEltbWVkaWF0ZURvdWJsZShpbnQgc3JjKQogewogICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXND
b25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0Rv
dWJsZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMCArMzYsMTIgQEAKICNp
bmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCkBAIC0xMTc2LDYgKzEx
NzgsMjM1IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmEKICAgICBj
YWxsT3BlcmF0aW9uKFdpdGhQcm9maWxlLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMsIGRzdCwg
cmVnVDEsIHJlZ1QwLCByZWdUMywgcmVnVDIpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKKworICAgIGVtaXRMb2FkUGF5bG9hZChlbnVt
ZXJhdG9yLCByZWdUMSk7CisKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvcGVydHkp
OworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBl
cyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0g
ZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5
cGUpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgSnVtcCBkb25lID0g
anVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2Rl
QmxvY2spOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9u
TGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFk
ZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVM
b2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVB
ZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5y
ZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9u
ZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXBUb0RvbmUpKTsKKyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAorICAg
ICAgICAoIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwg
Q29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Cisg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQ
cm9maWxlOworICAgIAorICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOworCisgICAgZW1pdExvYWRQYXlsb2FkKHBy
b3BlcnR5LCByZWdUMSk7CisKKyAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAt
IHdlJ3JlIHplcm8tZXh0ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vz
bid0IG1hdHRlci4KKyAgICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWlu
dDMyIGFnYWluc3QgdGhlIG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBp
ZgorICAgIC8vIG51bWJlciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5
cyBsZXNzIHRoYW4gaW50bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgorICAgIC8vIHNp
emUgaXMgYWx3YXlzIGxlc3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwg
aGF2ZSBiZWVuIGNvcnJlY3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCisgICAgLy8gdG8gNjQt
Yml0cyBpcyBuZWNlc3Nhcnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0
aW9uLiBXZSB6ZXJvIGV4dGVuZCByYXRoZXIgdGhhbiBzaWduCisgICAgLy8gZXh0ZW5kaW5nIHNp
bmNlIGl0IG1ha2VzIGl0IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNh
c2UuCisgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKKworICAgIEpJVEFycmF5
TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIFBhdGNoYWJsZUp1bXAg
YmFkVHlwZTsKKworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlr
ZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgorICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRM
b2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUp
OworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxh
YmVsKCk7CisgICAgCisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKKyAgICAKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVj
b2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBsaW5rU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCisgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCisgICAgCisgICAgSnVtcCBza2lwUHJvZmls
aW5nID0ganVtcCgpOworICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxl
bmd0aCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKKyAgICAK
KyAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAg
ICAKKyAgICBza2lwUHJvZmlsaW5nLmxpbmsodGhpcyk7CisgICAgCisgICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOworICAgIAorICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIHJlZ1Qx
LCByZWdUMCwgcmVnVDMsIHJlZ1QyKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVz
cyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgaW5k
ZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9y
ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKworICAgIC8vIENoZWNrIHRoYXQg
YmFzZSBpcyBhIGNlbGwKKyAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKKworICAgIC8vIENoZWNrIHRoZSBzdHJ1
Y3R1cmUKKyAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisK
KyAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJl
Z1QyKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNo
ZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVtcCBv
dXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7
CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAgICAKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQor
ICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBuZWczMihyZWdUMik7CisgICAgbG9hZDMyKEJhc2VJbmRl
eChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIC0yICogc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
dGFnKSksIHJlZ1QxKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNF
aWdodCwgLTIgKiBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAg
ICAKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwor
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGJhc2UgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXIsIGJhc2UpOworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
Z2V0X2RpcmVjdF9wbmFtZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfc3RydWN0dXJlX3Byb3Bl
cnR5X2VudW1lcmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX25leHRfZW51bWVyYXRvcl9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBp
bnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdExv
YWRQYXlsb2FkKGluZGV4LCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3Is
IHJlZ1QxKTsKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNM
ZW5ndGhPZmZzZXQoKSkpOworCisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRh
ZyksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworCisgICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgIGluQm91bmRzLmxpbmsodGhpcyk7CisKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgdGltZXNQdHIoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgcmVnVDIpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX2luZGV4
X3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
dG9faW5kZXhfc3RyaW5nKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDkgKzM2LDExIEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgi
CisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCkBAIC0xMjEwLDYgKzEyMTIsMjM0IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJlZF9tb3YoSW5zdHIKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgSklUOjplbWl0X29wX2dldF9l
bnVtZXJhYmxlX2xlbmd0aChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworICAgIAorICAgIG1v
dmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7
CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2dl
bmVyaWNfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIAorICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1l
bnRzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0
LgorICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX3ZtLCB0aGlzLCBtX2Nv
ZGVCbG9jayk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRp
b25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29k
ZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJs
ZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgCisgICAgcGF0Y2hCdWZmZXIubGluayhk
b25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvRG9uZSkpOworICAgIAorICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCisg
ICAgICAgICgiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVy
biBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29k
ZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPmJhZFR5cGVKdW1w
LCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJh
eVByb2ZpbGU7CisgICAgCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAs
IHByb3BlcnR5LCByZWdUMSk7CisKKyAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVj
dCAtIHdlJ3JlIHplcm8tZXh0ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBk
b2Vzbid0IG1hdHRlci4KKyAgICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEg
dWludDMyIGFnYWluc3QgdGhlIG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFp
bCBpZgorICAgIC8vIG51bWJlciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFs
d2F5cyBsZXNzIHRoYW4gaW50bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgorICAgIC8v
IHNpemUgaXMgYWx3YXlzIGxlc3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdp
bGwgaGF2ZSBiZWVuIGNvcnJlY3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCisgICAgLy8gdG8g
NjQtYml0cyBpcyBuZWNlc3Nhcnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1
bGF0aW9uLiBXZSB6ZXJvIGV4dGVuZCByYXRoZXIgdGhhbiBzaWduCisgICAgLy8gZXh0ZW5kaW5n
IHNpbmNlIGl0IG1ha2VzIGl0IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93
IGNhc2UuCisgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworCisgICAgSklUQXJyYXlNb2RlIG1v
ZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OworCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVk
QXJyYXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JB
cnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKyAgICAKKyAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKKworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7CisgICAgCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisgICAgCisgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgIAorICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1fYnl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUs
IGRvbmUpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Cisg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQ
cm9maWxlOworICAgIAorICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAv
LyBiYXNlIGNlbGwgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkg
Y2hlY2sKKyAgICAKKyAgICBKdW1wIHNraXBQcm9maWxpbmcgPSBqdW1wKCk7CisgICAgCisgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBlbXB0eSB2YWx1ZQorICAgIAorICAgIGVtaXRBcnJheVByb2ZpbGVPdXRP
ZkJvdW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIAorICAgIHNraXBQcm9maWxpbmcubGlu
ayh0aGlzKTsKKyAgICAKKyAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisgICAgCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwgcmVnVDEpOwor
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xv
d1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0u
dS5vcGVyYW5kOworCisgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAg
IC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDAp
OworICAgIAorICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIC8vIE90aGVyd2lzZSBpdCdz
IG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Cisg
ICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsKKyAgICBz
aWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAtMiAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKSwgcmVnVDApOworICAgIAorICAgIGRvbmUubGluayh0aGlzKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7CisgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKKyAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc3RydWN0
dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dlbmVyaWNf
cHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV4dF9lbnVtZXJhdG9yX3Bu
YW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7
CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zm
c2V0KCkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlZ1QwKTsKKwor
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBpbkJvdW5kcy5saW5rKHRoaXMpOworCisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMCwgcmVnVDApOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1l
c0VpZ2h0KSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5n
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90b19pbmRl
eF9zdHJpbmcpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkpTU3RhY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKQEAg
LTE1MDIsNiArMTUwMyw2NCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogICAgIAorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRTdWJzY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIAorICAgIEFTU0VS
VChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgQVNTRVJUKHN1YnNjcmlwdC5pc1VJbnQzMigp
KTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOworICAgIGJv
b2wgZGlkT3B0aW1pemUgPSBmYWxzZTsKKworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0g
ZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CisgICAgQVNTRVJUKGJ5dGVjb2RlT2Zm
c2V0KTsKKyAgICBCeVZhbEluZm8mIGJ5VmFsSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRC
eVZhbEluZm8oYnl0ZWNvZGVPZmZzZXQgLSAxKTsKKyAgICBBU1NFUlQoIWJ5VmFsSW5mby5zdHVi
Um91dGluZSk7CisgICAgCisgICAgaWYgKGhhc09wdGltaXphYmxlSW5kZXhpbmcob2JqZWN0LT5z
dHJ1Y3R1cmUodm0pKSkgeworICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgorICAgICAg
ICBKSVRBcnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKG9iamVj
dC0+c3RydWN0dXJlKHZtKSk7CisgICAgICAgIGlmIChhcnJheU1vZGUgIT0gYnlWYWxJbmZvLmFy
cmF5TW9kZSkgeworICAgICAgICAgICAgSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCZ2
bSwgZXhlYy0+Y29kZUJsb2NrKCksICZieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JF
VFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgIGRpZE9wdGltaXplID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIWRpZE9wdGltaXplKSB7CisgICAg
ICAgIC8vIElmIHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBh
dGNoaW5nIHRoZW4gbWFrZSBzdXJlIHdlCisgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0
YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2Jq
ZWN0CisgICAgICAgIC8vIHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBl
dmVuIHdhaXQgdW50aWwgMTAgdGltZXMuIEZvciBjYXNlcworICAgICAgICAvLyB3aGVyZSB3ZSBz
ZWUgbm9uLWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlv
bnMgd29ydGggb2YKKyAgICAgICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUgdGhh
dCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuCisgICAgICAgIGlmICgrK2J5VmFs
SW5mby5zbG93UGF0aENvdW50ID49IDEwCisgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVjdHVy
ZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpKSB7CisgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0
byBvcHRpbWl6ZS4KKyAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihleGVj
LT5jb2RlQmxvY2soKSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRv
RnVuY3Rpb24oUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0
cihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBzdWJzY3JpcHQuYXNVSW50MzIoKSkpKTsKK30KKyAgICAKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYyhF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICAKKyAgICBBU1NFUlQo
YmFzZVZhbHVlLmlzT2JqZWN0KCkpOworICAgIEFTU0VSVChzdWJzY3JpcHQuaXNVSW50MzIoKSk7
CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHN1
YnNjcmlwdC5hc1VJbnQzMigpKSkpOworfQorICAgIAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0xODAyLDYgKzE4NjEsNzIgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZNSGFuZGxlRXhjZQogICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMs
IHZtLT5leGNlcHRpb24oKSk7CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlQ2VsbCkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VDZWxsLT50b09iamVjdChl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIHJldHVybiBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgoZXhlYywgYmFzZSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgSlNDZWxsKiBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpOworCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHko
ZXhlYywgYXNTdHJpbmcocHJvcGVydHlOYW1lKS0+dG9JZGVudGlmaWVyKGV4ZWMpKSkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0
eShFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZUNlbGwsIGludDMyX3Qgc3Vic2NyaXB0KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlQ2VsbC0+dG9PYmpl
Y3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdCkp
KTsKK30KKyAgICAKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIGludDMyX3Qg
bGVuZ3RoKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgICAgICAKKyAgICBKU09iamVjdCogYmFzZSA9
IGNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAg
QVNTRVJUKGxlbmd0aCA+PSAwKTsKKworICAgIHJldHVybiBzdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKGV4ZWMsIGJhc2UsIHN0YXRpY19jYXN0PHVpbnQzMl90PihsZW5ndGgpKTsKK30K
KworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEdlbmVyaWNQcm9wZXJ0eUVudW1l
cmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2VDZWxsLCBpbnQzMl90IGxlbmd0aCwg
SlNDZWxsKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yQ2VsbCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAK
KyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VDZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpOworICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CisKKyAgICByZXR1
cm4gZ2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoZXhlYywgYmFzZSwgbGVuZ3RoLCBqc0Nh
c3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oc3RydWN0dXJlRW51bWVyYXRvckNlbGwpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXh0RW51bWVyYXRv
clBuYW1lKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBlbnVtZXJhdG9yQ2VsbCwgaW50MzJfdCBp
bmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oZW51bWVyYXRvckNl
bGwpOworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5h
bWVBdEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHByb3BlcnR5TmFt
ZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgpKTsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRvSW5kZXhTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGluZGV4KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpm
cm9tKGV4ZWMsIGluZGV4KS5zdHJpbmcoKSk7Cit9CisKIH0gLy8gZXh0ZXJuICJDIgogCiAvLyBO
b3RlOiBnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSgpIG5lZWRzIHRvIGJlIHBs
YWNlZCBiZWZvcmUgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMyBAQCB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKCiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEpTQ2VsbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRP
cGVyYXRpb25fRUNJKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0opKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
aW50MzJfdCk7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FREEpKEV4ZWNTdGF0ZSosIGRvdWJsZSwgSlNBcnJheSopOwogdHlwZWRlZiBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUUpKEV4ZWNTdGF0ZSos
IEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9K
SVRPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpK
X0pJVE9wZXJhdGlvbl9FSlopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsK
K3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VK
QykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOwogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNBcnJheSopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUpJZGMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBjb25zdCBJZGVudGlmaWVyKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gKCpKX0pJVE9wZXJhdGlvbl9FSkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSk7CkBAIC0xMTgsOSArMTIxLDE0IEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkoKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAo
KkNfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQ1opKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gKCpDX0pJVE9wZXJhdGlvbl9FQ1pDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90LCBK
U0NlbGwqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25f
RUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUljZikoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZy
YW1lKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VK
KShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJB
VElPTiAoKkNfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGlu
dDMyX3QpOwordHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9F
SlpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgSlNDZWxsKik7Cit0eXBl
ZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKSkMpKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKik7CiB0eXBlZGVmIEpT
Q2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwg
SlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgq
Q19KSVRPcGVyYXRpb25fRUpzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyop
OwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNz
SnNzKShFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKQEAgLTEz
NCw2ICsxNDIsNyBAQCB0eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyCiB0
eXBlZGVmIGRvdWJsZSBKSVRfT1BFUkFUSU9OICgqRF9KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9K
SVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgq
Wl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIGludDMyX3QgSklUX09QRVJB
VElPTiAoKlpfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVkZWYg
c2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3Bl
cmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHNpemVfdCBK
SVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUpKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUpOwpAQCAtMjc3LDYgKzI4Niw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWxEZWZhdWx0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYyhFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZXRCeVZhbFN0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOworRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZh
dWx0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQp
IFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQWN0aXZh
dGlvbihFeGVjU3RhdGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVGVhck9mZkFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRl
bGV0ZUJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYmFzZSwgY29uc3QgSWRlbnRpZmll
ciopIFdURl9JTlRFUk5BTDsKQEAgLTMwMCw2ICszMTEsMTQgQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9TUldyaXRlQmFycgogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW5p
dEdsb2JhbENvbnN0KEV4ZWNTdGF0ZSosIEluc3RydWN0aW9uKik7CiAKK2ludDMyX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTQ2VsbCop
OworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVy
dHkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQ2VsbCopOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0U3RydWN0
dXJlUHJvcGVydHlFbnVtZXJhdG9yKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGludDMyX3QpOworSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3Io
RXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCwgSlNDZWxsKik7CitFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5leHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0
cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKKwogfSAvLyBleHRlcm4gIkMiCiAKIGlubGluZSBQ
X0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtGb3IoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlz
aW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MywxNSArMTczLDEzIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBl
LCBtb2RlLCBkb25lKSk7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0dl
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBl
IGV4cGVjdGVkU2hhcGUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVk
U2hhcGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGJhZFR5cGUgPSBw
YXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihleHBlY3RlZFNo
YXBlKSk7Ci0gICAgCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMyk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKSk7Ci0gICAgCiAgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEp
OyAvLyB0YWcKICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOyAvLyBw
YXlsb2FkCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwpAQCAtMTg5LDMyICsxODcsMjcgQEAg
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYQogICAgIHJldHVybiBzbG93
Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRE
b3VibGVMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKERvdWJsZVNoYXBlKSk7Ci0gICAgCiAgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
Myk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBB
ZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAg
CiAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0KSwgZnBS
ZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hEb3VibGUoRG91YmxlTm90RXF1YWxP
clVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMCkpOwotICAgIG1vdmVEb3VibGVUb0ludHMoZnBS
ZWdUMCwgcmVnVDAsIHJlZ1QxKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1K
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzOwogICAgIAogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigtQXJyYXlTdG9y
YWdlU2hhcGUpLCByZWdUMSwgcmVnVDMpOwogICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gz
MihBYm92ZSwgcmVnVDMsIFRydXN0ZWRJbW0zMihTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBB
cnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIAogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAKICAgICBsb2FkMzIoQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdU
MSk7IC8vIHRhZwogICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0
aW9uCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9uZSkpOwogfQogCi1KSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlTG9hZChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwog
ICAgIApAQCAtMTYwLDEzICsxNjAsMTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREb3VibGVH
ZXRCeVZhbChJbgogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OwogICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCksIGZw
UmVnVDApOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFs
T3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKLSAgICBtb3ZlRG91YmxlVG82NChmcFJl
Z1QwLCByZWdUMCk7Ci0gICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CiAg
ICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRD
b250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJ
bmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGln
dW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5
cGUgZXhwZWN0ZWRTaGFwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCkBAIC0x
NzksNyArMTc3LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYQog
ICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlT
dG9yYWdlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hh
YmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTIxMCw2ICsxMjEwLDUwIEBA
IF9sbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lOgogX2xsaW50X25hdGl2ZV9jb25zdHJ1Y3Rf
dHJhbXBvbGluZToKICAgICBuYXRpdmVDYWxsVHJhbXBvbGluZShOYXRpdmVFeGVjdXRhYmxlOjpt
X2NvbnN0cnVjdG9yKQogCitfbGxpbnRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOgorICAgIHRy
YWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfZW51bWVyYWJs
ZV9sZW5ndGgpCisgICAgZGlzcGF0Y2goMykKKworX2xsaW50X29wX2hhc19pbmRleGVkX3Byb3Bl
cnR5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg1KQorCitfbGxpbnRfb3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRo
KF9zbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKKyAgICBkaXNwYXRjaCg1KQorCitf
bGxpbnRfb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAg
IGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KQorICAgIGRpc3Bh
dGNoKDQpCisKK19sbGludF9vcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgIHRyYWNlRXhlY3V0aW9u
KCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQorICAgIGRp
c3BhdGNoKDcpCisKK19sbGludF9vcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6
CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dldF9z
dHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcikKKyAgICBkaXNwYXRjaCg0KQorCitfbGxpbnRf
b3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigp
CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVy
YXRvcikKKyAgICBkaXNwYXRjaCg1KQorCitfbGxpbnRfb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1l
OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9uZXh0
X2VudW1lcmF0b3JfcG5hbWUpCisgICAgZGlzcGF0Y2goNCkKKworX2xsaW50X29wX3RvX2luZGV4
X3N0cmluZzoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3Bh
dGhfdG9faW5kZXhfc3RyaW5nKQorICAgIGRpc3BhdGNoKDMpCiAKICMgTGFzdGx5LCBtYWtlIHN1
cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNv
ZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50
IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuaAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgwLDYgKzEyODAsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEZvckluTm9kZShWTSosIGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERl
Y29uc3RydWN0aW9uUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9kZSosIFN0YXRlbWVudE5vZGUq
KTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQqIHRyeUdldEJvdW5kTG9jYWwo
Qnl0ZWNvZGVHZW5lcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0TG9vcEhlYWRlcihCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHZvaWQgZW1p
dE11bHRpTG9vcEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogZHN0KTsK
KwogICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKICAgICB9OwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxNzEyMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwogICAgIH0KLSAgICBpZiAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKSB7CisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMobW9kZSkpIHsKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNhbGxlZSk7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTIg
QEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB0eXBlZGVmIHZvaWQgKCpHZXRQcm9wZXJ0eU5h
bWVzRnVuY3Rpb25QdHIpKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkm
LCBFbnVtZXJhdGlvbk1vZGUpOwogICAgIEdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0ciBnZXRQ
cm9wZXJ0eU5hbWVzOwogCisgICAgdHlwZWRlZiB1aW50MzJfdCAoKkdldEVudW1lcmFibGVMZW5n
dGhGdW5jdGlvblB0cikoRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKKyAgICBHZXRFbnVtZXJhYmxl
TGVuZ3RoRnVuY3Rpb25QdHIgZ2V0RW51bWVyYWJsZUxlbmd0aDsKKworICAgIEdldFByb3BlcnR5
TmFtZXNGdW5jdGlvblB0ciBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzOworICAgIEdldFByb3Bl
cnR5TmFtZXNGdW5jdGlvblB0ciBnZXRHZW5lcmljUHJvcGVydHlOYW1lczsKKwogICAgIHR5cGVk
ZWYgU3RyaW5nICgqQ2xhc3NOYW1lRnVuY3Rpb25QdHIpKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAg
Q2xhc3NOYW1lRnVuY3Rpb25QdHIgY2xhc3NOYW1lOwogCkBAIC0xMzcsNiArMTQzLDkgQEAgc3Ry
dWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0T3duUHJvcGVydHlOYW1l
cywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMsIFwK
ICAgICAgICAgJkNsYXNzTmFtZTo6Z2V0UHJvcGVydHlOYW1lcywgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRFbnVtZXJhYmxlTGVuZ3RoLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldFN0cnVj
dHVyZVByb3BlcnR5TmFtZXMsIFwKKyAgICAgICAgJkNsYXNzTmFtZTo6Z2V0R2VuZXJpY1Byb3Bl
cnR5TmFtZXMsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y2xhc3NOYW1lLCBcCiAgICAgICAgICZD
bGFzc05hbWU6OmN1c3RvbUhhc0luc3RhbmNlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmRlZmlu
ZU93blByb3BlcnR5LCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU05hbWVTY29wZS5oIgorI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgi
CkBAIC01NDIsNiArNTQzLDEwNSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW50ZXIpCiAg
ICAgRU5EKCk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9s
ZW5ndGgpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpz
VmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
IFJFVFVSTihqc051bWJlcigwKSk7CisKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50
b09iamVjdChleGVjKTsKKyAgICBSRVRVUk4oanNOdW1iZXIoYmFzZS0+bWV0aG9kVGFibGUodm0p
LT5nZXRFbnVtZXJhYmxlTGVuZ3RoKGV4ZWMsIGJhc2UpKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkKK3sKKyAgICBCRUdJTigpOworICAgIEpT
T2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTVmFs
dWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgcGNbNF0udS5hcnJheVByb2ZpbGUt
Pm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0dXJlKHZtKSk7CisgICAgQVNTRVJUKHByb3Bl
cnR5LmlzVUludDMyKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHko
ZXhlYywgcHJvcGVydHkuYXNVSW50MzIoKSkpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU09iamVj
dCogYmFzZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBKU1ZhbHVlIHBy
b3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygp
KTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oT1AoNCkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBp
ZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1
cmVJRCgpKQorICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKKyAgICBSRVRVUk4oanNC
b29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5LmFzQ2VsbCgp
KS0+dG9JZGVudGlmaWVyKGV4ZWMpKSkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
aGFzX2dlbmVyaWNfcHJvcGVydHkpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU09iamVjdCogYmFz
ZSA9IE9QKDIpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5
ID0gT1AoMykuanNWYWx1ZSgpOworICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChwcm9wZXJ0eS5p
c1N0cmluZygpKQorICAgICAgICByZXN1bHQgPSBiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBhc1N0
cmluZyhwcm9wZXJ0eS5hc0NlbGwoKSktPnRvSWRlbnRpZmllcihleGVjKSk7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMigpKTsKKyAgICAgICAgcmVzdWx0ID0g
YmFzZS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkuYXNVSW50MzIoKSk7CisgICAgfQorICAg
IFJFVFVSTihqc0Jvb2xlYW4ocmVzdWx0KSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9nZXRfZGlyZWN0X3BuYW1lKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBPUCgyKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFs
dWUoKTsKKyAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7CisgICAgUkVUVVJOKGJhc2VW
YWx1ZS5nZXQoZXhlYywgcHJvcGVydHkudG9TdHJpbmcoZXhlYyktPnRvSWRlbnRpZmllcihleGVj
KSkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0
eV9lbnVtZXJhdG9yKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBP
UCgyKS5qc1ZhbHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0pKTsKKyAg
ICAgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7Cisg
ICAgdWludDMyX3QgbGVuZ3RoID0gT1AoMykuanNWYWx1ZSgpLmFzVUludDMyKCk7CisKKyAgICBS
RVRVUk4oc3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBiYXNlLCBsZW5ndGgp
KTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIp
LmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgIFJFVFVSTihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSkpOworICAgIAor
ICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIHVpbnQz
Ml90IGxlbmd0aCA9IE9QKDMpLmpzVmFsdWUoKS5hc1VJbnQzMigpOworICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogc3RydWN0dXJlRW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqPihPUCg0KS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworCisgICAgUkVUVVJOKGdl
bmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGV4ZWMsIGJhc2UsIGxlbmd0aCwgc3RydWN0dXJl
RW51bWVyYXRvcikpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV4dF9lbnVtZXJh
dG9yX3BuYW1lKQoreworICAgIEJFR0lOKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDIpLmpz
VmFsdWUoKS5hc0NlbGwoKSk7CisgICAgdWludDMyX3QgaW5kZXggPSBPUCgzKS5qc1ZhbHVlKCku
YXNVSW50MzIoKTsKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJv
cGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3Bl
cnR5TmFtZSA6IGpzTnVsbCgpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX2lu
ZGV4X3N0cmluZykKK3sKKyAgICBCRUdJTigpOworICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tKGV4ZWMsIE9QKDIpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJpbmco
KSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpIHx8
IEVOQUJMRShMTElOVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDYg
KzIyNiwxNSBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CiBTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX3N0cmNhdCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Rv
X3ByaW1pdGl2ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9lbnVtZXJh
YmxlX2xlbmd0aCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19nZW5lcmlj
X3Byb3BlcnR5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhc19pbmRleGVk
X3Byb3BlcnR5KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9w
bmFtZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9zdHJ1Y3R1cmVfcHJv
cGVydHlfZW51bWVyYXRvcik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9n
ZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF90b19pbmRleF9zdHJpbmcpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRW51bWVyYXRpb25Nb2RlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FbnVtZXJhdGlvbk1vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBF
bnVtZXJhdGlvbk1vZGVfaAorI2RlZmluZSBFbnVtZXJhdGlvbk1vZGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworZW51bSBFbnVtZXJhdGlvbk1vZGUgeworICAgIEV4Y2x1ZGVEb250RW51bVByb3Bl
cnRpZXMsCisgICAgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdCwKKyAg
ICBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzLAorICAgIEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXNBbmRTa2lwSlNPYmplY3QKK307CisKK2lubGluZSBib29sIHNob3VsZEluY2x1ZGVEb250RW51
bVByb3BlcnRpZXMoRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAgIGNhc2UgSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJv
b2wgc2hvdWxkRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyhFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEV4Y2x1ZGVEb250RW51bVByb3BlcnRp
ZXM6CisgICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0Ogor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBzaG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5h
bWVzKEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllczoKKyAgICBjYXNlIEV4Y2x1ZGVEb250RW51bVBy
b3BlcnRpZXM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgRXhjbHVkZURvbnRFbnVt
UHJvcGVydGllc0FuZFNraXBKU09iamVjdDoKKyAgICBjYXNlIEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2lubGluZSBFbnVtZXJhdGlvbk1vZGUgbW9kZVRoYXRTa2lwc0pTT2JqZWN0KEVudW1lcmF0aW9u
TW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllczoKKyAgICAgICAgcmV0dXJuIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNB
bmRTa2lwSlNPYmplY3Q7CisgICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAg
ICAgICByZXR1cm4gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDsKKyAg
ICBjYXNlIEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgY2Fz
ZSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgICAgICByZXR1
cm4gbW9kZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRW51
bWVyYXRpb25Nb2RlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0
aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDE0ICsx
MTEsMTQgQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5vbkluZGV4UHJvcGVydAogICAgIEpT
QWN0aXZhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FjdGl2YXRpb24qPihvYmplY3QpOwog
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBDYWxsRnJhbWU6OmNyZWF0ZShyZWludGVycHJl
dF9jYXN0PFJlZ2lzdGVyKj4odGhpc09iamVjdC0+bV9yZWdpc3RlcnMpKTsKLSAgICBpZiAobW9k
ZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzICYmICF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYo
KSAmJiAoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpIHx8IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPnVzZXNFdmFsKCkpKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKG1vZGUpICYmICF0aGlzT2JqZWN0LT5pc1Rvcm5PZmYoKSAmJiAoY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+dXNlc0FyZ3VtZW50cygpIHx8IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPnVzZXNFdmFsKCkpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzKTsKIAogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKICAgICAgICAgU3lt
Ym9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+
ZW5kKGxvY2tlcik7CiAgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQg
PSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVu
dW0gJiYgbW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICAgICAgaWYg
KGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiAhc2hvdWxkSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eS5jcHAJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBKU0Fy
cmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZQogewogICAgIEpTQXJyYXkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7CiAKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKG1vZGUpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoKTsKIAogICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyLmNwcAkocmV2aXNpb24gMTcx
MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIEpTQXJyYXlCdWZmZXI6Omdl
dE93bk5vbkluZGV4UHJvcGVyCiB7CiAgICAgSlNBcnJheUJ1ZmZlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0FycmF5QnVmZmVyKj4ob2JqZWN0KTsKICAgICAKLSAgICBpZiAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKG1vZGUpKQogICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5
dGVMZW5ndGgpOwogICAgIAogICAgIEJhc2U6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0
aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCShyZXZpc2lvbiAxNzEy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIEpTQXJyYXlCdWZmZXJW
aWV3OjpnZXRPd25Ob25JbmRleFByCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihvYmplY3QpOwogICAgIAogICAgIC8vIGxlbmd0
aC9ieXRlT2Zmc2V0L2J5dGVMZW5ndGggYXJlIERvbnRFbnVtLCBhdCBsZWFzdCBpbiBGaXJlZm94
LgotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICBpZiAo
c2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkgewogICAgICAgICBhcnJheS5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVPZmZzZXQpOwogICAgICAgICBhcnJheS5hZGQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmJ5dGVMZW5ndGgpOwogICAgICAgICBhcnJheS5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmJ1ZmZlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5jcHAJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw0ICsyMzYsMTkg
QEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IEpTQ2VsbDo6Z2V0VAogICAgIHJldHVybiAw
OwogfQogCit1aW50MzJfdCBKU0NlbGw6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiwg
SlNPYmplY3QqKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgSlNDZWxsOjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpCit7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldEdlbmVyaWNQcm9wZXJ0
eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkNhbGxE
YXRhLmgiCiAjaW5jbHVkZSAiQ29uc3RydWN0RGF0YS5oIgorI2luY2x1ZGUgIkVudW1lcmF0aW9u
TW9kZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKQEAgLTQ2LDExICs0Nyw2IEBAIGNsYXNzIFByb3BlcnR5RGVzY3Jp
cHRvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogY2xhc3MgU3RydWN0dXJlOwogCi1lbnVt
IEVudW1lcmF0aW9uTW9kZSB7Ci0gICAgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcywKLSAgICBJ
bmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzCi19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
KiBhbGxvY2F0ZUNlbGwoSGVhcCYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCogYWxsb2Nh
dGVDZWxsKEhlYXAmLCBzaXplX3QpOwogCkBAIC0yMDksNiArMjA1LDExIEBAIHByb3RlY3RlZDoK
ICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSk7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJh
eSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0gg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggdWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqLCBKU09iamVjdCop
OworICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0U3RydWN0dXJlUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUo
Y29uc3QgSlNPYmplY3QqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBjdXN0
b21IYXNJbnN0YW5jZShKU09iamVjdCosIEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHN0YXRp
YyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lv
biAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2IKIHZvaWQgSlNGdW5jdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRnVu
Y3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdCk7Ci0gICAgaWYg
KCF0aGlzT2JqZWN0LT5pc0hvc3RPckJ1aWx0aW5GdW5jdGlvbigpICYmIChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMpKSB7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5pc0hvc3RPckJ1
aWx0aW5GdW5jdGlvbigpICYmIHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkp
IHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHBy
b3RvdHlwZSBoYXMgYmVlbiByZWlmaWVkLgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
T2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxNzEy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmcKIHsKICAgICBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dlbmVyaWNUeXBlZEFycmF5Vmlldyo+KG9i
amVjdCk7CiAgICAgCi0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykK
KyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAg
YXJyYXkuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogICAgIAogICAgIEJhc2U6
OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBhcnJheSwgbW9k
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lk
IGdldENsYXNzUHJvcGVydHlOYW1lcwogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
Zm9yIChhdXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4odm0pOyBpdGVyICE9IHRhYmxlLT5lbmQodm0p
OyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICgoIShpdGVyLT5hdHRyaWJ1dGVzKCkgJiBEb250
RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpICYmICEoKGl0ZXIt
PmF0dHJpYnV0ZXMoKSAmIEJ1aWx0aW5PckZ1bmN0aW9uKSAmJiBkaWRSZWlmeSkpCisgICAgICAg
ICAgICBpZiAoKCEoaXRlci0+YXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IHNob3VsZEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpICYmICEoKGl0ZXItPmF0dHJpYnV0ZXMoKSAmIEJ1
aWx0aW5PckZ1bmN0aW9uKSAmJiBkaWRSZWlmeSkpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoaXRlci5rZXkoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjg0LDYgKzEyODQs
MTIgQEAgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKgogICAgIHJldHVy
biBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eVNsb3QoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwogfQogCitib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBQcm9wZXJ0
eVNsb3Qgc2xvdCh0aGlzKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMp
LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisK
IGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSkKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU09iamVjdCo+KGNlbGwpOwpAQCAtMTQ2NCw2ICsxNDcwLDEyIEBAIHZvaWQgSlNPYmpl
Y3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKIAogdm9pZCBKU09iamVjdDo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBpZiAo
IXNob3VsZEluY2x1ZGVKU09iamVjdFByb3BlcnR5TmFtZXMobW9kZSkpIHsKKyAgICAgICAgLy8g
V2Ugc3RpbGwgaGF2ZSB0byBnZXQgbm9uLWluZGV4ZWQgcHJvcGVydGllcyBmcm9tIGFueSBzdWJj
bGFzc2VzIG9mIEpTT2JqZWN0IHRoYXQgaGF2ZSB0aGVtLgorICAgICAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IC8vIEFkZCBudW1lcmljIHByb3BlcnRpZXMgZmlyc3QuIFRoYXQgYXBwZWFycyB0byBiZSB0aGUg
YWNjZXB0ZWQgY29udmVudGlvbi4KICAgICAvLyBGSVhNRTogRmlsbGluZyBQcm9wZXJ0eU5hbWVB
cnJheSB3aXRoIGFuIGlkZW50aWZpZXIgZm9yIGV2ZXJ5IGludGVnZXIKICAgICAvLyBpcyBpbmNy
ZWRpYmx5IGluZWZmaWNpZW50IGZvciBsYXJnZSBhcnJheXMuIFdlIG5lZWQgYSBkaWZmZXJlbnQg
YXBwcm9hY2gsCkBAIC0xNDgwLDcgKzE0OTIsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVu
Z3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0p
CiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0OTIsNyArMTUw
NCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAg
ICAgIGRvdWJsZSB2YWx1ZSA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwogICAg
ICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7
CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xNTAzLDcgKzE1MTUsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqCiAgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5ndGggPSBz
dGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICBpZiAoc3RvcmFnZS0+bV92ZWN0b3JbaV0pCi0gICAgICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlm
IChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZU1hcC5nZXQoKSkg
ewpAQCAtMTUxMiwxMyArMTUyNCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2JqCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1hcC0+ZW5kKCk7CiAgICAgICAgICAgICBmb3IgKFNwYXJz
ZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzIHx8ICEoaXQtPnZhbHVlLmF0dHJpYnV0ZXMgJiBEb250RW51bSkpCisgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkgfHwgIShp
dC0+dmFsdWUuYXR0cmlidXRlcyAmIERvbnRFbnVtKSkKICAgICAgICAgICAgICAgICAgICAga2V5
cy51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGl0LT5rZXkpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgc3RkOjpzb3J0KGtleXMuYmVnaW4o
KSwga2V5cy5lbmQoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGtleXNbaV0pKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChrZXlzW2ldKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNTI2
LDcgKzE1MzgsNyBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
Ci0gICAgCisKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0K
IApAQCAtMTUzNCwxMiArMTU0NiwxMSBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtCiB7CiAgICAgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzKGV4ZWMsIG9iamVjdC0+Y2xh
c3NJbmZvKCksIHByb3BlcnR5TmFtZXMsIG1vZGUsIG9iamVjdC0+c3RhdGljRnVuY3Rpb25zUmVp
ZmllZCgpKTsKIAorICAgIGlmICghc2hvdWxkSW5jbHVkZUpTT2JqZWN0UHJvcGVydHlOYW1lcyht
b2RlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgYm9vbCBjYW5DYWNoZVByb3BlcnRpZXNGcm9tU3RydWN0dXJlID0gIXByb3BlcnR5TmFtZXMu
c2l6ZSgpOwogICAgIG9iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0UHJvcGVydHlOYW1lc0Zyb21T
dHJ1Y3R1cmUodm0sIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotCi0gICAgaWYgKGNhbkNhY2hlUHJv
cGVydGllc0Zyb21TdHJ1Y3R1cmUpCi0gICAgICAgIHByb3BlcnR5TmFtZXMuc2V0TnVtQ2FjaGVh
YmxlU2xvdHNGb3JPYmplY3Qob2JqZWN0LCBwcm9wZXJ0eU5hbWVzLnNpemUoKSk7CiB9CiAKIGRv
dWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdApAQCAtMjY1Miw0
ICsyNjYzLDg1IEBAIEpTT2JqZWN0KiB0aHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMKICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgbWVzc2FnZSkpOwogfQogCit1aW50MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxl
bmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJl
KHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0p
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBzd2l0Y2ggKG9iamVjdC0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9VTkRF
Q0lERURfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICBj
YXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5i
dXR0ZXJmbHkoKTsKKyAgICAgICAgdW5zaWduZWQgdXNlZExlbmd0aCA9IGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VkTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICghYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVzZWRM
ZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1dHRlcmZseSgp
OworICAgICAgICB1bnNpZ25lZCB1c2VkTGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClb
aV07CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVzZWRMZW5ndGg7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAg
ICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG9iamVjdC0+bV9idXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOworICAgICAgICBpZiAoc3RvcmFnZS0+bV9zcGFyc2VNYXAuZ2V0KCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHVzZWRWZWN0b3JMZW5n
dGggPSBzdGQ6Om1pbihzdG9yYWdlLT5sZW5ndGgoKSwgc3RvcmFnZS0+dmVjdG9yTGVuZ3RoKCkp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdXNlZFZlY3Rvckxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBpZiAoIXN0b3JhZ2UtPm1fdmVjdG9yW2ldKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1c2VkVmVjdG9yTGVuZ3Ro
OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIEpTT2Jq
ZWN0OjpnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgb2JqZWN0LT5zdHJ1Y3R1
cmUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlVGhhdFNraXBzSlNPYmplY3QobW9kZSkpOworCisg
ICAgaWYgKG9iamVjdC0+cHJvdG90eXBlKCkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBhc09iamVjdChvYmplY3QtPnByb3RvdHlwZSgpKTsK
KyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAocHJvdG90eXBlLT5zdHJ1Y3R1cmUodm0p
LT50eXBlSW5mbygpLm92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMoKSkgeworICAgICAgICAgICAg
cHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldFByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBl
eGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgICAgIEpTVmFsdWUg
bmV4dFByb3RvID0gcHJvdG90eXBlLT5wcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKG5leHRQcm90
by5pc051bGwoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcm90b3R5cGUgPSBhc09i
amVjdChuZXh0UHJvdG8pOworICAgIH0KK30KKworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTcxMjM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYyLDYgKzQ2Miw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBi
b29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKSBjb25zdDsKKyAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSk7CkBAIC00NzUsNiArNDc2LDEwIEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB1aW50MzJfdCBn
ZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsK
KwogICAgIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZl
VHlwZSA9IE5vUHJlZmVyZW5jZSkgY29uc3Q7CiAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmKSBjb25zdDsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiU3Ryb25nSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6c19pbmZvID0geyAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IpIH07CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtKQoreworICAgIGlmICghdm0uZW1wdHlQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmdldCgpKSB7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5
TmFtZXMoJnZtKTsKKyAgICAgICAgdm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yID0gU3Ry
b25nPEpTQ2VsbD4odm0sIGNyZWF0ZSh2bSwgMCwgcHJvcGVydHlOYW1lcykpOworICAgIH0KKyAg
ICByZXR1cm4ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KHZtLmVtcHR5UHJvcGVy
dHlOYW1lRW51bWVyYXRvci5nZXQoKSk7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCit7CisgICAgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwOworICAgIHVp
bnQzMl90IGlubGluZUNhcGFjaXR5ID0gc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpIDogMDsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBu
ZXcgKE5vdE51bGwsIAorICAgICAgICBhbGxvY2F0ZUNlbGw8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yPih2bS5oZWFwKSkgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBzdHJ1Y3R1cmVJRCwg
aW5saW5lQ2FwYWNpdHksIHByb3BlcnR5TmFtZXMuaWRlbnRpZmllclNldCgpKTsKKyAgICBlbnVt
ZXJhdG9yLT5maW5pc2hDcmVhdGlvbih2bSwgcHJvcGVydHlOYW1lcy5kYXRhKCkpOworICAgIHJl
dHVybiBlbnVtZXJhdG9yOworfQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCB1aW50MzJf
dCBpbmxpbmVDYXBhY2l0eSwgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqIHNldCkKKyAgICA6IEpT
Q2VsbCh2bSwgdm0ucHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5nZXQoKSkKKyAgICAs
IG1faWRlbnRpZmllclNldChzZXQpCisgICAgLCBtX2NhY2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVy
ZUlEKQorICAgICwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKK3sKK30K
Kwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
UGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IGlkZW50cykKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiBp
ZGVudGlmaWVycyA9IGlkZW50czsKKyAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5
TmFtZVZlY3RvciYgdmVjdG9yID0gaWRlbnRpZmllcnMtPnByb3BlcnR5TmFtZVZlY3RvcigpOwor
ICAgIG1fcHJvcGVydHlOYW1lcy5yZXNpemUodmVjdG9yLnNpemUoKSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyID0gdmVjdG9yW2ldOworICAgICAgICBtX3Byb3BlcnR5TmFtZXNb
aV0uc2V0KHZtLCB0aGlzLCBqc1N0cmluZygmdm0sIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oY2VsbCktPkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6fkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworfQor
Cit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2Vs
bCwgdmlzaXRvcik7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGNlbGwpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5TmFtZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5TmFtZXNbaV0pOwor
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3RvdHlwZUNoYWluKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaAorI2RlZmluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3JfaAorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBJZGVudGlmaWVyOworCitjbGFzcyBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2Vs
bCBCYXNlOworCisgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY3JlYXRlKFZN
Jik7CisgICAgc3RhdGljIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKKworICAgIHN0YXRpYyBjb25zdCBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFs
U3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CisKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lQXRJbmRleCh1aW50
MzJfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBtX3Byb3BlcnR5
TmFtZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBtX3Byb3BlcnR5TmFtZXNbaW5kZXhdLmdldCgpOworICAgIH0KKworICAgIFJlZkNvdW50ZWRJ
ZGVudGlmaWVyU2V0KiBpZGVudGlmaWVyU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2lkZW50aWZpZXJTZXQuZ2V0KCk7CisgICAgfQorCisgICAgU3RydWN0dXJlQ2hhaW4qIGNh
Y2hlZFByb3RvdHlwZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGVDaGFpbi5nZXQo
KTsgfQorICAgIHZvaWQgc2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4oVk0mIHZtLCBTdHJ1Y3R1cmVD
aGFpbiogcHJvdG90eXBlQ2hhaW4pIHsgcmV0dXJuIG1fcHJvdG90eXBlQ2hhaW4uc2V0KHZtLCB0
aGlzLCBwcm90b3R5cGVDaGFpbik7IH0KKworICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJl
KFZNJiB2bSkgY29uc3QgeyByZXR1cm4gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG1f
Y2FjaGVkU3RydWN0dXJlSUQpOyB9CisgICAgU3RydWN0dXJlSUQgY2FjaGVkU3RydWN0dXJlSUQo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFN0cnVjdHVyZUlEOyB9CisgICAgdWludDMyX3QgY2Fj
aGVkSW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZElubGluZUNhcGFjaXR5
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkU3Ry
dWN0dXJlSUQpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Is
IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRQ
cm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpICsgVmVj
dG9yPFdyaXRlQmFycmllcjxKU1N0cmluZz4+OjpzaXplTWVtb3J5T2Zmc2V0KCk7CisgICAgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpCisg
ICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciwgbV9wcm9wZXJ0eU5hbWVzKSArIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Pjo6
ZGF0YU1lbW9yeU9mZnNldCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVy
ZUlzSW1tb3J0YWwgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuOworCisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKFZNJiwgU3RydWN0dXJlSUQsIHVpbnQzMl90LCBSZWZDb3VudGVkSWRlbnRp
ZmllclNldCopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBQYXNzUmVmUHRyPFByb3Bl
cnR5TmFtZUFycmF5RGF0YT4pOworCisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU1N0cmluZz4+
IG1fcHJvcGVydHlOYW1lczsKKyAgICBSZWZQdHI8UmVmQ291bnRlZElkZW50aWZpZXJTZXQ+IG1f
aWRlbnRpZmllclNldDsKKyAgICBTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0cnVjdHVyZUlEOworICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFpbjsKKyAgICB1aW50
MzJfdCBtX2NhY2hlZElubGluZUNhcGFjaXR5OworfTsKKworaW5saW5lIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogc3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCBsZW5ndGgpCit7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7
CisgICAgaWYgKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IHN0cnVjdHVy
ZS0+Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAgICAgICByZXR1
cm4gZW51bWVyYXRvcjsKKworICAgIGlmICghc3RydWN0dXJlLT5jYW5BY2Nlc3NQcm9wZXJ0aWVz
UXVpY2tseSgpIHx8IGxlbmd0aCAhPSBiYXNlLT5nZXRBcnJheUxlbmd0aCgpKQorICAgICAgICBy
ZXR1cm4gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0pOworCisgICAgUHJvcGVy
dHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjKTsKKyAgICBiYXNlLT5tZXRob2RUYWJsZSh2
bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywg
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNoZVN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgc3RydWN0dXJlLT5zZXRDYWNo
ZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBlbnVtZXJhdG9yKTsKKyAgICBy
ZXR1cm4gZW51bWVyYXRvcjsKK30KKworaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
Z2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
YmFzZSwgdWludDMyX3QgbGVuZ3RoLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHN0cnVjdHVy
ZUVudW1lcmF0b3IpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IHN0cnVjdHVyZS0+Y2FjaGVkR2VuZXJpY1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSkgeworICAgICAgICBpZiAoIWxlbmd0aCAmJiBlbnVtZXJhdG9yLT5j
YWNoZWRQcm90b3R5cGVDaGFpbigpID09IHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYykp
CisgICAgICAgICAgICByZXR1cm4gZW51bWVyYXRvcjsKKyAgICB9CisKKyAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOworICAgIHByb3BlcnR5TmFtZXMuc2V0UHJldmlv
dXNseUVudW1lcmF0ZWRMZW5ndGgobGVuZ3RoKTsKKyAgICBwcm9wZXJ0eU5hbWVzLnNldFByZXZp
b3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKKworICAgIC8v
IElmIHdlIHN0aWxsIGhhdmUgdGhlIHNhbWUgU3RydWN0dXJlIHRoYXQgd2Ugc3RhcnRlZCB3aXRo
LCBvdXIgU3RydWN0dXJlIGFsbG93cyB1cyB0byBhY2Nlc3MgaXRzIHByb3BlcnRpZXMgCisgICAg
Ly8gcXVpY2tseSAoaS5lLiB0aGUgU3RydWN0dXJlIHByb3BlcnR5IGxvb3Agd2FzIGFibGUgdG8g
ZG8gdGhpbmdzKSwgYW5kIHdlIGl0ZXJhdGVkIHRoZSBmdWxsIGxlbmd0aCBvZiB0aGUgCisgICAg
Ly8gb2JqZWN0IChpLmUuIHRoZXJlIGFyZSBubyBtb3JlIG93biBpbmRleGVkIHByb3BlcnRpZXMg
dGhhdCBuZWVkIHRvIGJlIGVudW1lcmF0ZWQpLCB0aGVuIHRoZSBnZW5lcmljIHByb3BlcnR5IAor
ICAgIC8vIGl0ZXJhdGlvbiBjYW4gc2tpcCBhbnkgcHJvcGVydGllcyBpdCB3b3VsZCBnZXQgZnJv
bSB0aGUgSlNPYmplY3QgYmFzZSBjbGFzcy4gVGhpcyB0dXJucyBvdXQgdG8gYmUgaW1wb3J0YW50
IAorICAgIC8vIGZvciBob3QgbG9vcHMgYmVjYXVzZSBtb3N0IG9mIG91ciB0aW1lIGlzIHRoZW4g
ZG9taW5hdGVkIGJ5IHRyeWluZyB0byBhZGQgdGhlIG93biBTdHJ1Y3R1cmUgcHJvcGVydGllcyB0
byAKKyAgICAvLyB0aGUgbmV3IGdlbmVyaWMgUHJvcGVydHlOYW1lQXJyYXkgYW5kIGZhaWxpbmcg
YmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlbS4KKyAgICBTdHJ1Y3R1cmUqIGNhY2hl
ZFN0cnVjdHVyZSA9IHN0cnVjdHVyZUVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZSh2bSk7Cisg
ICAgaWYgKHN0cnVjdHVyZSA9PSBjYWNoZWRTdHJ1Y3R1cmUgJiYgc3RydWN0dXJlLT5jYW5BY2Nl
c3NQcm9wZXJ0aWVzUXVpY2tseSgpICYmIHN0YXRpY19jYXN0PHVpbnQzMl90PihsZW5ndGgpID09
IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkpCisgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVk
ZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgZWxzZQorICAgICAgICBiYXNlLT5tZXRob2RUYWJs
ZSh2bSktPmdldFByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRXhjbHVk
ZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgCisgICAgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4o
ZXhlYywgYmFzZSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3Ig
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgYmFzZS0+c3RydWN0dXJlKHZt
KSwgcHJvcGVydHlOYW1lcyk7CisgICAgZW51bWVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hh
aW4odm0sIHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYykpOworICAgIGlmICghbGVuZ3Ro
ICYmIHN0cnVjdHVyZS0+Y2FuQ2FjaGVHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQor
ICAgICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KHZtLCBlbnVtZXJhdG9yKTsKKyAgICByZXR1cm4gZW51bWVyYXRvcjsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJKHJldmlzaW9uIDE3MTIz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNiArMTE4LDI0IEBAIHZvaWQgSlNQcm94eTo6Z2V0UHJvcGVydHlOYW1l
cyhKU09iamVjdCoKICAgICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+
dm0oKSktPmdldFByb3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwogfQogCit1aW50MzJfdCBKU1Byb3h5OjpnZXRFbnVtZXJhYmxlTGVu
Z3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU1Byb3h5KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3QpOworICAgIHJldHVybiB0aGlzT2Jq
ZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldEVudW1lcmFibGVMZW5n
dGgoZXhlYywgdGhpc09iamVjdC0+dGFyZ2V0KCkpOworfQorCit2b2lkIEpTUHJveHk6OmdldFN0
cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7
CisgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKKyAg
ICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldFN0cnVj
dHVyZVByb3BlcnR5TmFtZXModGhpc09iamVjdC0+dGFyZ2V0KCksIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOworfQorCit2b2lkIEpTUHJveHk6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTUHJveHkqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7CisgICAgdGhpc09iamVjdC0+dGFyZ2V0KCkt
Pm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LT50YXJnZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKIHZvaWQgSlNQ
cm94eTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKICAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUHJveHkqPihvYmplY3Qp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuaAkocmV2aXNpb24g
MTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Myw2ICs4Myw5IEBAIHByb3RlY3RlZDoKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0UHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdWludDMyX3QgZ2V0
RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqLCBKU09iamVjdCopOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9u
IDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgSlNTeW1ib2xU
YWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXgKICAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFw
OjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKGl0LT5rZXktPmlzRW1wdHlVbmlx
dWUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghKGl0LT52
YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcykpCisgICAgICAgICAgICBpZiAoIShpdC0+dmFsdWUuZ2V0QXR0cmlidXRl
cygpICYgRG9udEVudW0pIHx8IHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkp
CiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+
a2V5LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuY3BwCShyZXZpc2lvbiAxNzEy
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDMzICsyMywzMiBAQAogCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
Q2hhaW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBzaXplX3Qgc2V0VGhy
ZXNob2xkID0gMjA7Ci0KIHZvaWQgUHJvcGVydHlOYW1lQXJyYXk6OmFkZChTdHJpbmdJbXBsKiBp
ZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghaWRlbnRpZmllciB8fCBpZGVudGlmaWVyID09IFN0
cmluZ0ltcGw6OmVtcHR5KCkgfHwgaWRlbnRpZmllci0+aXNBdG9taWMoKSk7Ci0KLSAgICBzaXpl
X3Qgc2l6ZSA9IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCkuc2l6ZSgpOwotICAgIGlmIChz
aXplIDwgc2V0VGhyZXNob2xkKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBtX2RhdGEtPnByb3BlcnR5
TmFtZVZlY3RvcigpW2ldLmltcGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9zZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgICAgICBt
X3NldC5hZGQobV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXS5pbXBsKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghbV9zZXQuYWRkKGlkZW50aWZpZXIpLmlzTmV3RW50cnkpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgdWlu
dDMyX3QgaW5kZXggPSBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcihtX3ZtLCBpZGVudGlmaWVyKSku
YXNJbmRleCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCBpbmRleCA9PSBQcm9wZXJ0
eU5hbWU6Ok5vdEFuSW5kZXggfHwgaW5kZXggPj0gbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0
aCk7CiAgICAgfQogCisgICAgaWYgKG1fYWx0ZXJuYXRlU2V0ICYmIG1fYWx0ZXJuYXRlU2V0LT5j
b250YWlucyhpZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3NldC0+
YWRkKGlkZW50aWZpZXIpLmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybjsKKwogICAgIGFkZEtu
b3duVW5pcXVlKGlkZW50aWZpZXIpOwogfQogCit2b2lkIFByb3BlcnR5TmFtZUFycmF5OjpzZXRQ
cmV2aW91c2x5RW51bWVyYXRlZFByb3BlcnRpZXMoY29uc3QgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yKQoreworICAgIG1fYWx0ZXJuYXRlU2V0ID0gZW51bWVyYXRvci0+aWRl
bnRpZmllclNldCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24g
MTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJy
YXkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAgICAgCisgICAgY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogICAgIGNsYXNzIFN0
cnVjdHVyZTsKICAgICBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIAorICAgIGNsYXNzIFJlZkNvdW50
ZWRJZGVudGlmaWVyU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8UmVmQ291bnRlZElkZW50aWZpZXJT
ZXQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgSGFzaFNldDxTdHJpbmdJbXBsKiwg
UHRySGFzaDxTdHJpbmdJbXBsKj4+IFNldDsKKworICAgICAgICBib29sIGNvbnRhaW5zKFN0cmlu
Z0ltcGwqIGltcGwpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKGltcGwpOyB9CisgICAg
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgIHsgcmV0dXJuIG1fc2V0LnNpemUoKTsgfQorICAgICAg
ICBTZXQ6OkFkZFJlc3VsdCBhZGQoU3RyaW5nSW1wbCogaW1wbCkgeyByZXR1cm4gbV9zZXQuYWRk
KGltcGwpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTZXQgbV9zZXQ7CisgICAgfTsKKwog
ICAgIC8vIEZJWE1FOiBSZW5hbWUgdG8gUHJvcGVydHlOYW1lQXJyYXkuCiAgICAgY2xhc3MgUHJv
cGVydHlOYW1lQXJyYXlEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UHJvcGVydHlOYW1lQXJyYXlE
YXRhPiB7CiAgICAgcHVibGljOgpAQCAtNTMsMjUgKzY2LDQwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIHB1YmxpYzoKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkoVk0qIHZtKQogICAgICAgICAg
ICAgOiBtX2RhdGEoUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpjcmVhdGUoKSkKKyAgICAgICAgICAg
ICwgbV9zZXQoYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRJZGVudGlmaWVyU2V0KSkKICAgICAgICAg
ICAgICwgbV92bSh2bSkKICAgICAgICAgICAgICwgbV9udW1DYWNoZWFibGVTbG90cygwKQogICAg
ICAgICAgICAgLCBtX2Jhc2VPYmplY3QoMCkKKyAgICAgICAgICAgICwgbV9wcmV2aW91c2x5RW51
bWVyYXRlZExlbmd0aCgwKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBQcm9wZXJ0
eU5hbWVBcnJheShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICA6IG1fZGF0YShQcm9wZXJ0
eU5hbWVBcnJheURhdGE6OmNyZWF0ZSgpKQorICAgICAgICAgICAgLCBtX3NldChhZG9wdFJlZihu
ZXcgUmVmQ291bnRlZElkZW50aWZpZXJTZXQpKQogICAgICAgICAgICAgLCBtX3ZtKCZleGVjLT52
bSgpKQogICAgICAgICAgICAgLCBtX251bUNhY2hlYWJsZVNsb3RzKDApCiAgICAgICAgICAgICAs
IG1fYmFzZU9iamVjdCgwKQorICAgICAgICAgICAgLCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVu
Z3RoKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFZNKiB2bSgpIHsgcmV0dXJu
IG1fdm07IH0KIAorICAgICAgICB2b2lkIGFkZCh1aW50MzJfdCBpbmRleCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGluZGV4IDwgbV9wcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhZGQoSWRlbnRpZmllcjo6ZnJvbSht
X3ZtLCBpbmRleCkpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBhZGQoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllcikgeyBhZGQoaWRlbnRpZmllci5pbXBsKCkpOyB9CiAgICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkKFN0cmluZ0ltcGwqKTsKLSAgICAgICAgdm9pZCBhZGRL
bm93blVuaXF1ZShTdHJpbmdJbXBsKiBpZGVudGlmaWVyKSB7IG1fZGF0YS0+cHJvcGVydHlOYW1l
VmVjdG9yKCkuYXBwZW5kKElkZW50aWZpZXIobV92bSwgaWRlbnRpZmllcikpOyB9CisgICAgICAg
IHZvaWQgYWRkS25vd25VbmlxdWUoU3RyaW5nSW1wbCogaWRlbnRpZmllcikKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9zZXQtPmFkZChpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIG1fZGF0YS0+
cHJvcGVydHlOYW1lVmVjdG9yKCkuYXBwZW5kKElkZW50aWZpZXIobV92bSwgaWRlbnRpZmllcikp
OworICAgICAgICB9CiAKICAgICAgICAgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKVtpXTsgfQpAQCAtODAsNyArMTA4LDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheURhdGEqIGRhdGEoKSB7IHJldHVy
biBtX2RhdGEuZ2V0KCk7IH0KICAgICAgICAgUGFzc1JlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURh
dGE+IHJlbGVhc2VEYXRhKCkgeyByZXR1cm4gbV9kYXRhLnJlbGVhc2UoKTsgfQogCisgICAgICAg
IFJlZkNvdW50ZWRJZGVudGlmaWVyU2V0KiBpZGVudGlmaWVyU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zZXQuZ2V0KCk7IH0KKwogICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGZ1bmN0aW9u
cy4KKyAgICAgICAgYm9vbCBjYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpIGNvbnN0IHsg
cmV0dXJuICFtX3NldC0+c2l6ZSgpICYmICghbV9hbHRlcm5hdGVTZXQgfHwgIW1fYWx0ZXJuYXRl
U2V0LT5zaXplKCkpOyB9CiAgICAgICAgIHR5cGVkZWYgUHJvcGVydHlOYW1lQXJyYXlEYXRhOjpQ
cm9wZXJ0eU5hbWVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9y
KCkuc2l6ZSgpOyB9CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5iZWdpbigpOyB9CkBAIC0xMDAsMTQgKzEz
MSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fYmFzZU9iamVjdCA9IG9iamVj
dDsKICAgICAgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFN0
cmluZ0ltcGwqLCBQdHJIYXNoPFN0cmluZ0ltcGwqPj4gSWRlbnRpZmllclNldDsKKyAgICAgICAg
dm9pZCBzZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCh1aW50MzJfdCBsZW5ndGgpIHsgbV9w
cmV2aW91c2x5RW51bWVyYXRlZExlbmd0aCA9IGxlbmd0aDsgfQorICAgICAgICB2b2lkIHNldFBy
ZXZpb3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhjb25zdCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqKTsKIAorICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURh
dGE+IG1fZGF0YTsKLSAgICAgICAgSWRlbnRpZmllclNldCBtX3NldDsKKyAgICAgICAgUmVmUHRy
PFJlZkNvdW50ZWRJZGVudGlmaWVyU2V0PiBtX3NldDsKKyAgICAgICAgUmVmUHRyPFJlZkNvdW50
ZWRJZGVudGlmaWVyU2V0PiBtX2FsdGVybmF0ZVNldDsKICAgICAgICAgVk0qIG1fdm07CiAgICAg
ICAgIHNpemVfdCBtX251bUNhY2hlYWJsZVNsb3RzOwogICAgICAgICBKU09iamVjdCogbV9iYXNl
T2JqZWN0OworICAgICAgICB1aW50MzJfdCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksMTggKzEwOSwyNSBAQCBib29sIFJlZ0V4cE9iamVjdDo6ZGVsZXRlUHJvcGVydHko
SlNDZWxsCiAKIHZvaWQgUmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcyhtb2RlKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxhc3RJbmRleCk7CiAgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKIHZvaWQgUmVnRXhwT2Jq
ZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
ewotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNo
b3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgIHByb3BlcnR5TmFt
ZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOwogICAgIEJhc2U6OmdldFBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAordm9p
ZCBSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKG1vZGUpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGFzdEluZGV4KTsKKyAgICBCYXNlOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCiBzdGF0aWMgYm9vbCByZWplY3QoRXhl
Y1N0YXRlKiBleGVjLCBib29sIHRocm93RXhjZXB0aW9uLCBjb25zdCBjaGFyKiBtZXNzYWdlKQog
ewogICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
MTMgKzc3LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBS
ZWdFeHBPYmplY3QoVk0mLCBTdHJ1Y3R1cmUqLCBSZWdFeHAqKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCi0gICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
QXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgdm9pZCBnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpOwogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDcgKzE1MCw3IEBAIHZvaWQgU3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEoK
ICAgICBpbnQgc2l6ZSA9IHRoaXNPYmplY3QtPmludGVybmFsVmFsdWUoKS0+bGVuZ3RoKCk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOwotICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXMobW9kZSkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpOwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgog
I2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAj
aW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKQEAgLTk1NiwxMiArOTU2LDEyIEBAIHZvaWQg
U3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnUKICAgICBpZiAoIXByb3BlcnR5VGFi
bGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBrbm93blVuaXF1ZSA9ICFwcm9wZXJ0
eU5hbWVzLnNpemUoKTsKKyAgICBib29sIGtub3duVW5pcXVlID0gcHJvcGVydHlOYW1lcy5jYW5B
ZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpOwogCiAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKICAgICAgICAgQVNTRVJUKGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkgfHwg
IShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKLSAgICAgICAgaWYgKCFpdGVyLT5rZXkt
PmlzRW1wdHlVbmlxdWUoKSAmJiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKKyAgICAgICAgaWYgKCFpdGVyLT5r
ZXktPmlzRW1wdHlVbmlxdWUoKSAmJiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pIHx8
IHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpKSB7CiAgICAgICAgICAgICBp
ZiAoa25vd25VbmlxdWUpCiAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGRLbm93blVu
aXF1ZShpdGVyLT5rZXkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMTIyMyw0ICsxMjIzLDc0IEBA
IGJvb2wgQ2xhc3NJbmZvOjpoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmwKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjpzZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQor
eworICAgIEFTU0VSVCghaXNEaWN0aW9uYXJ5KCkpOworICAgIGlmICghaGFzUmFyZURhdGEoKSkK
KyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgcmFyZURhdGEoKS0+c2V0Q2FjaGVk
U3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSwgZW51bWVyYXRvcik7Cit9CisKK0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlOjpjYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiByYXJlRGF0YSgpLT5jYWNoZWRTdHJ1Y3R1
cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlOjpzZXRDYWNo
ZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0sIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvcikKK3sKKyAgICBBU1NFUlQoIWlzRGljdGlvbmFyeSgpKTsKKyAg
ICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOworICAg
IHJhcmVEYXRhKCktPnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtLCBl
bnVtZXJhdG9yKTsKK30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmU6OmNh
Y2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWhh
c1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiByYXJlRGF0
YSgpLT5jYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworfQorCitib29sIFN0
cnVjdHVyZTo6Y2FuQ2FjaGVTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHJ1Y3R1cmU6OmNhbkNhY2hlR2VuZXJpY1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmICghY2FuQ2FjaGVTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICho
YXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiA9IG1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4uZ2V0KCk7CisgICAgQVNTRVJUKHN0cnVjdHVyZUNoYWluKTsKKyAgICBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPiogc3RydWN0dXJlID0gc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsKKyAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+Z2V0KCkpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Z2V0KCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzdHJ1Y3R1cmUrKzsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBT
dHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgY29uc3QKK3sKKyAgICBpZiAo
aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChoYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzEyMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgzLDYgKzI4MywxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEVudW1lcmF0aW9u
Q2FjaGUoVk0mLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKTsgLy8g
RGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCiAgICAgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaC4KKworICAgIHZvaWQgc2V0Q2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51
bWVyYXRvcihWTSYsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOworICAgIHZvaWQgc2V0Q2Fj
aGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNhY2hlZFN0cnVjdHVyZVBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgYm9v
bCBjYW5DYWNoZVN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKyAgICBi
b29sIGNhbkNhY2hlR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKyAgICBi
b29sIGNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgY29uc3Q7CisKICAgICB2b2lkIGdldFBy
b3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJh
dGlvbk1vZGUpOwogCiAgICAgSlNTdHJpbmcqIG9iamVjdFRvU3RyaW5nVmFsdWUoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGEuaCIKIAorI2lu
Y2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKQEAgLTY4LDYgKzY5LDI4IEBAIHZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hp
bGRyZW4oSlMKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2aW91cyk7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fb2JqZWN0VG9TdHJpbmdWYWx1ZSk7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZW51bWVyYXRpb25DYWNoZSk7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1l
RW51bWVyYXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkR2Vu
ZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOworfQorCitKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIFN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmdldCgpOworfQorCit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIG1fY2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1l
RW51bWVyYXRvci5zZXQodm0sIHRoaXMsIGVudW1lcmF0b3IpOworfQorCitKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIFN0cnVjdHVyZVJhcmVEYXRhOjpjYWNoZWRHZW5lcmljUHJvcGVydHlOYW1l
RW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FjaGVkR2VuZXJpY1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuZ2V0KCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OnNldENh
Y2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIG1fY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3Iuc2V0KHZtLCB0aGlzLCBlbnVtZXJhdG9yKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmgJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjsKIGNsYXNzIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I7CiBjbGFzcyBTdHJ1Y3R1cmU7CiAKQEAg
LTYxLDYgKzYyLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKCkgY29uc3Q7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBjYWNo
ZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OworICAgIHZvaWQgc2V0Q2Fj
aGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciopOworICAgIHZvaWQgc2V0Q2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IoVk0mLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKTsKKwogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgU3RydWN0dXJlOwogICAgIApAQCAtNzEsNiArNzcsOCBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7CiAgICAgV3JpdGVCYXJyaWVyPEpT
U3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsKKyAgICBXcml0ZUJhcnJpZXI8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yPiBtX2NhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1l
cmF0b3I7CisgICAgV3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcj4gbV9jYWNo
ZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKICAgICAKICAgICB0eXBlZGVmIEhhc2hN
YXA8UHJvcGVydHlPZmZzZXQsIFJlZlB0cjxXYXRjaHBvaW50U2V0PiwgV1RGOjpJbnRIYXNoPFBy
b3BlcnR5T2Zmc2V0PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxQcm9wZXJ0
eU9mZnNldD4+IFByb3BlcnR5V2F0Y2hwb2ludE1hcDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJv
cGVydHlXYXRjaHBvaW50TWFwPiBtX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYg
KzY0LDcgQEAKICNpbmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNQcm9taXNl
RGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1Byb21pc2VSZWFjdGlvbi5oIgorI2luY2x1ZGUgIkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxleGVyLmgiCkBAIC0y
NTgsNiArMjU5LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgIHN0cmluZ1N0cnVjdHVyZS5zZXQoKnRoaXMsIEpTU3RyaW5nOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgbm90QW5PYmplY3RTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBKU05vdEFuT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgcHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcHJv
cGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGdldHRl
clNldHRlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEdldHRlclNldHRlcjo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGFwaVdyYXBwZXJTdHJ1Y3R1cmUuc2V0KCp0aGlz
LCBKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIEpTU2NvcGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Njb3BlOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw2ICsyNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gc3RyaW5nU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8
U3RydWN0dXJlPiBub3RBbk9iamVjdFN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVy
ZT4gcHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGdldHRlclNldHRlclN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
YXBpV3JhcHBlclN0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gSlNTY29wZVN0
cnVjdHVyZTsKQEAgLTI5MSw2ICsyOTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3Ry
b25nPFN0cnVjdHVyZT4gcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlOwogI2VuZGlmCiAgICAgICAg
IFN0cm9uZzxKU0NlbGw+IGl0ZXJhdGlvblRlcm1pbmF0b3I7CisgICAgICAgIFN0cm9uZzxKU0Nl
bGw+IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAogICAgICAgICBBdG9taWNTdHJpbmdU
YWJsZSogbV9hdG9taWNTdHJpbmdUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHBy
b3BlcnR5TmFtZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzEyMzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxNC0w
Ny0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggc3BsaXRzIGZvci1pbiBsb29wcyBpbnRvIHRocmVlIGRpc3RpbmN0
IHBhcnRzOgorCisgICAgICAgIC0gSXRlcmF0aW5nIG92ZXIgdGhlIGluZGV4ZWQgcHJvcGVydGll
cyBpbiB0aGUgYmFzZSBvYmplY3QuCisgICAgICAgIC0gSXRlcmF0aW5nIG92ZXIgdGhlIFN0cnVj
dHVyZSBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9iamVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcg
b3ZlciBhbnkgb3RoZXIgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGZvciB0aGF0IG9iamVjdCBhbmQg
YW55IG9iamVjdHMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbi4KKyAKKyAgICAgICAgSXQgZG9lcyB0
aGlzIGJ5IGVtaXR0aW5nIHRoZXNlIGV4cGxpY2l0IGxvb3BzIGluIGJ5dGVjb2RlLCB1c2luZyBh
IG5ldyBzZXQgb2YgYnl0ZWNvZGVzIHRvIAorICAgICAgICBzdXBwb3J0IHRoZSB2YXJpb3VzIG9w
ZXJhdGlvbnMgcmVxdWlyZWQgZm9yIGVhY2ggbG9vcC4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpn
ZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpn
ZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgICogYnJp
ZGdlL3J1bnRpbWVfYXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lQXJyYXk6OmdldE93
blByb3BlcnR5TmFtZXMpOgorCiAyMDE0LTA3LTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBEZWJ1Z2dlckNhbGxGcmFtZTo6c2NvcGUoKSBzaG91
bGQgcmV0dXJuIGEgRGVidWdnZXJTY29wZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDE3MTIzOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgxLDYgKzM4MSwzMyBAQCBib29sIEpTRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoCiAgICAgcmV0dXJuIEJhc2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwogfQogCit1aW50MzJfdCBKU0RPTVdpbmRvdzo6Z2V0
RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3Qp
OworICAgIC8vIE9ubHkgYWxsb3cgdGhlIHdpbmRvdyB0byBlbnVtZXJhdGVkIGJ5IGZyYW1lcyBp
biB0aGUgc2FtZSBvcmlnaW4uCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIEJhc2U6OmdldEVudW1lcmFibGVMZW5ndGgoZXhlYywgdGhpc09i
amVjdCk7Cit9CisKK3ZvaWQgSlNET01XaW5kb3c6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMo
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNET01XaW5kb3cqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmplY3QpOworICAgIC8vIE9ubHkgYWxs
b3cgdGhlIHdpbmRvdyB0byBlbnVtZXJhdGVkIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4u
CisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3co
ZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIEJhc2U6Omdl
dFN0cnVjdHVyZVByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywg
bW9kZSk7Cit9CisKK3ZvaWQgSlNET01XaW5kb3c6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTRE9NV2luZG93KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKKyAgICAvLyBPbmx5IGFsbG93
IHRoZSB3aW5kb3cgdG8gZW51bWVyYXRlZCBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgor
ICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGV4
ZWMsIHRoaXNPYmplY3QtPmltcGwoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBCYXNlOjpnZXRH
ZW5lcmljUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKK30KKwogdm9pZCBKU0RPTVdpbmRvdzo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTcxMjM4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdv
cmtpbmcgY29weSkKQEAgLTk3Miw2ICs5NzIsOSBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAj
IEN1c3RvbSBnZXRQcm9wZXJ0eU5hbWVzIGZ1bmN0aW9uIGV4aXN0cyBvbiBET01XaW5kb3cKICAg
ICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTtcbiIpOwor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSBtb2RlID0gSlNDOjpFeGNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyB2b2lkIGdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpO1xuIik7CisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVM
ZW5ndGgoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0Kik7XG4iKTsKICAgICAgICAgJHN0
cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMifSA9IDE7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lv
biAxNzEyMzgpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBSdW50aW1lQXJyYXk6OmdldE93blBy
b3BlcnR5TmFtZXMoSgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CiAK
LSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91
bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKIAogICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMTcxMjM4KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw3ICs5MCw2IEBAIHZvaWQgSlNOUE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCiB2b2lkIEpTTlBPYmplY3Q6OmludmFsaWRhdGUoKQogewogICAgIEFTU0VSVChtX25wT2Jq
ZWN0KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsIGluZm8oKSk7CiAKICAg
ICByZWxlYXNlTlBPYmplY3QobV9ucE9iamVjdCk7CiAgICAgbV9ucE9iamVjdCA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235400</attachid>
            <date>2014-07-23 18:20:33 -0700</date>
            <delta_ts>2014-07-24 16:24:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134142-20140723182018.patch</filename>
            <type>text/plain</type>
            <size>225142</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxNTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2NCBA
QAorMjAxNC0wNy0yMyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBzcGxpdHMgZm9yLWluIGxvb3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAg
ICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9i
amVjdC4KKyAgICAgICAgLSBJdGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMg
aW4gdGhlIGJhc2Ugb2JqZWN0LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBl
bnVtZXJhYmxlIHByb3BlcnRpZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0
aGUgcHJvdG90eXBlIGNoYWluLgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcg
dGhlc2UgZXhwbGljaXQgbG9vcHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRl
Y29kZXMgdG8gCisgICAgICAgIHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJl
ZCBmb3IgZWFjaCBsb29wLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdDxQYXJlbnQ+OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmg6CisgICAg
ICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0Q29tcGxleFBvcFNjb3Blcyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SGFzR2VuZXJpY1Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5leHRFbnVtZXJhdG9y
UHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0lu
ZGV4U3RyaW5nKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVk
Rm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVk
Rm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0
dXJlRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1
Y3R1cmVGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmludmFs
aWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0
KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojp+Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
OjppbnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6U3RydWN0dXJlRm9ySW5Db250ZXh0KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0Ojp0eXBlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjppbmRleCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZUZvckluQ29udGV4dDo6cHJvcGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0OjpJ
bmRleGVkRm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6
dHlwZSk6CisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hPcHRpbWlzZWRGb3JJbik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpbWlzZWRGb3JJbik6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAg
IChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvcklu
Tm9kZTo6dHJ5R2V0Qm91bmRMb2NhbCk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdExv
b3BIZWFkZXIpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBk
ZWJ1Z2dlci9EZWJ1Z2dlclNjb3BlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SGVhcC5o
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVs
KToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNs
b2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0hlYXBM
b2NhdGlvbi5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRm
Zy9ERkdIZWFwTG9jYXRpb24uaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEludDMyTG9hZCk6CisgICAgICAgICogaml0L0pJVElubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RG91YmxlR2V0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRMb2FkRm9yQXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29u
dGlndW91c0dldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlR2V0
QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2hhc19nZW5lcmljX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfaW5k
ZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5h
bWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19nZW5l
cmljX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKToKKyAgICAgICAgKiBqaXQv
SklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRE
b3VibGVMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0xvYWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0RG91YmxlR2V0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRD
b250aWd1b3VzR2V0QnlWYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VHZXRCeVZhbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzTG9hZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVN0b3JhZ2VMb2FkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q29udGlndW91c0dl
dEJ5VmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0RG91YmxlR2V0QnlWYWwp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbCk6
IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAg
ICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9D
b21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0VudW1lcmF0aW9uTW9kZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6c2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyk6Cisg
ICAgICAgIChKU0M6OnNob3VsZEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOgorICAgICAgICAo
SlNDOjpzaG91bGRJbmNsdWRlSlNPYmplY3RQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6
bW9kZVRoYXRTa2lwc0pTT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZhdGlvbi5j
cHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlci5jcHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXI6OmdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5j
cHA6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpnZXRPd25Ob25JbmRleFByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjpnZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpnZXRHZW5lcmlj
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpnZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpnZXRDbGFzc1Byb3BlcnR5TmFtZXMpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6aGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0
RW51bWVyYWJsZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6cHJvcGVydHlOYW1lQXRJbmRleCk6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aWRlbnRpZmllclNldCk6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvdG90eXBlQ2hhaW4pOgorICAgICAg
ICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OnNldENhY2hlZFByb3RvdHlwZUNoYWlu
KToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlEKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJ
bmxpbmVDYXBhY2l0eSk6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5h
bWVzVmVjdG9yT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6c3RydWN0dXJlUHJvcGVydHlOYW1lRW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OmdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToK
KyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3h5Ojpn
ZXRFbnVtZXJhYmxlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6Z2V0U3RydWN0dXJl
UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTUHJveHk6OmdldEdlbmVyaWNQcm9wZXJ0
eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJveHkuaDoKKyAgICAgICAgKiBydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
cGVydHlOYW1lQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6YWRk
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OnNldFByZXZpb3VzbHlFbnVtZXJh
dGVkUHJvcGVydGllcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oOgor
ICAgICAgICAoSlNDOjpSZWZDb3VudGVkSWRlbnRpZmllclNldDo6Y29udGFpbnMpOgorICAgICAg
ICAoSlNDOjpSZWZDb3VudGVkSWRlbnRpZmllclNldDo6c2l6ZSk6CisgICAgICAgIChKU0M6OlJl
ZkNvdW50ZWRJZGVudGlmaWVyU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheTo6UHJvcGVydHlOYW1lQXJyYXkpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eTo6YWRkKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmFkZEtub3duVW5pcXVl
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXk6OmlkZW50aWZpZXJTZXQpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6Y2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU5hbWVBcnJheTo6c2V0UHJldmlvdXNseUVudW1l
cmF0ZWRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlND
OjpSZWdFeHBPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50
aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoK
KyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0
UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNl
dENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51
bWVyYXRvcik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2FuQ2FjaGVTdHJ1Y3R1cmVQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjYW5DYWNoZUdl
bmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpj
YW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2tseSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUu
aDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlUmFyZURhdGE6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVSYXJlRGF0YTo6Y2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpzZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmNhY2hl
ZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
UmFyZURhdGE6OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6CisgICAgICAgICogcnVudGltZS9WTS5j
cHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAy
MDE0LTA3LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0
bG9wdF0gUGhhbnRvbXMgaW4gU1NBIGZvcm0gc2hvdWxkIGJlIGFnZ3Jlc3NpdmVseSBob2lzdGVk
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
Niw3ICs1MTYsNyBAQCB2b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAg
ICAgICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gc3RhdGljVmFsdWVzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtl
eS5nZXQoKTsKICAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRyeSA9IGl0LT52
YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZW50cnktPmdldFByb3BlcnR5ICYmICgh
KGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkgfHwgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpKQorICAgICAgICAgICAgICAgIGlmIChl
bnRyeS0+Z2V0UHJvcGVydHkgJiYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnRFbnVtKSB8fCBzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUp
KSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBuYW1lKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUyNyw3ICs1MjcsNyBAQCB2
b2lkIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duTm9uCiAgICAgICAgICAgICBmb3Ig
KGl0ZXJhdG9yIGl0ID0gc3RhdGljRnVuY3Rpb25zLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgICAgICAgICBTdHJpbmdJbXBsKiBuYW1lID0gaXQtPmtleS5nZXQoKTsKICAg
ICAgICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT52YWx1ZS5nZXQo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIShlbnRyeS0+YXR0cmlidXRlcyAmIGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMp
KQorICAgICAgICAgICAgICAgIGlmICghKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RW51bSkgfHwgc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2Rl
KSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVj
LCBuYW1lKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtODEzLDYgKzgxMyw4IEBACiAJCTFDQUE5QTIzMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2Jh
bE9iamVjdFByb2ZpbGVyQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDQUE5QTIxMThGNEEyMjAwMDBBMzY5RCAvKiBKU0dsb2JhbE9iamVjdFBy
b2ZpbGVyQWdlbnQuaCAqLzsgfTsKIAkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3Ry
aW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07
CiAJCTI2MDBCNUE3MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAw
OTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi87IH07CisJCTJBMDVBQkQ1MTk2MURGMjQwMDM0
MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFCRDMxOTYxREYyNDAwMzQxNzUwIC8qIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi87IH07CisJCTJBMDVBQkQ2MTk2MURGMjQwMDM0
MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1MCAvKiBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgfTsKIAkJMkEyODI1RDAxODM0MUYyRDAwODdGQkE5
IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFz
ZVNjb3BlLmggKi87IH07CiAJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFj
a0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjExQjU3NDE3NkEyMjREMDAwRTJBMjMgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9
OwogCQkyQTRCQjdGMzE4QTQxMTc5MDA4QTBGQ0QgLyogSlNNYW5hZ2VkVmFsdWVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0QkI3RjIx
OEE0MTE3OTAwOEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTgz
Niw2ICs4MzgsNyBAQAogCQkyQUM5MjJCQzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1
Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQUM5MjJCQTE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggKi87
IH07CiAJCTJBQ0NGM0RFMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkFDQ0YzREMxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5j
cHAgKi87IH07CiAJCTJBQ0NGM0RGMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhh
c2UuaCAqLzsgfTsKKwkJMkFEMkVERkIxOTc5OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFEMkVE
RkExOTc5OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBRDg5MzJCMTdFMzg2OEYwMDY2ODI3
NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9u
U2NvcGUuaCAqLzsgfTsKIAkJMkFERkEyNjMxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQURGQTI2
MjE4RUYzNTQwMDA0RjlGQ0MgLyogR0NMb2dnaW5nLmNwcCAqLzsgfTsKIAkJMkFGNzM4MkMxOEJC
QkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFGNzM4MkExOEJCQkY5MjAwOEE1QTM3IC8qIFN0
cnVjdHVyZUlEVGFibGUuY3BwICovOyB9OwpAQCAtMjk2MSw2ICsyOTY0LDggQEAKIAkJMUNBQTlB
MjExOEY0QTIyMDAwMEEzNjlEIC8qIEpTR2xvYmFsT2JqZWN0UHJvZmlsZXJBZ2VudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdFByb2ZpbGVyQWdlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVG
IC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYw
MEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJBMDVBQkQzMTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkEwNUFC
RDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERl
bGF5ZWRSZWxlYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVs
YXllZFJlbGVhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTM0M0Y3
NDE4QTE3NDhCMDAzOUIwODUgLyogR0NTZWdtZW50ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJBMzQzRjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5SW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1NlZ21lbnRlZEFycmF5
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk4NSw2ICsyOTkwLDcg
QEAKIAkJMkFDOTIyQkExOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExEV0FSRkRlYnVnTGluZUluZm8u
aDsgcGF0aCA9IGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkFDQ0YzREMxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVs
aXNpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdT
dG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckVs
aXNpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBQ0NGM0REMTg1
RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHBh
dGggPSBkZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTJBRDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW51bWVyYXRpb25Nb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBI
ZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVh
cEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBREZBMjYy
MThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR0NMb2dnaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkFGNzM4MkExOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlSURUYWJsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTc1LDYgKzQ5ODEsOSBAQAogCQkJCTE0MjBC
RTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUz
RDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAogCQkJCUMyQjZENzUyMThBMzM3OTMw
MDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmggKi8sCisJCQkJMkEwNUFCRDMxOTYxREYy
NDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi8sCisJCQkJMkEwNUFC
RDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oICovLAorCQkJ
CTJBRDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01OTM5
LDYgKzU5NDgsNyBAQAogCQkJCTBGNkIxQ0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNr
TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzExODMxQTI2RTAwQ0Y4NzExIC8qIEFS
TTY0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1
RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkyQUQyRURGQjE5Nzk5RTM4
MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkRBRDM4
RjE5NUExNjRFMDBGMzA0NjQgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MkZCNzIxNTE5NTM3NjBDMDBCQjYxMkUgLyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTJGQjcxM0ExOTUzNzRCODAwQkI2MTJFIC8qIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02NTk2LDYgKzY2MDYsNyBAQAogCQkJCTBGRjcyOUJCMTY2QUQzNjAw
MDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkQxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0
YWJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJFMTY2
QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNzc0Myw2ICs3NzU0LDcgQEAKIAkJCQk4Njg4
MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGRjE3QTBCOENDMDA3NzNBRDggLyog
REZHU1NBQ29udmVyc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJBMDVBQkQ1MTk2
MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZDMjBDQjkxODU1NkEzNTAwQzlFOTU0IC8qIERGR1NTQUxvd2VyaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYxOEI2QUQxQzAw
NTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyAr
MTI1LDE2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3dpbGxfY2FsbCIs
ICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHJvZmlsZV9kaWRf
Y2FsbCIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW5kIiwg
Imxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wcm9maWxlX3R5cGVz
X3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9CisgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eSIsICJsZW5ndGgiIDogNCB9
LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoIiwgImxl
bmd0aCIgOiAzIH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9oYXNfaW5kZXhlZF9wcm9w
ZXJ0eSIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eSIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfaGFzX2dlbmVyaWNfcHJvcGVydHkiLCAibGVuZ3RoIiA6IDQgfSwKKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2dldF9kaXJlY3RfcG5hbWUiLCAibGVuZ3RoIiA6IDcgfSwKKyAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvciIs
ICJsZW5ndGgiIDogNCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2dlbmVyaWNf
cHJvcGVydHlfZW51bWVyYXRvciIsICJsZW5ndGgiIDogNSB9LAorICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCisgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF90b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfQogICAg
ICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw2ICsxMTgsOCBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAg
ICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBvcF9nZXRf
ZW51bWVyYWJsZV9sZW5ndGg6CisgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2Fz
ZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25z
dDoKICAgICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKQEAgLTE1MCw2ICsxNTIsMTAgQEAgdm9p
ZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorICAgIGNhc2Ugb3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6Cisg
ICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2FzZSBv
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX25leHRfZW51bWVyYXRvcl9wbmFt
ZToKICAgICBjYXNlIG9wX2dldF9ieV92YWw6CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlf
dmFsOgogICAgIGNhc2Ugb3BfaW46CkBAIC0xNzksNiArMTg1LDggQEAgdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQorICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eToKKyAgICBjYXNlIG9w
X2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Rf
dmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewogICAgICAgICBmdW5jdG9yKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwpAQCAtMTg2LDYgKzE5NCw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgK
ICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIG9w
X2dldF9kaXJlY3RfcG5hbWU6CiAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOiB7CiAgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCk7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CkBAIC0yOTgsNiArMzA3LDE1IEBAIHZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICN1bmRlZiBMTElOVF9IRUxQRVJf
T1BDT0RFUwogICAgICAgICByZXR1cm47CiAgICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUg
ZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICBjYXNlIG9wX3RvX2luZGV4
X3N0cmluZzoKKyAgICBjYXNlIG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2VudW1lcmF0b3I6Cisg
ICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6CisgICAgY2FzZSBvcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6CisgICAgY2Fz
ZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6
CisgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3I6CisgICAgY2Fz
ZSBvcF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CiAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOgogICAg
IGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKICAgICBjYXNlIG9wX3N0cmNhdDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCShyZXZpc2lv
biAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9jb3VsZFRha2VTbG93UGF0aChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJvdmVkKGZhbHNlKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKCEhZXhlY3V0YWJsZSA9PSAhIXN0cnVjdHVyZSk7CiAgICAg
fQogICAgIAogICAgIENhbGxMaW5rU3RhdHVzJiBzZXRJc1Byb3ZlZChib29sIGlzUHJvdmVkKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk5LDYgKzEzOTksOTEgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfbmV4
dF9wbmFtZSkgLSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpdFsx
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYmFzZSA9IGl0WzJdLnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9w
X2dldF9lbnVtZXJhYmxlX2xlbmd0aCIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVz
IiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpKTsK
KyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2hh
c19pbmRleGVkX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUgPSBpdFs0XS51LmFycmF5UHJvZmlsZTsKKyAgICAgICAgICAg
IHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19pbmRl
eGVkX3Byb3BlcnR5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcCIs
IHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVn
aXN0ZXJOYW1lKHByb3BlcnR5TmFtZSkuZGF0YSgpLCBhcnJheVByb2ZpbGUpOworICAgICAgICAg
ICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSkgLSAxOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcHJv
cGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3Ig
PSBpdFs0XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5Iik7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAlcyIsIHJlZ2lzdGVyTmFtZShkc3QpLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKGJhc2UpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHByb3BlcnR5TmFtZSku
ZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvcikuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0
ICs9IE9QQ09ERV9MRU5HVEgob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkgLSAxOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9w
ZXJ0eTogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHByb3BlcnR5
TmFtZSA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX2hhc19nZW5lcmljX3Byb3BlcnR5Iik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgp
LCByZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5k
YXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RFX0xFTkdUSChvcF9oYXNfZ2VuZXJpY19w
cm9wZXJ0eSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaXRbMV0udS5v
cGVyYW5kOworICAgICAgICAgICAgaW50IGJhc2UgPSBpdFsyXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcHJvcGVydHlOYW1lID0gaXRbM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGluZGV4ID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBp
dFs1XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBpdFs2
XS51LnByb2ZpbGU7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJvcF9nZXRfZGlyZWN0X3BuYW1lIik7CisgICAgICAgICAgICBvdXQucHJp
bnRmKCIlcywgJXMsICVzLCAlcywgJXMsICVwIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoYmFzZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUocHJvcGVydHlOYW1lKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZW51bWVyYXRvciku
ZGF0YSgpLCBwcm9maWxlKTsKKyAgICAgICAgICAgIGl0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0
X2RpcmVjdF9wbmFtZSkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAg
ICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBiYXNlID0g
aXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yIik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCkpOworICAgICAgICAgICAgaXQgKz0gT1BDT0RF
X0xFTkdUSChvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpIC0gMTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2dlbmVyaWNfcHJv
cGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIGludCBiYXNlID0gaXRbMl0udS5vcGVyYW5kOworICAgICAgICAgICAg
aW50IGxlbmd0aCA9IGl0WzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBzdHJ1Y3R1cmVF
bnVtZXJhdG9yID0gaXRbNF0udS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFu
ZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAib3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51
bWVyYXRvciIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywgJXMiLCByZWdp
c3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShiYXNlKS5kYXRhKCksIHJlZ2lzdGVy
TmFtZShsZW5ndGgpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHN0cnVjdHVyZUVudW1lcmF0b3IpLmRh
dGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9nZW5lcmljX3By
b3BlcnR5X2VudW1lcmF0b3IpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOiB7CisgICAgICAgICAgICBpbnQg
ZHN0ID0gaXRbMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGVudW1lcmF0b3IgPSBpdFsy
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdFszXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJv
cF9uZXh0X2VudW1lcmF0b3JfcG5hbWUiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAl
cywgJXMiLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShlbnVtZXJhdG9y
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShpbmRleCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGl0ICs9
IE9QQ09ERV9MRU5HVEgob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKSAtIDE7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogewor
ICAgICAgICAgICAgaW50IGRzdCA9IGl0WzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBp
bmRleCA9IGl0WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChv
dXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm9wX3RvX2luZGV4X3N0cmluZyIpOworICAgICAgICAg
ICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rl
ck5hbWUoaW5kZXgpLmRhdGEoKSk7CisgICAgICAgICAgICBpdCArPSBPUENPREVfTEVOR1RIKG9w
X3RvX2luZGV4X3N0cmluZykgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6IHsKICAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbk9wQW5kUmVnaXN0ZXJP
cGVyYW5kKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicHVzaF93aXRoX3Njb3BlIiwgcjApOwpA
QCAtMTc5OSw2ICsxODg0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG8KICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgal0udS5vcGVyYW5kID0gcGNbal0u
dS5vcGVyYW5kOwogICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAocGNbMF0udS5vcGNvZGUpIHsK
KyAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogeworICAgICAgICAgICAgaW50
IGFycmF5UHJvZmlsZUluZGV4ID0gcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkp
OworCisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJh
eVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgogICAgICAgICBjYXNlIG9wX2NvbnN0
cnVjdF92YXJhcmdzOgogICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6CkBAIC0xODA5LDYgKzE5
MDEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2Fy
cmF5UHJvZmlsZUluZGV4XTsKICAgICAgICAgICAgIEZBTExUSFJPVUdIOwogICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWQ6IHsKICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmls
ZXNbcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgQVNTRVJUKHByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDM2LDE4ICsxNDM2LDMwIEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QXIKIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gbV9mb3JJ
bkNvbnRleHRTdGFjay5zaXplKCk7IGkgPiAwOyBpLS0pIHsKLSAgICAgICAgRm9ySW5Db250ZXh0
JiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRTdGFja1tpIC0gMV07Ci0gICAgICAgIGlmIChjb250
ZXh0LnByb3BlcnR5UmVnaXN0ZXIgPT0gcHJvcGVydHkpIHsKLSAgICAgICAgICAgIGVtaXRPcGNv
ZGUob3BfZ2V0X2J5X3BuYW1lKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmlu
ZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRl
eCgpKTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb250ZXh0LmV4cGVjdGVk
U3Vic2NyaXB0UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGNvbnRleHQuaXRlclJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChjb250ZXh0LmluZGV4UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGRzdDsKKyAgICAgICAgRm9ySW5Db250ZXh0KiBjb250ZXh0ID0gbV9mb3JJ
bkNvbnRleHRTdGFja1tpIC0gMV0uZ2V0KCk7CisgICAgICAgIGlmIChjb250ZXh0LT5sb2NhbCgp
ICE9IHByb3BlcnR5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFjb250
ZXh0LT5pc1ZhbGlkKCkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoY29udGV4
dC0+dHlwZSgpID09IEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dFR5cGUpIHsKKyAg
ICAgICAgICAgIHByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8SW5kZXhlZEZvckluQ29udGV4dCo+KGNv
bnRleHQpLT5pbmRleCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAg
ICBBU1NFUlQoY29udGV4dC0+dHlwZSgpID09IEZvckluQ29udGV4dDo6U3RydWN0dXJlRm9ySW5D
b250ZXh0VHlwZSk7CisgICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCogc3RydWN0dXJlQ29u
dGV4dCA9IHN0YXRpY19jYXN0PFN0cnVjdHVyZUZvckluQ29udGV4dCo+KGNvbnRleHQpOworICAg
ICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9w
X2dldF9kaXJlY3RfcG5hbWUpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChk
c3QpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RydWN0dXJlQ29udGV4dC0+aW5kZXgoKS0+aW5kZXgoKSk7
CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdHJ1Y3R1cmVDb250ZXh0LT5lbnVtZXJh
dG9yKCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7
CisgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQorCiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUg
YXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7CiAgICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfYnlfdmFsKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKQEAgLTIxNjEsNyArMjE3Myw3IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAgICAgCiAgICAgICAgIFZl
Y3RvcjxDb250cm9sRmxvd0NvbnRleHQ+IHNhdmVkU2NvcGVDb250ZXh0U3RhY2s7CiAgICAgICAg
IFZlY3RvcjxTd2l0Y2hJbmZvPiBzYXZlZFN3aXRjaENvbnRleHRTdGFjazsKLSAgICAgICAgVmVj
dG9yPEZvckluQ29udGV4dD4gc2F2ZWRGb3JJbkNvbnRleHRTdGFjazsKKyAgICAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxGb3JJbkNvbnRleHQ+PiBzYXZlZEZvckluQ29udGV4dFN0YWNrOwog
ICAgICAgICBWZWN0b3I8VHJ5Q29udGV4dD4gcG9wcGVkVHJ5Q29udGV4dHM7CiAgICAgICAgIExh
YmVsU2NvcGVTdG9yZSBzYXZlZExhYmVsU2NvcGVzOwogICAgICAgICB3aGlsZSAodG9wU2NvcGUg
PiBib3R0b21TY29wZSAmJiB0b3BTY29wZS0+aXNGaW5hbGx5QmxvY2spIHsKQEAgLTIxODgsNyAr
MjIwMCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAg
ICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFjay5zaHJpbmsoZmluYWxseUNvbnRleHQuc3dp
dGNoQ29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZmxp
cEZvcklucykgewotICAgICAgICAgICAgICAgIHNhdmVkRm9ySW5Db250ZXh0U3RhY2sgPSBtX2Zv
ckluQ29udGV4dFN0YWNrOworICAgICAgICAgICAgICAgIHNhdmVkRm9ySW5Db250ZXh0U3RhY2su
c3dhcChtX2ZvckluQ29udGV4dFN0YWNrKTsKICAgICAgICAgICAgICAgICBtX2ZvckluQ29udGV4
dFN0YWNrLnNocmluayhmaW5hbGx5Q29udGV4dC5mb3JJbkNvbnRleHRTdGFja1NpemUpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZsaXBUcmllcykgewpAQCAtMjIyOCw3ICsyMjQw
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTYwogICAgICAgICAg
ICAgaWYgKGZsaXBTd2l0Y2hlcykKICAgICAgICAgICAgICAgICBtX3N3aXRjaENvbnRleHRTdGFj
ayA9IHNhdmVkU3dpdGNoQ29udGV4dFN0YWNrOwogICAgICAgICAgICAgaWYgKGZsaXBGb3JJbnMp
Ci0gICAgICAgICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjayA9IHNhdmVkRm9ySW5Db250ZXh0
U3RhY2s7CisgICAgICAgICAgICAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5zd2FwKHNhdmVkRm9y
SW5Db250ZXh0U3RhY2spOwogICAgICAgICAgICAgaWYgKGZsaXBUcmllcykgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChtX3RyeUNvbnRleHRTdGFjay5zaXplKCkgPT0gZmluYWxseUNvbnRleHQu
dHJ5Q29udGV4dFN0YWNrU2l6ZSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
cG9wcGVkVHJ5Q29udGV4dHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0yNTYxLDQgKzI1NzMsMTI4IEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbigKICAgICBlbWl0TGFiZWwo
c2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogfQogCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEdldEVudW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBi
YXNlKQoreworICAgIGVtaXRPcGNvZGUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYmFzZS0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNHZW5lcmljUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgZW1p
dE9wY29kZShvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eU5hbWUtPmluZGV4KCkpOwor
ICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SGFzSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVn
aXN0ZXJJRCogcHJvcGVydHlOYW1lKQoreworICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5
UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOworICAgIGVtaXRPcGNvZGUob3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwor
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQocHJvcGVydHlOYW1lLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoYXJyYXlQcm9maWxlKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc1N0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKQoreworICAgIGVtaXRPcGNvZGUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChwcm9wZXJ0eU5hbWUtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChlbnVt
ZXJhdG9yLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCkKK3sKKyAgICBl
bWl0T3Bjb2RlKG9wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcik7CisgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGJhc2UtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChsZW5ndGgtPmlu
ZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJRCogc3RydWN0dXJl
RW51bWVyYXRvcikKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2dldF9nZW5lcmljX3Byb3BlcnR5X2Vu
dW1lcmF0b3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobGVuZ3RoLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Ry
dWN0dXJlRW51bWVyYXRvci0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4
KQoreworICAgIGVtaXRPcGNvZGUob3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZW51bWVyYXRvci0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4
LT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBp
bmRleCkKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX3RvX2luZGV4X3N0cmluZyk7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGluZGV4LT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEluZGV4ZWRGb3JJbkNvbnRleHQ+KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIp
KTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKK3sKKyAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwor
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCog
cHJvcGVydHlSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyKQoreworICAg
IGlmICghbG9jYWxSZWdpc3RlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fZm9ySW5Db250ZXh0
U3RhY2suYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlRm9ySW5Db250ZXh0Pihsb2Nh
bFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJlZ2lzdGVyLCBlbnVtZXJhdG9yUmVn
aXN0ZXIpKTsKK30KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5T
Y29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQoreworICAgIGlmICghbG9jYWxSZWdpc3Rl
cikKKyAgICAgICAgcmV0dXJuOworICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgp
OworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9y
TG9jYWwoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKK3sKKyAgICAvLyBMZXhpY2FsbHkgaW52
YWxpZGF0aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25s
eSBvY2N1cnMgaWYgCisgICAgLy8gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBp
cyB0cnVlOgorICAgIC8vIAorICAgIC8vICgxKSBUaGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUg
aXMgcmUtYXNzaWduZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wLgorICAgIC8vICgyKSBU
aGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgaXMgY2FwdHVyZWQgaW4gdGhlIGxleGljYWwgc2Nv
cGUgb2YgdGhlIGZ1bmN0aW9uLgorICAgIC8vCisgICAgLy8gVGhlc2UgdHdvIHNpdHVhdGlvbnMg
b2NjdXIgc3VmZmljaWVudGx5IHJhcmVseSB0aGF0IGl0J3Mgb2theSB0byB1c2UgdGhpcyBzdHls
ZSBvZiAKKyAgICAvLyAiYW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2Ug
ZGlkbid0IHdhbnQgdG8gZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhhdmUgCisgICAgLy8gdG8g
cGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBs
b29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3YXMgCisgICAgLy8gcmVhc3NpZ25lZCwgb3Igd2UnZCBo
YXZlIHRvIHJlc29ydCB0byBydW50aW1lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHZhcmlhYmxlIGhh
ZCBiZWVuIAorICAgIC8vIHJlYXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCisgICAg
Zm9yIChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpID4gMDsgaS0tKSB7
CisgICAgICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaSAt
IDFdLmdldCgpOworICAgICAgICBpZiAoY29udGV4dC0+bG9jYWwoKSAhPSBsb2NhbFJlZ2lzdGVy
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnRleHQtPmludmFsaWRhdGUoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3
LDc2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBGaW5hbGx5Q29udGV4dCBmaW5hbGx5Q29u
dGV4dDsKICAgICB9OwogCi0gICAgc3RydWN0IEZvckluQ29udGV4dCB7Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBleHBlY3RlZFN1YnNjcmlwdFJlZ2lzdGVyOwotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gaXRlclJlZ2lzdGVyOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5k
ZXhSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5UmVnaXN0ZXI7
CisgICAgY2xhc3MgRm9ySW5Db250ZXh0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZvckluQ29u
dGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9pc1ZhbGlkKHRydWUpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNWYWxpZDsgfQorICAgICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZh
bHNlOyB9CisKKyAgICAgICAgZW51bSBGb3JJbkNvbnRleHRUeXBlIHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZUZvckluQ29udGV4dFR5cGUsCisgICAgICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0
VHlwZQorICAgICAgICB9OworICAgICAgICB2aXJ0dWFsIEZvckluQ29udGV4dFR5cGUgdHlwZSgp
IGNvbnN0ID0gMDsKKworICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxSZWdpc3Rlci5nZXQoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgYm9vbCBtX2lzVmFsaWQ7Cisg
ICAgfTsKKworICAgIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNv
bnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lz
dGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3RlcikKKyAg
ICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIpCisgICAgICAgICAgICAsIG1f
aW5kZXhSZWdpc3RlcihpbmRleFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVn
aXN0ZXIocHJvcGVydHlSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0
ZXIoZW51bWVyYXRvclJlZ2lzdGVyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2
aXJ0dWFsIEZvckluQ29udGV4dFR5cGUgdHlwZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBlOworICAgICAgICB9CisKKyAgICAg
ICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0
KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnR5UmVnaXN0ZXIuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvclJlZ2lzdGVyLmdldCgpOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eVJlZ2lzdGVyOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yUmVnaXN0ZXI7CisgICAgfTsKKworICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEluZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVn
aXN0ZXJJRCogaW5kZXhSZWdpc3RlcikKKyAgICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2Fs
UmVnaXN0ZXIpCisgICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRleFJlZ2lzdGVyKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIEZvckluQ29udGV4dFR5cGUg
dHlwZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBJbmRleGVkRm9ySW5D
b250ZXh0VHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOwogICAgIH07CiAKICAgICBz
dHJ1Y3QgVHJ5RGF0YSB7CkBAIC00MzEsNiArNDk2LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlOYW1lcyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGksIFJlZ2lzdGVySUQqIHNpemUsIExhYmVsKiBi
cmVha1RhcmdldCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXh0UHJvcGVydHlOYW1lKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogaSwgUmVnaXN0ZXJJ
RCogc2l6ZSwgUmVnaXN0ZXJJRCogaXRlciwgTGFiZWwqIHRhcmdldCk7CiAKKyAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRIYXNTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNHZW5lcmljUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0U3RydWN0dXJlUHJvcGVy
dHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogbGVuZ3RoKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVu
dW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBs
ZW5ndGgsIFJlZ2lzdGVySUQqIHN0cnVjdHVyZUVudW1lcmF0b3IpOworICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgp
OworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKIAogICAg
ICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVk
LgpAQCAtNDYwLDE2ICs1MzQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHVz
aEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7CiAgICAgICAgIHZv
aWQgcG9wRmluYWxseUNvbnRleHQoKTsKIAotICAgICAgICB2b2lkIHB1c2hPcHRpbWlzZWRGb3JJ
bihSZWdpc3RlcklEKiBleHBlY3RlZFN1YnNjcmlwdCwgUmVnaXN0ZXJJRCogaXRlciwgUmVnaXN0
ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0ID0geyBleHBlY3RlZFN1YnNjcmlwdCwgaXRl
ciwgaW5kZXgsIHByb3BlcnR5UmVnaXN0ZXIgfTsKLSAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0
U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwb3BPcHRp
bWlzZWRGb3JJbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZm9ySW5Db250ZXh0U3RhY2su
cmVtb3ZlTGFzdCgpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIHZvaWQg
cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAgICB2b2lkIHB1
c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRl
eCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOworICAgICAg
ICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAg
ICB2b2lkIGludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChSZWdpc3RlcklEKiBsb2NhbCk7
CiAKICAgICAgICAgTGFiZWxTY29wZVB0ciBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7
CiAgICAgICAgIExhYmVsU2NvcGVQdHIgY29udGludWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYp
OwpAQCAtNjY4LDcgKzczNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFZlY3RvcjxD
b250cm9sRmxvd0NvbnRleHQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Njb3BlQ29udGV4
dFN0YWNrOwogICAgICAgICBWZWN0b3I8U3dpdGNoSW5mbz4gbV9zd2l0Y2hDb250ZXh0U3RhY2s7
Ci0gICAgICAgIFZlY3RvcjxGb3JJbkNvbnRleHQ+IG1fZm9ySW5Db250ZXh0U3RhY2s7CisgICAg
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rm9ySW5Db250ZXh0Pj4gbV9mb3JJbkNvbnRleHRT
dGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1fdHJ5Q29udGV4dFN0YWNrOwogICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPFJlZlB0cjxSZWdpc3RlcklEPiwgY29uc3QgRGVjb25zdHJ1
Y3Rpb25QYXR0ZXJuTm9kZSo+PiBtX2RlY29uc3RydWN0ZWRQYXJhbWV0ZXJzOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNSwxMiAr
MTUwNSwxNCBAQCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCCiAgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUocmVzdWx0LmdldCgpLCBsb2NhbC5nZXQoKSk7CiAg
ICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCByZXN1bHQuZ2V0
KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3Vs
dFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCByZXN1bHQuZ2V0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2Nh
bC5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHJlc3VsdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVy
SUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLmdl
dCgpLCBsb2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3Vs
dFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOworICAg
ICAgICBnZW5lcmF0b3IuaW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKGxvY2FsLmdldCgp
KTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTE1NDAsMTEgKzE1NDIsMTMgQEAgUmVnaXN0ZXJJRCog
QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlYwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5nZXQoKSwgbV9yaWdodCk7CiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHRlbXBEc3QuZ2V0KCkpOworICAgICAg
ICAgICAgZ2VuZXJhdG9yLmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2NhbChsb2NhbC5nZXQo
KSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KCkpCiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRl
bXBEc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7CisgICAgICAgIGdlbmVyYXRv
ci5pbnZhbGlkYXRlRm9ySW5Db250ZXh0Rm9yTG9jYWwobG9jYWwuZ2V0KCkpOwogICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQpOwog
ICAgIH0KIApAQCAtMTkyMCwxMDIgKzE5MjQsMjE3IEBAIHZvaWQgRm9yTm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZv
ckluTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBGb3JJ
bk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCitSZWdpc3RlcklEKiBGb3JJbk5vZGU6OnRyeUdldEJvdW5kTG9jYWwoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKIHsKLSAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0KLSAgICBpZiAoIW1fbGV4
cHItPmlzQXNzaWdubWVudExvY2F0aW9uKCkpIHsKLSAgICAgICAgZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoZ2VuZXJhdG9yLCAiTGVmdCBzaWRlIG9mIGZvci1pbiBzdGF0ZW1lbnQgaXMgbm90IGEg
cmVmZXJlbmNlLiIpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fbGV4cHItPmlzUmVzb2x2
ZU5vZGUoKSkgeworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19jYXN0
PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKKyAgICAgICAgTG9jYWwgbG9j
YWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOworICAgICAgICBpZiAobG9jYWwuaXNDYXB0dXJl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBsb2NhbC5n
ZXQoKTsKICAgICB9CiAKLSAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0
YXRlbWVudCwgZmlyc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgpKTsK
KyAgICBpZiAobV9sZXhwci0+aXNEZWNvbnN0cnVjdGlvbk5vZGUoKSkgeworICAgICAgICBEZWNv
bnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKiBhc3NpZ25Ob2RlID0gc3RhdGljX2Nhc3Q8RGVjb25z
dHJ1Y3RpbmdBc3NpZ25tZW50Tm9kZSo+KG1fbGV4cHIpOworICAgICAgICBhdXRvIGJpbmRpbmcg
PSBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlzQmluZGlu
Z05vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNpemUgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4cGVjdGVk
U3Vic2NyaXB0OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyID0gZ2VuZXJhdG9yLmVtaXRH
ZXRQcm9wZXJ0eU5hbWVzKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSwgaS5n
ZXQoKSwgc2l6ZS5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgIGdlbmVyYXRvci5l
bWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGF1dG8gc2ltcGxlQmlu
ZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7CisgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOworICAg
ICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmIChs
b2NhbC5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGxvY2FsLmdldCgpOworICAgIH0KIAotICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3Rh
cnQuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KIAotICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKLSAgICBib29sIG9wdGlt
aXplZEZvcmluQWNjZXNzID0gZmFsc2U7Cit2b2lkIEZvckluTm9kZTo6ZW1pdExvb3BIZWFkZXIo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQor
ewogICAgIGlmIChtX2xleHByLT5pc1Jlc29sdmVOb2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVu
dGlmaWVyKCk7CiAgICAgICAgIExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsK
LSAgICAgICAgaWYgKCFsb2NhbC5nZXQoKSkgewotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAgIGlmIChsb2NhbC5nZXQoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQog
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHNjb3BlID0g
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpZGVu
dCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIGdlbmVyYXRvci5pc1N0cmljdE1vZGUo
KSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZXhwZWN0ZWRTdWJzY3JpcHQuZ2V0
KCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGltaXNlZEZvckluKGV4cGVjdGVk
U3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdldCgpLCBsb2NhbC5nZXQoKSk7Ci0gICAg
ICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRydWU7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNzb3JOb2RlKCkpIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAobV9sZXhwci0+aXNEb3RBY2Nlc3Nvck5vZGUoKSkgewogICAgICAgICBE
b3RBY2Nlc3Nvck5vZGUqIGFzc2lnbk5vZGUgPSBzdGF0aWNfY2FzdDxEb3RBY2Nlc3Nvck5vZGUq
PihtX2xleHByKTsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBhc3NpZ25Ob2Rl
LT5pZGVudGlmaWVyKCk7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5h
bWU7CiAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUoYXNzaWdu
Tm9kZS0+YmFzZSgpKTsKLQogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGFz
c2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQoKSwgYXNzaWduTm9kZS0+
ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLCBpZGVudCwg
cHJvcGVydHlOYW1lKTsKLSAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzQnJhY2tldEFjY2Vzc29y
Tm9kZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fbGV4cHItPmlzQnJh
Y2tldEFjY2Vzc29yTm9kZSgpKSB7CiAgICAgICAgIEJyYWNrZXRBY2Nlc3Nvck5vZGUqIGFzc2ln
bk5vZGUgPSBzdGF0aWNfY2FzdDxCcmFja2V0QWNjZXNzb3JOb2RlKj4obV9sZXhwcik7Ci0gICAg
ICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CiAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFzc2lnbk5vZGUtPmJhc2UoKSk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIHN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShhc3Np
Z25Ob2RlLT5zdWJzY3JpcHQoKSk7Ci0gICAgICAgIAogICAgICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGFzc2lnbk5vZGUtPmRpdm90KCksIGFzc2lnbk5vZGUtPmRpdm90U3RhcnQo
KSwgYXNzaWduTm9kZS0+ZGl2b3RFbmQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlW
YWwoYmFzZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2xleHByLT5pc0RlY29uc3RydWN0aW9uTm9kZSgp
KSB7CiAgICAgICAgIERlY29uc3RydWN0aW5nQXNzaWdubWVudE5vZGUqIGFzc2lnbk5vZGUgPSBz
dGF0aWNfY2FzdDxEZWNvbnN0cnVjdGluZ0Fzc2lnbm1lbnROb2RlKj4obV9sZXhwcik7CiAgICAg
ICAgIGF1dG8gYmluZGluZyA9IGFzc2lnbk5vZGUtPmJpbmRpbmdzKCk7Ci0gICAgICAgIGlmIChi
aW5kaW5nLT5pc0JpbmRpbmdOb2RlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2ltcGxlQmluZGlu
ZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4oYmluZGluZyk7Ci0gICAgICAgICAgICBJZGVu
dGlmaWVyIGlkZW50ID0gc2ltcGxlQmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOwotICAgICAgICAg
ICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICAgICAgcHJv
cGVydHlOYW1lID0gbG9jYWwuZ2V0KCk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIEkg
ZW1pdCBleHByZXNzaW9uIGluZm8gaGVyZT8KLSAgICAgICAgICAgIGlmICghcHJvcGVydHlOYW1l
IHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSB8fCBnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkKLSAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNCaW5kaW5nOwotICAg
ICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLnB1
c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQoKSwgaS5n
ZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIG9wdGltaXplZEZvcmluQWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gY29tcGxldGVkU2ltcGxlQmluZGluZzsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgZ2VuZXJpY0JpbmRpbmc6Ci0gICAgICAgICAgICBwcm9wZXJ0eU5h
bWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvdGVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIWJpbmRpbmctPmlzQmlu
ZGluZ05vZGUoKSkgeworICAgICAgICAgICAgYXNzaWduTm9kZS0+YmluZGluZ3MoKS0+YmluZFZh
bHVlKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGF1dG8gc2ltcGxlQmluZGluZyA9IHN0YXRpY19jYXN0PEJpbmRpbmdO
b2RlKj4oYmluZGluZyk7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gc2ltcGxl
QmluZGluZy0+Ym91bmRQcm9wZXJ0eSgpOworICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRv
ci5sb2NhbChpZGVudCk7CisgICAgICAgIGlmICghbG9jYWwuZ2V0KCkgfHwgbG9jYWwuaXNDYXB0
dXJlZCgpKSB7CiAgICAgICAgICAgICBhc3NpZ25Ob2RlLT5iaW5kaW5ncygpLT5iaW5kVmFsdWUo
Z2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGNvbXBsZXRlZFNpbXBsZUJpbmRpbmc6Ci0gICAgICAgIDsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CiAKLSAgICBpZiAob3B0aW1pemVk
Rm9yaW5BY2Nlc3MpCi0gICAgICAgIGdlbmVyYXRvci5wb3BPcHRpbWlzZWRGb3JJbigpOwordm9p
ZCBGb3JJbk5vZGU6OmVtaXRNdWx0aUxvb3BCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgaWYgKCFtX2xleHByLT5pc0Fzc2lnbm1l
bnRMb2NhdGlvbigpKSB7CisgICAgICAgIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGdlbmVyYXRv
ciwgIkxlZnQgc2lkZSBvZiBmb3ItaW4gc3RhdGVtZW50IGlzIG5vdCBhIHJlZmVyZW5jZS4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxMYWJlbD4gZW5kID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51
ZVRhcmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdE5leHRQcm9wZXJ0eU5hbWUocHJvcGVydHlO
YW1lLCBiYXNlLmdldCgpLCBpLmdldCgpLCBzaXplLmdldCgpLCBpdGVyLmdldCgpLCBsb29wU3Rh
cnQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVt
ZW50LCBmaXJzdExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOwotICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworCisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGxlbmd0aDsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3RydWN0dXJlRW51
bWVyYXRvcjsKKyAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9leHByKTsKKyAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlzLT50cnlHZXRCb3VuZExvY2FsKGdlbmVy
YXRvcik7CisKKyAgICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AuCisgICAgeworICAgICAgICBM
YWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6
TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworCisgICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJsZUxlbmd0
aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFt
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExh
YmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsK
KworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRFcXVh
bGl0eU9wKG9wX2xlc3MsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3Ro
LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0luZGV4ZWRQcm9wZXJ0
eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwor
CisgICAgICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCks
IGkuZ2V0KCkpOworICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3Bl
cnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hJbmRleGVkRm9ySW5TY29w
ZShsb2NhbC5nZXQoKSwgaS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEluZGV4ZWRGb3JJblNjb3BlKGxv
Y2FsLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51
ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdl
dCgpKTsKKyAgICB9CisKKyAgICAvLyBTdHJ1Y3R1cmUgcHJvcGVydHkgbG9vcC4KKyAgICB7Cisg
ICAgICAgIExhYmVsU2NvcGVQdHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJl
bFNjb3BlOjpMb29wKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsKCk7CisKKyAgICAgICAgc3RydWN0dXJlRW51bWVyYXRvciA9IGdlbmVyYXRvci5l
bWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJl
cigwKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQ
cm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmVFbnVtZXJhdG9yLmdldCgp
LCBpLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0SGFzU3RydWN0dXJlUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNl
LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNv
bnRpbnVlVGFyZ2V0KCkpOworCisgICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRv
ciwgcHJvcGVydHlOYW1lLmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IucHVzaFN0cnVjdHVy
ZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgc3Ry
dWN0dXJlRW51bWVyYXRvci5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fc3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcFN0cnVjdHVyZUZvckluU2NvcGUo
bG9jYWwuZ2V0KCkpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhpLmdldCgpKTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIHN0cnVjdHVyZUVudW1lcmF0b3IuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5k
LmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBHZW5lcmljIHByb3BlcnR5IGxvb3AuCisgICAgewor
ICAgICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFi
ZWxTY29wZTo6TG9vcCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBnZW5lcmljRW51bWVy
YXRvciA9IGdlbmVyYXRvci5lbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCksIGxlbmd0aC5nZXQoKSwgc3RydWN0dXJlRW51
bWVyYXRvci5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpID0gZ2VuZXJhdG9y
LmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOworCisgICAgICAgIGdlbmVyYXRvci5lbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUo
cHJvcGVydHlOYW1lLmdldCgpLCBnZW5lcmljRW51bWVyYXRvci5nZXQoKSwgaS5nZXQoKSk7Cisg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Ao
b3BfZXFfbnVsbCwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wRW5k
LmdldCgpKTsKKworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKworICAgICAgICB0aGlzLT5lbWl0
TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworCisgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dEluYyhpLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXh0RW51bWVyYXRvclByb3Bl
cnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGdlbmVyaWNFbnVtZXJhdG9yLmdldCgpLCBpLmdl
dCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHJlc3VsdC5n
ZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZU
cnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRIYXNHZW5lcmljUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5h
bWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgp
LCBsb29wU3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoc2NvcGUtPmNv
bnRpbnVlVGFyZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChz
Y29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOworICAgIH0K
KworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJz
dExpbmUoKSwgc3RhcnRPZmZzZXQoKSwgbGluZVN0YXJ0T2Zmc2V0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKK30KKwordm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAg
dGhpcy0+ZW1pdE11bHRpTG9vcEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0KTsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvck9mTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlclNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyU2NvcGUuaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyAr
OTQsNyBAQCBwcml2YXRlOgogCiAgICAgSlNTY29wZSoganNTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2NvcGUuZ2V0KCk7IH0KIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBKU09iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU09iamVjdDo6U3Ry
dWN0dXJlRmxhZ3M7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNTY29wZT4gbV9zY29wZTsKICAgICBX
cml0ZUJhcnJpZXI8RGVidWdnZXJTY29wZT4gbV9uZXh0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhKU0NlbGxfdHlwZUluZm9UeXBlKSBcCiAgICAgbWFjcm8oSlNPYmplY3RfYnV0dGVyZmx5KSBc
CiAgICAgbWFjcm8oSlNWYXJpYWJsZU9iamVjdF9yZWdpc3RlcnMpIFwKKyAgICBtYWNybyhKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lcykgXAogICAgIG1hY3JvKE5h
bWVkUHJvcGVydGllcykgXAogICAgIG1hY3JvKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpIFwKICAg
ICBtYWNybyhJbmRleGVkRG91YmxlUHJvcGVydGllcykgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc3LDEzICsxNzc3
LDY1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIEluOgorICAgIGNhc2UgSW46IHsKICAg
ICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVmaW5p
dGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKICAgICAgICAgLy8gdmFsdWUgaW5mb3JtYXRp
b24uCiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJM
aW1pdCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CiAgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxl
bmd0aDogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OiB7CisgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OiB7CisgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFy
cmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDogeworICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9w
ZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51
bWVyYXRvcjogeworICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0NlbGwpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjU3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAg
ICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
ODEsNiArMzE4MSw4MiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbik7CiAgICAgICAgIH0KIAorICAgICAgICBj
YXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRF
bnVtZXJhYmxlTGVuZ3RoLCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
b3BfaGFzX2dlbmVyaWNfcHJvcGVydHk6IHsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSGFzR2VuZXJp
Y1Byb3BlcnR5LCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBo
KEhhc1N0cnVjdHVyZVByb3BlcnR5LCAKKyAgICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSwKKyAgICAgICAgICAgICAgICBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSwKKyAg
ICAgICAgICAgICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQpKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eSk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3Bl
cnR5OiB7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJy
YXlNb2RlID0gZ2V0QXJyYXlNb2RlQ29uc2lkZXJpbmdTbG93UGF0aChjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBOb2RlKiBoYXNJdGVyYWJsZVByb3BlcnR5ID0gYWRkVG9HcmFw
aChIYXNJbmRleGVkUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBiYXNlLCBw
cm9wZXJ0eSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLCBoYXNJdGVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAg
ICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKTsKKworICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChwcm9wZXJ0eSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIAorICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBP
cEluZm8ocHJlZGljdGlvbikpKTsKKworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2Rp
cmVjdF9wbmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2dldF9zdHJ1Y3R1cmVf
cHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKSk7CisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3Ip
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVt
ZXJhdG9yOiB7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0
b3IsIAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpLAorICAgICAgICAgICAgICAgIGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpKSk7CisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOiB7Cisg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpLCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JQbmFtZSwgCisgICAgICAgICAgICAgICAg
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSksCisg
ICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25leHRfZW51bWVyYXRv
cl9wbmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzog
eworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCAKKyAgICAgICAgICAgICAgICBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOwor
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9faW5kZXhfc3RyaW5nKTsKKyAgICAgICAgfQor
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBmYWlsZWQhIFRoaXMgc2hv
dWxkIG5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrZXIKICAgICAgICAg
ICAgIC8vIHNob3VsZCBoYXZlIGNhdWdodCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkzLDYgKzE5MywxNSBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29k
ZUlECiAgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKICAgICBjYXNlIG9wX2luOgogICAgIGNhc2Ug
b3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6Cisg
ICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHk6CisgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eToKKyAgICBjYXNl
IG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgY2FzZSBvcF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5
X2VudW1lcmF0b3I6CisgICAgY2FzZSBvcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9y
OgorICAgIGNhc2Ugb3BfbmV4dF9lbnVtZXJhdG9yX3BuYW1lOgorICAgIGNhc2Ugb3BfdG9faW5k
ZXhfc3RyaW5nOgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNh
c2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsODUgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICBkZWYoUHVy
ZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEhhc0dl
bmVyaWNQcm9wZXJ0eToKKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2Ug
R2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNlIEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVy
YXRvcjoKKyAgICBjYXNlIEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAg
cmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CisgICAgICAgIHJlYWQoV29ybGQp
OworICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBHZXRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAg
ICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
YXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZs
eSk7CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAg
IHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6IHsKKyAg
ICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50
MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4
ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgbm9kZS0+Y2hpbGQxKCksIG5v
ZGUtPmNoaWxkMigpKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAg
ICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0
dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91Ymxl
UHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVk
UHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBub2RlLT5jaGlsZDEoKSwgbm9k
ZS0+Y2hpbGQyKCkpLCBub2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAg
ICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQ29u
dGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFz
SW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsIG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSksIG5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEFy
cmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgcmVhZChXb3JsZCk7Cisg
ICAgICAgICAgICB3cml0ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBBcml0aEFkZDoKICAgICBjYXNlIEFyaXRoU3Vi
OgogICAgIGNhc2UgQXJpdGhOZWdhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw2ICsxODcsMTEgQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0QnlPZmZzZXQ6
CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9w
ZXJ0eToKKyAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgorICAgIGNhc2UgSGFzSW5kZXhl
ZFByb3BlcnR5OgorICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTIwOSw2ICsyMTQsMTAgQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTmV3RnVuY3Rpb25F
eHByZXNzaW9uOgogICAgIGNhc2UgTmV3VHlwZWRBcnJheToKICAgICBjYXNlIFRocm93UmVmZXJl
bmNlRXJyb3I6CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAg
Y2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgR2V0RW51bWVyYXRv
clBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIAogICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzNCw2ICsxMDM0LDY0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgb2JzZXJ2ZVVz
ZUtpbmRPbk5vZGU8U3RyaW5nVXNlPihub2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAg
ICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICAg
ICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAg
ICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAg
ICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUo
KS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgIFNw
ZWNOb25lLCBub2RlLT5mbGFncygpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJsZXNz
QXJyYXlPcGVyYXRpb24obm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewor
ICAgICAgICAgICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Cisg
ICAgICAgICAgICBFZGdlJiBwcm9wZXJ0eSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7
CisgICAgICAgICAgICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7
CisgICAgICAgICAgICBFZGdlJiBlbnVtZXJhdG9yID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAzKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4ocHJvcGVydHkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkludDMyVXNlPihpbmRleCk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oZW51
bWVyYXRvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdl
dFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAgZml4RWRnZTxDZWxs
VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+
KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50
MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNl
Pihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZTogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgICAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8t
b3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxl
cnMgZm9yIG5ldyBvcGNvZGVzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdI
ZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiAr
MTA4LDEwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICAg
ICAgb3V0LnByaW50KCJHbG9iYWxWYXJpYWJsZUxvYyIpOwogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5TG9jOgorICAgICAgICBvdXQucHJpbnQo
Ikhhc0luZGV4ZWRQb3JwZXJ0eUxvYyIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAg
IGNhc2UgSW5kZXhlZFByb3BlcnR5TG9jOgogICAgICAgICBvdXQucHJpbnQoIkluZGV4ZWRQb3Jw
ZXJ0eUxvYyIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYg
KzQ0LDcgQEAgZW51bSBMb2NhdGlvbktpbmQgewogICAgIENsb3N1cmVWYXJpYWJsZUxvYywKICAg
ICBHZXR0ZXJMb2MsCiAgICAgR2xvYmFsVmFyaWFibGVMb2MsCisgICAgSGFzSW5kZXhlZFByb3Bl
cnR5TG9jLAogICAgIEluZGV4ZWRQcm9wZXJ0eUxvYywKICAgICBJbmRleGVkUHJvcGVydHlTdG9y
YWdlTG9jLAogICAgIEluc3RhbmNlT2ZMb2MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNiArMTAwMSw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBib29sIGhhc0hlYXBQcmVkaWN0aW9uKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAo
b3AoKSkgeworICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIEdldEJ5
SWQ6CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgpA
QCAtMTI2MSw2ICsxMjYyLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEFycmF5aWZ5
VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBjYXNlIEFycmF5
UG9wOgorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTcxNDg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yODgsNiArMjg4LDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICAvKiBXcml0ZSBiYXJyaWVycyAhICovXAogICAgIG1hY3JvKFN0b3JlQmFycmllciwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2ssIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29k
ZXMgKi9cCisgICAgbWFjcm8oR2V0RW51bWVyYWJsZUxlbmd0aCwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEhhc0luZGV4ZWRQcm9wZXJ0eSwgTm9kZVJlc3Vs
dEJvb2xlYW4pIFwKKyAgICBtYWNybyhIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKKyAgICBtYWNybyhIYXNHZW5lcmljUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFu
KSBcCisgICAgbWFjcm8oR2V0RGlyZWN0UG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFz
VmFyQXJncyB8IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdldFN0cnVjdHVyZVByb3BlcnR5
RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3Jv
KEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhHZXRFbnVtZXJhdG9yUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMp
CiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQg
Zm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51
bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlkTWFzaykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MCw2ICsxODAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAg
ICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRp
dmVDYWxsOgpAQCAtNTUwLDYgKzU1MSwzOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVt
ZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRHZW5lcmlj
UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yUG5hbWU6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2Ug
dGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJl
dmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNiArMjU1LDE1IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEludDUyUmVwOgogICAgIGNhc2Ug
R2V0R2V0dGVyOgogICAgIGNhc2UgR2V0U2V0dGVyOgorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxl
bmd0aDoKKyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKKyAgICBjYXNlIEhhc1N0cnVjdHVy
ZVByb3BlcnR5OgorICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgIGNhc2UgR2V0RGly
ZWN0UG5hbWU6CisgICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAg
Y2FzZSBHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yOgorICAgIGNhc2UgR2V0RW51bWVyYXRv
clBuYW1lOgorICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBjYXNlIE5hdGl2ZUNhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2lu
Y2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgorI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDU0OSw2ICs0NTUwLDI1MiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkdldEVudW1lcmFibGVMZW5ndGgsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSk7CisgICAg
ICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eTogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhpcyk7CisgICAg
ICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgICAgICBH
UFJSZWcgYmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQ
YXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRh
Z0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNlVGFnR1BSLCBiYXNlUGF5bG9hZEdQUiwgcHJvcGVy
dHkuZ3ByKCkpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eTog
eworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQ
UlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRh
Zyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYmFzZVRhZ0dQUiA9IGJhc2UudGFnR1BSKCk7Cisg
ICAgICAgIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiA9IGJhc2UucGF5bG9hZEdQUigpOworICAgICAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQ
UiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBy
ZXN1bHRUYWcuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd3JvbmdTdHJ1Y3R1cmUgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICAgICAgc2Ny
YXRjaEdQUiwgCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9y
LmdwcigpLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKTsKKworICAgICAgICBtb3ZlVHJ1ZVRvKHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2Fs
bCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCBw
cm9wZXJ0eUdQUikpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6
IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBH
UFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBu
b2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewor
ICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6IHsKKyAgICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IHNjcmF0Y2guZnByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBzY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoRG91Ymxl
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBzY3JhdGNoRlBSLCBz
Y3JhdGNoRlBSKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIEFTU0VSVCghIW5vZGUtPmNoaWxk
MygpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisKKyAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKworICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRj
aEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHksIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwg
YmFzZUdQUiwgaW5kZXhHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogeworICAgICAgICBFZGdl
JiBiYXNlRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAg
IEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7
CisgICAgICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7CisgICAgICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAzKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhp
cywgcHJvcGVydHlFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRo
aXMsIGluZGV4RWRnZSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3Io
dGhpcywgZW51bWVyYXRvckVkZ2UpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0
aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhpcyk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVy
YXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIg
PSByZXN1bHRUYWcuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVz
dWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3cm9u
Z1N0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCisg
ICAgICAgICAgICBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIAorICAgICAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFz
ZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoYmFzZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAor
ICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOwor
ICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgLy8gV2UgdXNlIHJlc3VsdFBheWxvYWRHUFIgYXMgYSB0ZW1wb3JhcnkgaGVyZS4g
V2UgaGF2ZSB0byBtYWtlIHN1cmUgY2xvYmJlciBpdCBhZnRlciBnZXR0aW5nIHRoZSAKKyAgICAg
ICAgLy8gdmFsdWUgb3V0IG9mIGluZGV4R1BSIGFuZCBlbnVtZXJhdG9yR1BSIGJlY2F1c2UgcmVz
dWx0UGF5bG9hZEdQUiBjb3VsZCByZXVzZSBlaXRoZXIgb2YgdGhvc2UgcmVnaXN0ZXJzLgorICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOyAKKyAgICAgICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0
UGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgocmVzdWx0UGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOworCisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxDZWxsLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGJhc2VHUFIsIHNj
cmF0Y2hHUFIsIHByb3BlcnR5R1BSKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1
bGF0ZUludDMyT3BlcmFuZCBsZW5ndGgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBH
UFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yLCByZXN1bHRHUFIsIGJh
c2UuZ3ByKCksIGxlbmd0aC5ncHIoKSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0R2VuZXJpY1Byb3BlcnR5
RW51bWVyYXRvcjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGxlbmd0aCh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0
b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0R2VuZXJp
Y1Byb3BlcnR5RW51bWVyYXRvciwgcmVzdWx0R1BSLCBiYXNlLmdwcigpLCBsZW5ndGguZ3ByKCks
IGVudW1lcmF0b3IuZ3ByKCkpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldEVudW1lcmF0b3JQbmFtZTogewor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQ
UlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQyIHJlc3VsdFRh
Zyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdH
UFIgPSByZXN1bHRUYWcuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0g
cmVzdWx0UGF5bG9hZC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgCisgICAgICAgICAg
ICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsK
KworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TnVsbFRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgaW5Cb3VuZHMu
bGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2hHUFIsIGluZGV4R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6U2NhbGVQdHIpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1
bHRUYWdHUFIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAgICAgU3BlY3VsYXRl
SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQUiwgaW5kZXguZ3ByKCkpOworICAgICAgICBj
ZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAg
IGNhc2UgRm9yY2VPU1JFeGl0OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
CiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNN
b2RlLmgiCiAKQEAgLTQ1ODMsNiArNDU4NCwyNDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEdldEVu
dW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRFbnVtZXJhYmxlTGVu
Z3RoLCByZXN1bHRHUFIsIGJhc2UuZ3ByKCkpOworICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBIYXNHZW5lcmljUHJv
cGVydHk6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSwgcmVzdWx0
R1BSLCBiYXNlLmdwcigpLCBwcm9wZXJ0eS5ncHIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6IHsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMp
OworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIsIAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgbW92
ZVRydWVUbyhyZXN1bHRHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgb3Bl
cmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5LCByZXN1bHRHUFIsIGJhc2VHUFIsIHByb3BlcnR5R1BS
KSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5k
ZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgQXJyYXlN
b2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUo
KSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAgICAgICAgIGlmICht
b2RlLmlzSW5Cb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBvdXRPZkJvdW5kcyk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisKKyAgICAg
ICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKKyAgICAgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0R1BS
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZTogeworICAgICAgICAgICAgQVNTRVJUKCEhbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
ICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgMCwgb3V0T2ZCb3VuZHMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworCisgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgaW5kZXhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgc2NyYXRjaEZQUik7CisgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCwgc2NyYXRjaEZQUiwgc2NyYXRjaEZQUikpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgICAgICBBU1NFUlQoISFub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOworCisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9
IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAw
LCBvdXRPZkJvdW5kcyk7CisgICAgICAgICAgICBlbHNlICAgIAorICAgICAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICBtb3ZlVHJ1ZVRv
KHJlc3VsdEdQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OiB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5LCByZXN1bHRHUFIsIGJhc2VHUFIsIGluZGV4R1BSKSk7CisgICAgICAgIAor
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Cisg
ICAgICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICAgICAgRWRnZSYgcHJvcGVydHlFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGls
ZChub2RlLCAxKTsKKyAgICAgICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJB
cmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgRWRnZSYgZW51bWVyYXRvckVkZ2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOworCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJh
bmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
ZW51bWVyYXRvcih0aGlzLCBlbnVtZXJhdG9yRWRnZSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1
bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcg
ZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gx
LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKwor
ICAgICAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoMUdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdyb25nU3RydWN0
dXJlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAg
ICAgIHNjcmF0Y2gxR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICAvLyBJZiBpbmRl
eCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRo
ZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91
dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIAorICAgICAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KGJhc2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7Cisg
ICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQu
c3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaDFHUFIp
OworICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoMUdQUik7CisgICAgICAgIG1faml0LnNpZ25F
eHRlbmQzMlRvUHRyKHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUik7CisgICAgICAgIGludDMyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0
ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Cisg
ICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gyR1BS
LCBzY3JhdGNoMUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSksIHJlc3VsdEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0R1BSLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikp
OworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgR2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgbGVuZ3RoKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvciwg
cmVzdWx0R1BSLCBiYXNlLmdwcigpLCBsZW5ndGguZ3ByKCkpOworICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldEdl
bmVyaWNQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFu
ZCBsZW5ndGgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IsIHJlc3VsdEdQUiwgYmFzZS5ncHIoKSwg
bGVuZ3RoLmdwcigpLCBlbnVtZXJhdG9yLmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHZXRFbnVtZXJh
dG9yUG5hbWU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlz
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgICAgICBHUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVy
YXRvci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBzY3JhdGNoMUdQUiA9IHNjcmF0Y2gxLmdwcigpOworICAgICAgICBHUFJSZWcg
c2NyYXRjaDJHUFIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbkJvdW5kcyA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgCisgICAgICAgICAgICBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwg
cmVzdWx0R1BSKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworICAgICAgICBpbkJvdW5kcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHNjcmF0
Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaDJHUFIpOworICAg
ICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMkdQUiwgc2NyYXRjaDJHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMUdQ
Uiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsK
KworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBUb0luZGV4U3Ry
aW5nOiB7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCByZXN1bHRHUFIs
IGluZGV4LmdwcigpKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKICNpZiBFTkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNh
c2UgQ2hlY2tUaWVyVXBJbkxvb3A6IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9u
ZSA9IG1faml0LmJyYW5jaEFkZDMyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDM0
LDYgKzEwMzQsMTYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0cihjZWxsKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ1ogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgewor
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihDX0pJVE9wZXJhdGlvbl9FQ1pDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0
aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNl
bGwpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgVHJ1c3RlZEltbVB0cihjZWxsKSk7CkBAIC0xMTMyLDYgKzExNDIsMTEgQEAgcHVibGljOgog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihaX0pJVE9wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlLCB0eXBlbmFtZSBBcmd1bWVudFR5cGUxPgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oRnVuY3Rpb25UeXBlIG9wZXJhdGlvbiwgTm9SZXN1bHRUYWcsIEFyZ3VtZW50
VHlwZTEgYXJnMSkKQEAgLTEyNDgsNiArMTI2MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
SklUT3BlcmF0aW9uX0VDWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VTc2lDSSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIGFyZzEsIGNv
bnN0IFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgYXJnMSwgVHJ1c3RlZEltbVB0
cih1aWQpKTsKQEAgLTEyNjMsNiArMTI4MywxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikK
KyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKQSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAg
LTEzMTEsNiArMTM0MSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKSkMgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpaQyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVn
IGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0pJVE9wZXJhdGlvbl9KIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
cyhhcmcxKTsKQEAgLTE0ODQsNiArMTUyOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXls
b2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQ
UlJlZyByZXN1bHRUYWcsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRP
cGVyYXRpb25fRUpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyKQor
ICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJC
SVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKc3NaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAg
LTE1MTUsNiArMTU3MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGNlbGwpKTsKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfSklUT3BlcmF0aW9uX0VDWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FU3NpQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBH
UFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBhcmcx
LCBUcnVzdGVkSW1tUHRyKHVpZCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDMsNiArMzAzLDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX3Jlc29sdmVfc2NvcGUpCiAgICAgICAg
IERFRklORV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF90
b19zY29wZSkKKworICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQor
ICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2dlbmVyaWNfcHJvcGVydHkpCisgICAgICAgIERFRklO
RV9PUChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorICAgICAgICBERUZJTkVfT1Aob3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkpCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZGlyZWN0X3BuYW1l
KQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9y
KQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcikK
KyAgICAgICAgREVGSU5FX09QKG9wX25leHRfZW51bWVyYXRvcl9wbmFtZSkKKyAgICAgICAgREVG
SU5FX09QKG9wX3RvX2luZGV4X3N0cmluZykKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KQEAgLTQyMCw2ICs0MzAs
OSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3Bfc3ViKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfdG9fbnVt
YmVyKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfdG9fcHJpbWl0aXZlKQorICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpCisgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KQorICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2RpcmVjdF9wbmFtZSkKIAogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfcmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2dldF9mcm9tX3Njb3BlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAx
NzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjAsNiArMjIwLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUp
OwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShWTSogdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQor
ICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAg
ICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIENv
ZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwoVk0qIHZtLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXZtLT5jYW5Vc2VKSVQoKSkgewpAQCAtMjQ3LDYg
KzI1NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0
QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKICAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQ
dHIsIEpJVEFycmF5TW9kZSk7CiAKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwor
CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChWTSosIGJvb2wgaXND
b25zdHJ1Y3QgPSBmYWxzZSk7CiAgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRp
dmVDYWxsKFZNKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
UGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwpAQCAt
MzI3LDYgKzMzNiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gUHJvcGVydHkgaXMg
aW50LWNoZWNrZWQgYW5kIHplcm8gZXh0ZW5kZWQuIEJhc2UgaXMgY2VsbCBjaGVja2VkLgogICAg
ICAgICAvLyBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4gUmV0dXJucyB0aGUgc2xvdyBj
YXNlcy4gRmFsbC10aHJvdWdoCiAgICAgICAgIC8vIGNhc2UgY29udGFpbnMgcmVzdWx0IGluIHJl
Z1QwLCBhbmQgaXQgaXMgbm90IHlldCBwcm9maWxlZC4KKyAgICAgICAgSnVtcExpc3QgZW1pdElu
dDMyTG9hZChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
IHsgcmV0dXJuIGVtaXRDb250aWd1b3VzTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgSW50MzJT
aGFwZSk7IH0KKyAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKKyAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNM
b2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4
cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOworICAgICAgICBKdW1wTGlzdCBlbWl0QXJy
YXlTdG9yYWdlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOworICAg
ICAgICBKdW1wTGlzdCBlbWl0TG9hZEZvckFycmF5TW9kZShJbnN0cnVjdGlvbiosIEpJVEFycmF5
TW9kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisKICAgICAgICAgSnVtcExpc3QgZW1pdElu
dDMyR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKSB7IHJldHVybiBlbWl0Q29udGlndW91c0dldEJ5VmFsKGluc3RydWN0aW9uLCBiYWRUeXBl
LCBJbnQzMlNoYXBlKTsgfQogICAgICAgICBKdW1wTGlzdCBlbWl0RG91YmxlR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1p
dENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlID0gQ29udGlndW91c1NoYXBlKTsKQEAgLTU0MCw2
ICs1NTUsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVj
dGVkX2xvYWQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91cnNoaWZ0KEluc3RydWN0aW9uKik7
CisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgoSW5zdHJ1Y3Rpb24q
KTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2hhc19nZW5lcmljX3Byb3BlcnR5KEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVj
dGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJh
dG9yKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9w
ZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXh0
X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX3Rv
X2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiopOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
YWRkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2JpdGFuZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTU5Myw2ICs2MTcsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dW5zaWduZWQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNf
aW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29s
dmVfc2NvcGUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9mcm9tX3Nj
b3BlKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDUwIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCisjaWYgVVNFKEpTVkFMVUU2NCkKK2lubGluZSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXREb3Vi
bGVMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICBtb3ZlRG91YmxlVG82NChmcFJlZ1Qw
LCByZWdUMCk7CisgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAg
cmV0dXJuIHNsb3dDYXNlczsKK30KKyNlbHNlCitpbmxpbmUgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0RG91
YmxlTG9hZChpbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgbW92ZURvdWJsZVRvSW50cyhmcFJl
Z1QwLCByZWdUMCwgcmVnVDEpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisjZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkKKworQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
SklUOjplbWl0TG9hZEZvckFycmF5TW9kZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAg
IHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgY2FzZSBKSVRJbnQzMjoKKyAgICAgICAgcmV0dXJu
IGVtaXRJbnQzMkxvYWQoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICBjYXNlIEpJ
VERvdWJsZToKKyAgICAgICAgcmV0dXJuIGVtaXREb3VibGVMb2FkKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICByZXR1cm4gZW1p
dENvbnRpZ3VvdXNMb2FkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgY2FzZSBK
SVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHJldHVybiBlbWl0QXJyYXlTdG9yYWdlTG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworaW5saW5l
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5
cGUgZXhwZWN0ZWRTaGFwZSkKK3sKKyAgICByZXR1cm4gZW1pdENvbnRpZ3VvdXNMb2FkKGluc3Ry
dWN0aW9uLCBiYWRUeXBlLCBleHBlY3RlZFNoYXBlKTsKK30KKworaW5saW5lIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgcmV0dXJuIGVtaXRB
cnJheVN0b3JhZ2VMb2FkKGluc3RydWN0aW9uLCBiYWRUeXBlKTsKK30KKwogQUxXQVlTX0lOTElO
RSBib29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVEb3VibGUoaW50IHNyYykKIHsK
ICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNEb3VibGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsMTAgKzM2LDEyIEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlJlcGF0
Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIApAQCAtMTE3Niw2ICsxMTc4LDIzNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgY2FsbE9wZXJhdGlvbihXaXRoUHJvZmlsZSwgb3Bl
cmF0aW9uR2V0QnlWYWxHZW5lcmljLCBkc3QsIHJlZ1QxLCByZWdUMCwgcmVnVDMsIHJlZ1QyKTsK
IH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2Fs
bCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
YmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0
b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWRQYXls
b2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7
CisKKyAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOworCisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAg
ICAKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUJvb2wo
ZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7
CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2dl
bmVyaWNfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2hhc19nZW5lcmljX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2Rl
IGFycmF5TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5k
ZXg7CisgICAgCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIAorICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1l
bnRzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0
LgorICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigx
KSwgcmVnVDApOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fdm0sIHRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBwYXRjaEJ1ZmZl
ci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVs
QXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkp
KS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAg
ICAKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgCisgICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBoYXNfaW5kZXhlZF9w
cm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVC
bG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpKTsKKyAgICAKKyAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0Nh
bGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5R2VuZXJpYykpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAgICBlbWl0TG9hZFBh
eWxvYWQoYmFzZSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
KTsKKworICAgIGVtaXRMb2FkUGF5bG9hZChwcm9wZXJ0eSwgcmVnVDEpOworCisgICAgLy8gVGhp
cyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQz
Mi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCisgICAgLy8gV2UgY2hlY2sg
dGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0
aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKKyAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBz
aW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhl
IHRvdGFsIGFsbG9jYXRpb24KKyAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4g
QXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5k
aW5nIHRoZSB2YWx1ZQorICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3Mg
dXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRo
YW4gc2lnbgorICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUt
dGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgorICAgIHplcm9FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7CisKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1QyLCBwcm9maWxlKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1h
c2spLCByZWdUMik7CisKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShw
cm9maWxlKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisKKyAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4K
KyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAz
MyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KKyAg
ICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
CisKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OworICAgIAorICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIGVtaXRTdG9yZUJv
b2woZHN0LCByZWdUMCk7CisgICAgCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQo
QnlWYWxDb21waWxhdGlvbkluZm8obV9ieXRlY29kZU9mZnNldCwgYmFkVHlwZSwgbW9kZSwgZG9u
ZSkpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGU7CisgICAgCisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJh
c2UgY2VsbCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVj
aworICAgIAorICAgIEp1bXAgc2tpcFByb2ZpbGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIGVtcHR5IHZhbHVlCisgICAgCisgICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91
bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgCisgICAgc2tpcFByb2ZpbGluZy5saW5rKHRo
aXMpOworICAgIAorICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKyAgICAKKyAgICBlbWl0
TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMSwgcmVnVDAsIHJlZ1QzLCByZWdUMik7CisKKyAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0
aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVj
dGlvbkluZGV4Kys7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9w
ZXJhbmQ7CisKKyAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgZW1pdExvYWRQ
YXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFz
ZSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgZW1pdExvYWRQYXlsb2FkKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMik7CisgICAgLy8gSWYgaW5kZXggaXMgbGVz
cyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3Mg
YW4gaW5saW5lIGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgbG9hZDMy
KEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAs
IHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5
bG9hZCkpLCByZWdUMCk7CisgICAgCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgLy8g
T3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlz
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKKyAgICBzdWIzMihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMik7CisgICAgbmVnMzIo
cmVnVDIpOworICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8
aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRp
bWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJl
Z1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7CisgICAgCisgICAgZG9uZS5saW5r
KHRoaXMpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2RpcmVjdF9w
bmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsK
KyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUp
OworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9z
dHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsK
KyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2Vu
ZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBz
bG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXh0X2VudW1lcmF0
b3JfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgSnVt
cCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzTGVuZ3RoT2Zmc2V0KCkpKTsK
KworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKKworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
KyAgICBpbkJvdW5kcy5saW5rKHRoaXMpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQo
KSksIHJlZ1QxKTsKKyAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIHRpbWVzUHRy
KCkpLCByZWdUMCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJl
Z1QyKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwg
cmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90b19pbmRleF9zdHJpbmcoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7
CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiwxMSBAQAog
I2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNp
bmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlJlcGF0
Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKIApAQCAtMTIxMCw2ICsxMjEyLDIzNSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FwdHVyZWRfbW92KEluc3RyCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAorI2lm
IFVTRShKU1ZBTFVFNjQpCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBp
bnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOworCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihW
YWx1ZVRydWUpLCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQoreworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOworICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19nZW5lcmljX3Byb3BlcnR5KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9oYXNfZ2VuZXJp
Y19wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7Cisg
ICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAgIAorICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KKyAgICBKdW1wTGlzdCBz
bG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5
TW9kZSwgYmFkVHlwZSk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgdGhpcywgbV9jb2RlQmxvY2spOworICAgIAor
ICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52
YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRo
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFk
ZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9T
bG93UGF0aCkpOworICAgIAorICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsK
KyAgICAKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RV
QigKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5l
IGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAg
IAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFi
ZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihv
cGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
aW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9w
ZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIAor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEp
OworCisgICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4
dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCisg
ICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRo
ZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKKyAgICAvLyBudW1i
ZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGlu
dG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KKyAgICAvLyBzaXplIGlzIGFsd2F5cyBs
ZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3Jy
ZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQorICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNz
YXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBl
eHRlbmQgcmF0aGVyIHRoYW4gc2lnbgorICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBp
dCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgorICAgIHplcm9F
eHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1No
YXBlTWFzayksIHJlZ1QyKTsKKworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlN
b2RlKHByb2ZpbGUpOworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKworICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1l
bnRzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0
LgorICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisKKyAgICBhZGRTbG93
Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIAorICAgIExh
YmVsIGRvbmUgPSBsYWJlbCgpOworICAgIAorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2RlLCBkb25lKSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVy
dHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICAKKyAg
ICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNr
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCisgICAgCisgICAg
SnVtcCBza2lwUHJvZmlsaW5nID0ganVtcCgpOworICAgIAorICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1w
dHkgdmFsdWUKKyAgICAKKyAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2Fz
ZShwcm9maWxlKTsKKyAgICAKKyAgICBza2lwUHJvZmlsaW5nLmxpbmsodGhpcyk7CisgICAgCisg
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworICAgIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgcmVnVDAsIHJlZ1QxKTsKKworICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xv
d1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAg
IGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKworICAg
IC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJh
c2UpOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAvLyBDb21wdXRlIHRoZSBv
ZmZzZXQKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgLy8g
SWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9y
YWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKKyAgICAKKyAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAg
IG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSksIHJlZ1QxKTsKKyAgICBuZWczMihyZWdUMSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKKyAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7CisgICAgCisg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisKKyAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2dldF9kaXJlY3RfcG5hbWUpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2dldF9zdHJ1Y3R1cmVfcHJvcGVydHlfZW51bWVyYXRvcihJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X3N0cnVjdHVyZV9wcm9w
ZXJ0eV9lbnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9l
bnVtZXJhdG9yKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9uZXh0X2VudW1lcmF0b3JfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAg
aW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVs
b3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFByb3BlcnR5TmFtZXNMZW5ndGhPZmZzZXQoKSkpOworCisgICAgbW92ZShUcnVzdGVkSW1tMzIo
VmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIGluQm91
bmRzLmxpbmsodGhpcyk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF90b19pbmRleF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKK30KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcg
QEAKICNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUu
aCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdGFja0lubGluZXMuaCIKICNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgpAQCAtMTQ5OCw2ICsxNDk5LDY0IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAgICAgCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkKK3sKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFz
ZSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNj
cmlwdCk7CisgICAgCisgICAgQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKKyAgICBBU1NF
UlQoc3Vic2NyaXB0LmlzVUludDMyKCkpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KGJhc2VWYWx1ZSk7CisgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworCisgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKTsK
KyAgICBBU1NFUlQoYnl0ZWNvZGVPZmZzZXQpOworICAgIEJ5VmFsSW5mbyYgYnlWYWxJbmZvID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmdldEJ5VmFsSW5mbyhieXRlY29kZU9mZnNldCAtIDEpOworICAg
IEFTU0VSVCghYnlWYWxJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICAKKyAgICBpZiAoaGFzT3B0aW1p
emFibGVJbmRleGluZyhvYmplY3QtPnN0cnVjdHVyZSh2bSkpKSB7CisgICAgICAgIC8vIEF0dGVt
cHQgdG8gb3B0aW1pemUuCisgICAgICAgIEpJVEFycmF5TW9kZSBhcnJheU1vZGUgPSBqaXRBcnJh
eU1vZGVGb3JTdHJ1Y3R1cmUob2JqZWN0LT5zdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgaWYgKGFy
cmF5TW9kZSAhPSBieVZhbEluZm8uYXJyYXlNb2RlKSB7CisgICAgICAgICAgICBKSVQ6OmNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgJmJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOworICAgICAg
ICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlm
ICghZGlkT3B0aW1pemUpIHsKKyAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0
aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAg
Ly8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3ZSBmYWlsZWQgdG8gcGF0
Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QKKyAgICAgICAgLy8gdGhhdCBpbnRlcmNlcHRzIGlu
ZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2Vz
CisgICAgICAgIC8vIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVjdHMs
IHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZgorICAgICAgICAvLyBvcHBvcnR1bml0
eSBmb3IgdXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhp
Yy4KKyAgICAgICAgaWYgKCsrYnlWYWxJbmZvLnNsb3dQYXRoQ291bnQgPj0gMTAKKyAgICAgICAg
ICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKKyAgICAgICAg
ICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgorICAgICAgICAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRV
Uk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVy
aWMpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHN1YnNjcmlwdC5hc1VJbnQzMigp
KSkpOworfQorICAgIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpCit7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2Up
OworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3Jp
cHQpOworICAgIAorICAgIEFTU0VSVChiYXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgQVNTRVJU
KHN1YnNjcmlwdC5pc1VJbnQzMigpKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVj
dChiYXNlVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVj
dC0+aGFzUHJvcGVydHkoZXhlYywgc3Vic2NyaXB0LmFzVUludDMyKCkpKSk7Cit9CisgICAgCiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTE3OTgsNiAr
MTg1Nyw3MiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVk1IYW5kbGVFeGNlCiAgICAg
Z2VuZXJpY1Vud2luZCh2bSwgZXhlYywgdm0tPmV4Y2VwdGlvbigpKTsKIH0KIAoraW50MzJfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVj
LCBKU0NlbGwqIGJhc2VDZWxsKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTT2JqZWN0KiBiYXNl
ID0gYmFzZUNlbGwtPnRvT2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CisgICAgcmV0dXJuIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0RW51bWVyYWJsZUxlbmd0aChl
eGVjLCBiYXNlKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25I
YXNHZW5lcmljUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAg
ICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CisKKyAgICBKU09iamVjdCogYmFzZSA9IGJh
c2VWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBhc1N0cmluZyhwcm9wZXJ0eU5hbWUpLT50b0lk
ZW50aWZpZXIoZXhlYykpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlQ2Vs
bCwgaW50MzJfdCBzdWJzY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNPYmplY3QqIG9i
amVjdCA9IGJhc2VDZWxsLT50b09iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aGFzUHJv
cGVydHkoZXhlYywgc3Vic2NyaXB0KSkpOworfQorICAgIAorSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogY2VsbCwgaW50MzJfdCBsZW5ndGgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgICAg
IAorICAgIEpTT2JqZWN0KiBiYXNlID0gY2VsbC0+dG9PYmplY3QoZXhlYywgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NFUlQobGVuZ3RoID49IDApOworCisgICAgcmV0dXJu
IHN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoZXhlYywgYmFzZSwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGxlbmd0aCkpOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFz
ZUNlbGwsIGludDMyX3QgbGVuZ3RoLCBKU0NlbGwqIHN0cnVjdHVyZUVudW1lcmF0b3JDZWxsKQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZUNlbGwtPnRv
T2JqZWN0KGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgQVNTRVJUKGxl
bmd0aCA+PSAwKTsKKworICAgIHJldHVybiBnZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihl
eGVjLCBiYXNlLCBsZW5ndGgsIGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihzdHJ1
Y3R1cmVFbnVtZXJhdG9yQ2VsbCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk5leHRFbnVtZXJhdG9yUG5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGVu
dW1lcmF0b3JDZWxsLCBpbnQzMl90IGluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqPihlbnVtZXJhdG9yQ2VsbCk7CisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9
IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOworfQor
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIGludDMyX3QgaW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgaW5kZXgpLnN0cmluZygpKTsKK30KKwog
fSAvLyBleHRlcm4gIkMiCiAKIC8vIE5vdGU6IGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhl
Y1N0YXRlKCkgbmVlZHMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTYsMTAgKzk2LDEzIEBAIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkoK
IHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VD
QykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpf
SklUT3BlcmF0aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwor
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVyYXRpb25fRUNa
KShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VEQSkoRXhlY1N0YXRlKiwgZG91YmxlLCBK
U0FycmF5Kik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9w
ZXJhdGlvbl9FRSkoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKik7CiB0eXBlZGVmIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSSkoRXhlY1N0YXRlKiwgU3RyaW5n
SW1wbCopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSl9KSVRPcGVy
YXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKWikoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIGludDMyX3QpOwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICgqSl9KSVRPcGVyYXRpb25fRUpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJh
dGlvbl9FSkEpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBKU0FycmF5Kik7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gKCpKX0pJVE9wZXJhdGlvbl9FSklkYykoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXIqKTsKIHR5cGVkZWYgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiAoKkpfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKQEAgLTExOCw5ICsxMjEsMTQgQEAg
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OICgqSgogdHlwZWRlZiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGlu
dDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9F
QykoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAo
KkNfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7Cit0eXBl
ZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VDWkMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIGludDMyX3QsIEpTQ2VsbCopOwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCop
OwogdHlwZWRlZiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSWNmKShF
eGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFU
SU9OICgqQ19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKK3R5
cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpaKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJB
VElPTiAoKkNfSklUT3BlcmF0aW9uX0VKWkMpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBp
bnQzMl90LCBKU0NlbGwqKTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRP
cGVyYXRpb25fRUpKQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBKU0NlbGwqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRp
b25fRUpzc1N0KShFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogdHlwZWRlZiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSnNzSnNzKShFeGVjU3RhdGUq
LCBKU1N0cmluZyosIEpTU3RyaW5nKik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAo
KkNfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MpKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqLCBKU1N0cmluZyopOwpAQCAtMTM0LDYgKzE0Miw3IEBAIHR5cGVkZWYgZG91YmxlIEpJVF9P
UEVSQVRJT04gKCpEX0pJVE9wZXIKIHR5cGVkZWYgZG91YmxlIEpJVF9PUEVSQVRJT04gKCpEX0pJ
VE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBpbnQz
Ml90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBp
bnQzMl90IEpJVF9PUEVSQVRJT04gKCpaX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKK3R5
cGVkZWYgaW50MzJfdCBKSVRfT1BFUkFUSU9OICgqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0
aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHNpemVfdCBK
SVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FSkop
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CkBAIC0yNzcsNiAr
Mjg2LDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbERlZmF1bHQoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
R2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQXJndW1lbnRzKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlJZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSBiYXNlLCBjb25zdCBJZGVudGlmaWVyKikgV1RGX0lOVEVSTkFMOwpAQCAtMzAwLDYgKzMxMSwx
NCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NSV3JpdGVCYXJyCiAKIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ29uc3QoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rp
b24qKTsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEVudW1lcmFibGVMZW5n
dGgoRXhlY1N0YXRlKiwgSlNDZWxsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKik7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0R2Vu
ZXJpY1Byb3BlcnR5RW51bWVyYXRvcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90LCBKU0Nl
bGwqKTsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV4dEVudW1lcmF0
b3JQbmFtZShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25Ub0luZGV4U3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOworCiB9IC8v
IGV4dGVybiAiQyIKIAogaW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0Zv
cigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcz
LDE1ICsxNzMsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbgog
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKG1f
Ynl0ZWNvZGVPZmZzZXQsIGJhZFR5cGUsIG1vZGUsIGRvbmUpKTsKIH0KIAotSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRDb250aWd1b3VzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgCiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKGV4cGVjdGVkU2hhcGUpKTsKLSAgICAKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAKICAgICBsb2FkMzIoQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRhZwogICAgIGxvYWQzMihCYXNlSW5kZXgocmVn
VDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7
CkBAIC0xODksMzIgKzE4NywyNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNH
ZXRCeVZhCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXREb3VibGVHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCitK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKICAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoRG91
YmxlU2hhcGUpKTsKLSAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMy
KEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKLSAgICAKICAgICBsb2FkRG91YmxlKEJhc2VJbmRleChyZWdUMywg
cmVnVDIsIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QwKSk7Ci0g
ICAgbW92ZURvdWJsZVRvSW50cyhmcFJlZ1QwLCByZWdUMCwgcmVnVDEpOwogICAgIAogICAgIHJl
dHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCiAgICAgYWRkMzIo
VHJ1c3RlZEltbTMyKC1BcnJheVN0b3JhZ2VTaGFwZSksIHJlZ1QxLCByZWdUMyk7CiAgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3RlZEltbTMyKFNsb3dQ
dXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3RvcmFnZVNoYXBlKSk7Ci0gICAgCiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRy
ZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAgIAog
ICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCiAgICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSks
IHJlZ1QwKTsgLy8gcGF5bG9hZAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZp
c2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24KICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhtX2J5dGVjb2RlT2Zmc2V0LCBiYWRUeXBlLCBtb2Rl
LCBkb25lKSk7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlR2V0QnlWYWwoSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQorSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXREb3VibGVMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCkBAIC0xNjAsMTMgKzE2MCwxMSBAQCBKSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUdldEJ5VmFsKEluCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CiAgICAgbG9hZERvdWJsZShCYXNlSW5kZXgocmVnVDIs
IHJlZ1QxLCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hEb3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMCkpOwot
ICAgIG1vdmVEb3VibGVUbzY0KGZwUmVnVDAsIHJlZ1QwKTsKLSAgICBzdWI2NCh0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICAKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1K
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQorSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQogewogICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKICAgICAKQEAgLTE3OSw3ICsxNzcsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdENvbnRpZ3VvdXNHZXRCeVZhCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxv
YWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEwLDYgKzEyMTAsNTAgQEAgX2xsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmU6CiBf
bGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lOgogICAgIG5hdGl2ZUNhbGxUcmFtcG9s
aW5lKE5hdGl2ZUV4ZWN1dGFibGU6Om1fY29uc3RydWN0b3IpCiAKK19sbGludF9vcF9nZXRfZW51
bWVyYWJsZV9sZW5ndGg6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChf
c2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCkKKyAgICBkaXNwYXRjaCgzKQorCitfbGxp
bnRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHk6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNh
bGxTbG93UGF0aChfc2xvd19wYXRoX2hhc19pbmRleGVkX3Byb3BlcnR5KQorICAgIGRpc3BhdGNo
KDUpCisKK19sbGludF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5OgorICAgIHRyYWNlRXhlY3V0
aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KQorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9vcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eToKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfaGFzX2dlbmVy
aWNfcHJvcGVydHkpCisgICAgZGlzcGF0Y2goNCkKKworX2xsaW50X29wX2dldF9kaXJlY3RfcG5h
bWU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2dl
dF9kaXJlY3RfcG5hbWUpCisgICAgZGlzcGF0Y2goNykKKworX2xsaW50X29wX2dldF9zdHJ1Y3R1
cmVfcHJvcGVydHlfZW51bWVyYXRvcjoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNs
b3dQYXRoKF9zbG93X3BhdGhfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAg
IGRpc3BhdGNoKDQpCisKK19sbGludF9vcF9nZXRfZ2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9y
OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9nZXRf
Z2VuZXJpY19wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAgIGRpc3BhdGNoKDUpCisKK19sbGludF9v
cF9uZXh0X2VudW1lcmF0b3JfcG5hbWU6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGNhbGxT
bG93UGF0aChfc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSkKKyAgICBkaXNwYXRjaCg0
KQorCitfbGxpbnRfb3BfdG9faW5kZXhfc3RyaW5nOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAg
ICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCisgICAgZGlzcGF0Y2go
MykKIAogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2ZW4gdGhvdWdoIHdl
IGRvbid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMgc2hvdWxkIG5ldmVy
IGFyaXNlIHdoZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNzZXJ0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyODAs
NiArMTI4MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgRm9ySW5Ob2RlKFZNKiwgY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRGVjb25zdHJ1Y3Rpb25QYXR0ZXJuTm9kZSosIEV4cHJlc3Np
b25Ob2RlKiwgU3RhdGVtZW50Tm9kZSopOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUmVnaXN0
ZXJJRCogdHJ5R2V0Qm91bmRMb2NhbChCeXRlY29kZUdlbmVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRMb29wSGVhZGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgdm9pZCBlbWl0TXVsdGlMb29wQnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiBkc3QpOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwogICAgIH07
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50cy5j
cHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIEFyZ3Vt
ZW50czo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7CiAgICAg
fQotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpIHsKKyAgICBpZiAo
c2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkgewogICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY2FsbGVlKTsKICAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE3MTQ4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw2ICs4MiwxMiBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHR5cGVk
ZWYgdm9pZCAoKkdldFByb3BlcnR5TmFtZXNGdW5jdGlvblB0cikoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgR2V0UHJvcGVy
dHlOYW1lc0Z1bmN0aW9uUHRyIGdldFByb3BlcnR5TmFtZXM7CiAKKyAgICB0eXBlZGVmIHVpbnQz
Ml90ICgqR2V0RW51bWVyYWJsZUxlbmd0aEZ1bmN0aW9uUHRyKShFeGVjU3RhdGUqLCBKU09iamVj
dCopOworICAgIEdldEVudW1lcmFibGVMZW5ndGhGdW5jdGlvblB0ciBnZXRFbnVtZXJhYmxlTGVu
Z3RoOworCisgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldFN0cnVjdHVyZVByb3Bl
cnR5TmFtZXM7CisgICAgR2V0UHJvcGVydHlOYW1lc0Z1bmN0aW9uUHRyIGdldEdlbmVyaWNQcm9w
ZXJ0eU5hbWVzOworCiAgICAgdHlwZWRlZiBTdHJpbmcgKCpDbGFzc05hbWVGdW5jdGlvblB0ciko
Y29uc3QgSlNPYmplY3QqKTsKICAgICBDbGFzc05hbWVGdW5jdGlvblB0ciBjbGFzc05hbWU7CiAK
QEAgLTEzNyw2ICsxNDMsOSBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgICAgICAmQ2xhc3NO
YW1lOjpnZXRPd25Qcm9wZXJ0eU5hbWVzLCBcCiAgICAgICAgICZDbGFzc05hbWU6OmdldE93bk5v
bkluZGV4UHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpnZXRQcm9wZXJ0eU5h
bWVzLCBcCisgICAgICAgICZDbGFzc05hbWU6OmdldEVudW1lcmFibGVMZW5ndGgsIFwKKyAgICAg
ICAgJkNsYXNzTmFtZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcywgXAorICAgICAgICAmQ2xh
c3NOYW1lOjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcywgXAogICAgICAgICAmQ2xhc3NOYW1lOjpj
bGFzc05hbWUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6Y3VzdG9tSGFzSW5zdGFuY2UsIFwKICAg
ICAgICAgJkNsYXNzTmFtZTo6ZGVmaW5lT3duUHJvcGVydHksIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpT
TmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAj
aW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKQEAgLTU0Miw2ICs1NDMsMTA1IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9lbnRlcikKICAgICBFTkQoKTsKIH0KIAorU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0aCkKK3sKKyAgICBCRUdJTigpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKGpzTnVtYmVyKDApKTsKKworICAgIEpTT2Jq
ZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIFJFVFVSTihqc051bWJl
cihiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgoZXhlYywgYmFzZSkp
KTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2hhc19pbmRleGVkX3Byb3BlcnR5KQor
eworICAgIEJFR0lOKCk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBPUCgyKS5qc1ZhbHVlKCkudG9P
YmplY3QoZXhlYyk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IE9QKDMpLmpzVmFsdWUoKTsKKyAg
ICBwY1s0XS51LmFycmF5UHJvZmlsZS0+b2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5zdHJ1Y3R1cmUo
dm0pKTsKKyAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzIoKSk7CisgICAgUkVUVVJOKGpzQm9v
bGVhbihiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eS5hc1VJbnQzMigpKSkpOworfQor
CitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKK3sKKyAg
ICBCRUdJTigpOworICAgIEpTT2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1ZSgpLnRvT2JqZWN0
KGV4ZWMpOworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgQVNT
RVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
ZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihPUCg0KS5qc1Zh
bHVlKCkuYXNDZWxsKCkpOworICAgIGlmIChiYXNlLT5zdHJ1Y3R1cmUodm0pLT5pZCgpID09IGVu
dW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4o
dHJ1ZSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgYXNT
dHJpbmcocHJvcGVydHkuYXNDZWxsKCkpLT50b0lkZW50aWZpZXIoZXhlYykpKSk7Cit9CisKK1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSkKK3sKKyAgICBCRUdJ
TigpOworICAgIEpTT2JqZWN0KiBiYXNlID0gT1AoMikuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMp
OworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBPUCgzKS5qc1ZhbHVlKCk7CisgICAgYm9vbCByZXN1
bHQ7CisgICAgaWYgKHByb3BlcnR5LmlzU3RyaW5nKCkpCisgICAgICAgIHJlc3VsdCA9IGJhc2Ut
Pmhhc1Byb3BlcnR5KGV4ZWMsIGFzU3RyaW5nKHByb3BlcnR5LmFzQ2VsbCgpKS0+dG9JZGVudGlm
aWVyKGV4ZWMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMy
KCkpOworICAgICAgICByZXN1bHQgPSBiYXNlLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eS5h
c1VJbnQzMigpKTsKKyAgICB9CisgICAgUkVUVVJOKGpzQm9vbGVhbihyZXN1bHQpKTsKK30KKwor
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpCit7CisgICAgQkVHSU4o
KTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHByb3BlcnR5ID0gT1AoMykuanNWYWx1ZSgpOworICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmlu
ZygpKTsKKyAgICBSRVRVUk4oYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eS50b1N0cmluZyhl
eGVjKS0+dG9JZGVudGlmaWVyKGV4ZWMpKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9nZXRfc3RydWN0dXJlX3Byb3BlcnR5X2VudW1lcmF0b3IpCit7CisgICAgQkVHSU4oKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IE9QKDIpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNyZWF0ZSh2bSkpOworICAgICAgICAKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VW
YWx1ZS50b09iamVjdChleGVjKTsKKyAgICB1aW50MzJfdCBsZW5ndGggPSBPUCgzKS5qc1ZhbHVl
KCkuYXNVSW50MzIoKTsKKworICAgIFJFVFVSTihzdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKGV4ZWMsIGJhc2UsIGxlbmd0aCkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Z2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcikKK3sKKyAgICBCRUdJTigpOworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gT1AoMikuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y3JlYXRlKHZtKSk7CisgICAgCisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9P
YmplY3QoZXhlYyk7CisgICAgdWludDMyX3QgbGVuZ3RoID0gT1AoMykuanNWYWx1ZSgpLmFzVUlu
dDMyKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBzdHJ1Y3R1cmVFbnVtZXJhdG9y
ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KE9QKDQpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7CisKKyAgICBSRVRVUk4oZ2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoZXhlYywg
YmFzZSwgbGVuZ3RoLCBzdHJ1Y3R1cmVFbnVtZXJhdG9yKSk7Cit9CisKK1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9uZXh0X2VudW1lcmF0b3JfcG5hbWUpCit7CisgICAgQkVHSU4oKTsKKyAgICBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKj4oT1AoMikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICB1aW50MzJfdCBp
bmRleCA9IE9QKDMpLmpzVmFsdWUoKS5hc1VJbnQzMigpOworICAgIEpTU3RyaW5nKiBwcm9wZXJ0
eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBSRVRV
Uk4ocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOworfQorCitTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQoreworICAgIEJFR0lOKCk7CisgICAg
UkVUVVJOKGpzU3RyaW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgT1AoMikuanNWYWx1
ZSgpLmFzVUludDMyKCkpLnN0cmluZygpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkgfHwgRU5BQkxFKExMSU5UKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE3MTQ4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsNiArMjI2LDE1IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfaW4pOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9kZWxfYnlfdmFs
KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3RyY2F0KTsKIFNMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvcGVydHkpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvcGVydHkpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfZ2V0X3N0cnVjdHVyZV9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKK1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfZ2V0X2dlbmVyaWNfcHJvcGVydHlfZW51bWVyYXRvcik7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25leHRfZW51bWVyYXRvcl9wbmFtZSk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FbnVtZXJh
dGlvbk1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
bnVtZXJhdGlvbk1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0VudW1lcmF0aW9uTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEVudW1lcmF0aW9uTW9kZV9oCisjZGVmaW5lIEVudW1lcmF0
aW9uTW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIEVudW1lcmF0aW9uTW9kZSB7Cisg
ICAgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcywKKyAgICBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzQW5kU2tpcEpTT2JqZWN0LAorICAgIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMsCisgICAg
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdAorfTsKKworaW5saW5lIGJv
b2wgc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEluY2x1ZGVEb250RW51bVByb3BlcnRp
ZXM6CisgICAgY2FzZSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0Ogor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBzaG91bGRFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVz
KEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2Ug
RXhjbHVkZURvbnRFbnVtUHJvcGVydGllczoKKyAgICBjYXNlIEV4Y2x1ZGVEb250RW51bVByb3Bl
cnRpZXNBbmRTa2lwSlNPYmplY3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIHNob3VsZElu
Y2x1ZGVKU09iamVjdFByb3BlcnR5TmFtZXMoRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAg
IGNhc2UgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllczoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzQW5kU2tpcEpTT2JqZWN0OgorICAgIGNh
c2UgSW5jbHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIEVudW1lcmF0aW9uTW9kZSBtb2RlVGhhdFNr
aXBzSlNPYmplY3QoRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzOgorICAgICAgICByZXR1cm4gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllc0FuZFNraXBKU09iamVjdDsKKyAgICBjYXNlIEV4Y2x1ZGVE
b250RW51bVByb3BlcnRpZXM6CisgICAgICAgIHJldHVybiBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzQW5kU2tpcEpTT2JqZWN0OworICAgIGNhc2UgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllc0Fu
ZFNraXBKU09iamVjdDoKKyAgICBjYXNlIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXNBbmRTa2lw
SlNPYmplY3Q6CisgICAgICAgIHJldHVybiBtb2RlOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBFbnVtZXJhdGlvbk1vZGVfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAxNzE0ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTEsMTQgKzExMSwxNCBAQCB2b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0CiAgICAgSlNBY3RpdmF0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
QWN0aXZhdGlvbio+KG9iamVjdCk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IENhbGxG
cmFtZTo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPih0aGlzT2JqZWN0LT5tX3Jl
Z2lzdGVycykpOwotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgJiYg
IXRoaXNPYmplY3QtPmlzVG9ybk9mZigpICYmIChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2Vz
QXJndW1lbnRzKCkgfHwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dXNlc0V2YWwoKSkpCisgICAg
aWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkgJiYgIXRoaXNPYmplY3Qt
PmlzVG9ybk9mZigpICYmIChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkg
fHwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+dXNlc0V2YWwoKSkpCiAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpOwogCiAgICAgewogICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgp
LT5tX2xvY2spOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQobG9ja2VyKTsKICAgICAgICAgZm9yIChTeW1ib2xU
YWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2lu
KGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5n
ZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSAmJiBtb2RlICE9IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpCisgICAgICAgICAgICBpZiAoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRF
bnVtICYmICFzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0
LT52YWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
Nyw3ICsyMjcsNyBAQCB2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lCiB7
CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKIAot
ICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNob3Vs
ZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwogCiAgICAgSlNPYmplY3Q6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXIuY3BwCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBA
IHZvaWQgSlNBcnJheUJ1ZmZlcjo6Z2V0T3duTm9uSW5kZXhQcm9wZXIKIHsKICAgICBKU0FycmF5
QnVmZmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlCdWZmZXIqPihvYmplY3QpOwogICAg
IAotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCisgICAgaWYgKHNo
b3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCiAgICAgICAgIGFycmF5LmFkZChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7CiAgICAgCiAgICAgQmFzZTo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
Vmlldy5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3
IEBAIHZvaWQgSlNBcnJheUJ1ZmZlclZpZXc6OmdldE93bk5vbkluZGV4UHIKICAgICBKU0FycmF5
QnVmZmVyVmlldyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KG9iamVj
dCk7CiAgICAgCiAgICAgLy8gbGVuZ3RoL2J5dGVPZmZzZXQvYnl0ZUxlbmd0aCBhcmUgRG9udEVu
dW0sIGF0IGxlYXN0IGluIEZpcmVmb3guCi0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcykgeworICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1v
ZGUpKSB7CiAgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZU9mZnNl
dCk7CiAgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZUxlbmd0aCk7
CiAgICAgICAgIGFycmF5LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnVmZmVyKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkocmV2aXNpb24gMTcxNDg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM2LDQgKzIzNiwxOSBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gSlND
ZWxsOjpnZXRUCiAgICAgcmV0dXJuIDA7CiB9CiAKK3VpbnQzMl90IEpTQ2VsbDo6Z2V0RW51bWVy
YWJsZUxlbmd0aChFeGVjU3RhdGUqLCBKU09iamVjdCopCit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBKU0NlbGw6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9u
TW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEpT
Q2VsbDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogCiAjaW5jbHVkZSAiQ2FsbERhdGEuaCIKICNpbmNsdWRlICJDb25zdHJ1Y3REYXRhLmgi
CisjaW5jbHVkZSAiRW51bWVyYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1
ZGUgIkluZGV4aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgpAQCAtNDYsMTEgKzQ3LDYg
QEAgY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yOwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiBj
bGFzcyBTdHJ1Y3R1cmU7CiAKLWVudW0gRW51bWVyYXRpb25Nb2RlIHsKLSAgICBFeGNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzLAotICAgIEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMKLX07Ci0KIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQqIGFsbG9jYXRlQ2VsbChIZWFwJik7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkKiBhbGxvY2F0ZUNlbGwoSGVhcCYsIHNpemVfdCk7CiAKQEAgLTIwOSw2
ICsyMDUsMTEgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNI
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBzdGF0aWMg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKKyAgICBz
dGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3Ro
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisKICAgICBz
dGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIGN1c3RvbUhhc0luc3RhbmNlKEpTT2JqZWN0KiwgRXhlY1N0YXRl
KiwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIGJv
b2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNyArMzkwLDcg
QEAgYm9vbCBKU0Z1bmN0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYgogdm9pZCBKU0Z1bmN0
aW9uOjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7CiAgICAgSlNGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4ob2JqZWN0KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0
aW9uKCkgJiYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpIHsKKyAgICBpZiAo
IXRoaXNPYmplY3QtPmlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgJiYgc2hvdWxkSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcyhtb2RlKSkgewogICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgICAgICAvLyBNYWtlIHN1cmUgcHJvdG90eXBlIGhhcyBiZWVuIHJlaWZpZWQuCiAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsNyArNDExLDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Zwog
ewogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Kj4ob2JqZWN0KTsKICAgICAKLSAgICBpZiAobW9kZSA9PSBJbmNs
dWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChzaG91bGRJbmNsdWRlRG9udEVudW1Qcm9w
ZXJ0aWVzKG1vZGUpKQogICAgICAgICBhcnJheS5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCk7CiAgICAgCiAgICAgQmFzZTo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNP
YmplY3QsIGV4ZWMsIGFycmF5LCBtb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Q2xhc3NQcm9wZXJ0eU5hbWVzCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5iZWdpbih2bSk7
IGl0ZXIgIT0gdGFibGUtPmVuZCh2bSk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKCghKGl0
ZXItPmF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Q
cm9wZXJ0aWVzKSkgJiYgISgoaXRlci0+YXR0cmlidXRlcygpICYgQnVpbHRpbk9yRnVuY3Rpb24p
ICYmIGRpZFJlaWZ5KSkKKyAgICAgICAgICAgIGlmICgoIShpdGVyLT5hdHRyaWJ1dGVzKCkgJiBE
b250RW51bSkgfHwgc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkgJiYgISgo
aXRlci0+YXR0cmlidXRlcygpICYgQnVpbHRpbk9yRnVuY3Rpb24pICYmIGRpZFJlaWZ5KSkKICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpdGVyLmtleSgpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTEyODQsNiArMTI4NCwxMiBAQCBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZXJ0
eShFeGVjU3RhdGUqCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKK2Jvb2wgSlNPYmpl
Y3Q6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdAoreworICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOworICAgIHJldHVybiBjb25z
dF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJv
cGVydHlOYW1lLCBzbG90KTsKK30KKwogYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogewogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7CkBAIC0xNDY0LDYg
KzE0NzAsMTIgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdAogCiB2
b2lkIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogeworICAgIGlmICghc2hvdWxkSW5jbHVkZUpTT2JqZWN0UHJvcGVydHlOYW1l
cyhtb2RlKSkgeworICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIHRvIGdldCBub24taW5kZXhlZCBw
cm9wZXJ0aWVzIGZyb20gYW55IHN1YmNsYXNzZXMgb2YgSlNPYmplY3QgdGhhdCBoYXZlIHRoZW0u
CisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93bk5vbkluZGV4
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgLy8gQWRkIG51bWVyaWMgcHJvcGVydGllcyBmaXJzdC4g
VGhhdCBhcHBlYXJzIHRvIGJlIHRoZSBhY2NlcHRlZCBjb252ZW50aW9uLgogICAgIC8vIEZJWE1F
OiBGaWxsaW5nIFByb3BlcnR5TmFtZUFycmF5IHdpdGggYW4gaWRlbnRpZmllciBmb3IgZXZlcnkg
aW50ZWdlcgogICAgIC8vIGlzIGluY3JlZGlibHkgaW5lZmZpY2llbnQgZm9yIGxhcmdlIGFycmF5
cy4gV2UgbmVlZCBhIGRpZmZlcmVudCBhcHByb2FjaCwKQEAgLTE0ODAsNyArMTQ5Miw3IEBAIHZv
aWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgaWYgKCFidXR0
ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaSkpOworICAg
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoaSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTQ5Miw3ICsxNTA0LDcgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iagogICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV07CiAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE1MDMsNyArMTUxNSw3IEBA
IHZvaWQgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgdW5zaWdu
ZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBzdG9yYWdl
LT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2Vk
VmVjdG9yTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChzdG9yYWdlLT5tX3ZlY3Rvcltp
XSkKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIGkpKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3Jh
Z2UtPm1fc3BhcnNlTWFwLmdldCgpKSB7CkBAIC0xNTEyLDEzICsxNTI0LDEzIEBAIHZvaWQgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
ICAgICAgICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIGlmICht
b2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+dmFsdWUuYXR0cmlidXRl
cyAmIERvbnRFbnVtKSkKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcyhtb2RlKSB8fCAhKGl0LT52YWx1ZS5hdHRyaWJ1dGVzICYgRG9udEVudW0pKQog
ICAgICAgICAgICAgICAgICAgICBrZXlzLnVuY2hlY2tlZEFwcGVuZChzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaXQtPmtleSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpKTsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywga2V5c1tpXSkpOworICAgICAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGtleXNbaV0pOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTE1MjYsNyArMTUzOCw3IEBAIHZvaWQgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmoKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLSAgICAKKwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCkBAIC0xNTM0LDEyICsxNTQ2LDExIEBAIHZvaWQgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW0KIHsKICAgICBnZXRDbGFzc1Byb3BlcnR5
TmFtZXMoZXhlYywgb2JqZWN0LT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lcywgbW9kZSwgb2Jq
ZWN0LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwogCisgICAgaWYgKCFzaG91bGRJbmNsdWRl
SlNPYmplY3RQcm9wZXJ0eU5hbWVzKG1vZGUpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBib29sIGNhbkNhY2hlUHJvcGVydGllc0Zyb21TdHJ1
Y3R1cmUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7CiAgICAgb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT5nZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZSh2bSwgcHJvcGVydHlOYW1lcywgbW9kZSk7
Ci0KLSAgICBpZiAoY2FuQ2FjaGVQcm9wZXJ0aWVzRnJvbVN0cnVjdHVyZSkKLSAgICAgICAgcHJv
cGVydHlOYW1lcy5zZXROdW1DYWNoZWFibGVTbG90c0Zvck9iamVjdChvYmplY3QsIHByb3BlcnR5
TmFtZXMuc2l6ZSgpKTsKIH0KIAogZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CkBAIC0yNjUyLDQgKzI2NjMsODUgQEAgSlNPYmplY3QqIHRocm93VHlwZUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYwogICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlKSk7CiB9CiAKK3VpbnQzMl90IEpT
T2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1Y3R1cmUtPmhvbGVzTXVz
dEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCisgICAgICAgIHJldHVybiAwOworICAgIHN3aXRjaCAo
b2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZ
UEVTOgorICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIAorICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgorICAg
IGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICB1bnNpZ25lZCB1c2Vk
TGVuZ3RoID0gYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVzZWRMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKCFidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdXNlZExlbmd0aDsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
QUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IG9iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAgIHVuc2lnbmVkIHVzZWRMZW5ndGggPSBi
dXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdXNlZExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBidXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSAhPSB2YWx1
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dXNlZExlbmd0aDsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gb2JqZWN0
LT5tX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CisgICAgICAgIGlmIChzdG9yYWdlLT5tX3Nw
YXJzZU1hcC5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAg
dW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IHN0ZDo6bWluKHN0b3JhZ2UtPmxlbmd0aCgpLCBz
dG9yYWdlLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc3RvcmFnZS0+bV92
ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHVzZWRWZWN0b3JMZW5ndGg7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK3ZvaWQgSlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0
dXJlKHZtLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU09iamVjdDo6Z2V0R2Vu
ZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGVUaGF0U2tp
cHNKU09iamVjdChtb2RlKSk7CisKKyAgICBpZiAob2JqZWN0LT5wcm90b3R5cGUoKS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0
KG9iamVjdC0+cHJvdG90eXBlKCkpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmIChw
cm90b3R5cGUtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkub3ZlcnJpZGVzR2V0UHJvcGVydHlO
YW1lcygpKSB7CisgICAgICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJv
cGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2
bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBt
b2RlKTsKKyAgICAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPnByb3RvdHlwZSgp
OworICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHByb3RvdHlwZSA9IGFzT2JqZWN0KG5leHRQcm90byk7CisgICAgfQorfQorCisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjIsNiArNDYyLDcgQEAgcHVibGljOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1Byb3BlcnR5KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNPd25Q
cm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGJvb2wgaGFzT3du
UHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
QEAgLTQ3NSw2ICs0NzYsMTAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiwgSlNP
YmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBF
bnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmLCBFbnVtZXJhdGlvbk1vZGUpOworCiAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAgICBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSYpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b051bWJlcihFeGVjU3Rh
dGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpzX2lu
Zm8gPSB7ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcikgfTsKKworSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0pCit7CisgICAg
aWYgKCF2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcygmdm0pOworICAgICAgICB2bS5lbXB0eVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IgPSBTdHJvbmc8SlNDZWxsPih2bSwgY3JlYXRlKHZtLCAwLCBwcm9w
ZXJ0eU5hbWVzKSk7CisgICAgfQorICAgIHJldHVybiBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKj4odm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmdldCgpKTsKK30KKworSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcykKK3sKKyAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZSA/IHN0cnVj
dHVyZS0+aWQoKSA6IDA7CisgICAgdWludDMyX3QgaW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUg
PyBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkgOiAwOworICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvciA9IG5ldyAoTm90TnVsbCwgCisgICAgICAgIGFsbG9jYXRlQ2Vs
bDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I+KHZtLmhlYXApKSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3Iodm0sIHN0cnVjdHVyZUlELCBpbmxpbmVDYXBhY2l0eSwgcHJvcGVydHlOYW1lcy5pZGVu
dGlmaWVyU2V0KCkpOworICAgIGVudW1lcmF0b3ItPmZpbmlzaENyZWF0aW9uKHZtLCBwcm9wZXJ0
eU5hbWVzLmRhdGEoKSk7CisgICAgcmV0dXJuIGVudW1lcmF0b3I7Cit9CisKK0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQsIHVpbnQzMl90IGlubGluZUNhcGFjaXR5LCBSZWZDb3VudGVkSWRlbnRp
ZmllclNldCogc2V0KQorICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
U3RydWN0dXJlLmdldCgpKQorICAgICwgbV9pZGVudGlmaWVyU2V0KHNldCkKKyAgICAsIG1fY2Fj
aGVkU3RydWN0dXJlSUQoc3RydWN0dXJlSUQpCisgICAgLCBtX2NhY2hlZElubGluZUNhcGFjaXR5
KGlubGluZUNhcGFjaXR5KQoreworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBQYXNzUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4g
aWRlbnRzKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgIFJlZlB0cjxQ
cm9wZXJ0eU5hbWVBcnJheURhdGE+IGlkZW50aWZpZXJzID0gaWRlbnRzOworICAgIFByb3BlcnR5
TmFtZUFycmF5RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiB2ZWN0b3IgPSBpZGVudGlmaWVycy0+
cHJvcGVydHlOYW1lVmVjdG9yKCk7CisgICAgbV9wcm9wZXJ0eU5hbWVzLnJlc2l6ZSh2ZWN0b3Iu
c2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIgPSB2ZWN0b3JbaV07Cisg
ICAgICAgIG1fcHJvcGVydHlOYW1lc1tpXS5zZXQodm0sIHRoaXMsIGpzU3RyaW5nKCZ2bSwgaWRl
bnRpZmllci5zdHJpbmcoKSkpOworICAgIH0KK30KKwordm9pZCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqPihjZWxsKS0+SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp+SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKCk7Cit9CisKK3ZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
Y2VsbCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fcHJvcGVy
dHlOYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fcHJvcGVydHlOYW1lc1tpXSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
cHJvdG90eXBlQ2hhaW4pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9oCisjZGVmaW5l
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9oCisKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIElkZW50aWZpZXI7
CisKK2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciA6IHB1YmxpYyBKU0NlbGwgeworcHVi
bGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICBzdGF0aWMgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBjcmVhdGUoVk0mKTsKKyAgICBzdGF0aWMgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOworCisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIEpTU3RyaW5nKiBw
cm9wZXJ0eU5hbWVBdEluZGV4KHVpbnQzMl90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGluZGV4ID49IG1fcHJvcGVydHlOYW1lcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlOYW1lc1tpbmRleF0uZ2V0KCk7Cisg
ICAgfQorCisgICAgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqIGlkZW50aWZpZXJTZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWRlbnRpZmllclNldC5nZXQoKTsKKyAgICB9CisK
KyAgICBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4oKSBjb25zdCB7IHJldHVy
biBtX3Byb3RvdHlwZUNoYWluLmdldCgpOyB9CisgICAgdm9pZCBzZXRDYWNoZWRQcm90b3R5cGVD
aGFpbihWTSYgdm0sIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbikgeyByZXR1cm4gbV9w
cm90b3R5cGVDaGFpbi5zZXQodm0sIHRoaXMsIHByb3RvdHlwZUNoYWluKTsgfQorCisgICAgU3Ry
dWN0dXJlKiBjYWNoZWRTdHJ1Y3R1cmUoVk0mIHZtKSBjb25zdCB7IHJldHVybiB2bS5oZWFwLnN0
cnVjdHVyZUlEVGFibGUoKS5nZXQobV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KKyAgICBTdHJ1Y3R1
cmVJRCBjYWNoZWRTdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU3RydWN0dXJl
SUQ7IH0KKyAgICB1aW50MzJfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IGNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IGNhY2hlZFByb3BlcnR5TmFtZXNMZW5ndGhPZmZzZXQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Is
IG1fcHJvcGVydHlOYW1lcykgKyBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPj46OnNpemVN
ZW1vcnlPZmZzZXQoKTsKKyAgICB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpICsgVmVjdG9yPFdy
aXRlQmFycmllcjxKU1N0cmluZz4+OjpkYXRhTWVtb3J5T2Zmc2V0KCk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcml2
YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW47CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmVJRCwgdWlu
dDMyX3QsIFJlZkNvdW50ZWRJZGVudGlmaWVyU2V0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIFBhc3NSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPik7CisKKyAgICBWZWN0b3I8
V3JpdGVCYXJyaWVyPEpTU3RyaW5nPj4gbV9wcm9wZXJ0eU5hbWVzOworICAgIFJlZlB0cjxSZWZD
b3VudGVkSWRlbnRpZmllclNldD4gbV9pZGVudGlmaWVyU2V0OworICAgIFN0cnVjdHVyZUlEIG1f
Y2FjaGVkU3RydWN0dXJlSUQ7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3By
b3RvdHlwZUNoYWluOworICAgIHVpbnQzMl90IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7Cit9Owor
CitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBzdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIHVpbnQzMl90IGxlbmd0
aCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBlbnVtZXJhdG9yID0gc3RydWN0dXJlLT5jYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKCkpCisgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOworCisgICAgaWYgKCFzdHJ1Y3R1
cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgfHwgbGVuZ3RoICE9IGJhc2UtPmdldEFy
cmF5TGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNy
ZWF0ZSh2bSk7CisKKyAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMpOwor
ICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhiYXNl
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKworICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZXMpOworICAgIGlmIChz
dHJ1Y3R1cmUtPmNhbkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKQorICAg
ICAgICBzdHJ1Y3R1cmUtPnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3Io
dm0sIGVudW1lcmF0b3IpOworICAgIHJldHVybiBlbnVtZXJhdG9yOworfQorCitpbmxpbmUgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBnZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCBsZW5ndGgsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogc3RydWN0dXJlRW51bWVyYXRvcikKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsK
KyAgICBpZiAoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gc3RydWN0dXJl
LT5jYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpKSB7CisgICAgICAgIGlmICgh
bGVuZ3RoICYmIGVudW1lcmF0b3ItPmNhY2hlZFByb3RvdHlwZUNoYWluKCkgPT0gc3RydWN0dXJl
LT5wcm90b3R5cGVDaGFpbihleGVjKSkKKyAgICAgICAgICAgIHJldHVybiBlbnVtZXJhdG9yOwor
ICAgIH0KKworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYyk7CisgICAg
cHJvcGVydHlOYW1lcy5zZXRQcmV2aW91c2x5RW51bWVyYXRlZExlbmd0aChsZW5ndGgpOworICAg
IHByb3BlcnR5TmFtZXMuc2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKHN0cnVjdHVy
ZUVudW1lcmF0b3IpOworCisgICAgLy8gSWYgd2Ugc3RpbGwgaGF2ZSB0aGUgc2FtZSBTdHJ1Y3R1
cmUgdGhhdCB3ZSBzdGFydGVkIHdpdGgsIG91ciBTdHJ1Y3R1cmUgYWxsb3dzIHVzIHRvIGFjY2Vz
cyBpdHMgcHJvcGVydGllcyAKKyAgICAvLyBxdWlja2x5IChpLmUuIHRoZSBTdHJ1Y3R1cmUgcHJv
cGVydHkgbG9vcCB3YXMgYWJsZSB0byBkbyB0aGluZ3MpLCBhbmQgd2UgaXRlcmF0ZWQgdGhlIGZ1
bGwgbGVuZ3RoIG9mIHRoZSAKKyAgICAvLyBvYmplY3QgKGkuZS4gdGhlcmUgYXJlIG5vIG1vcmUg
b3duIGluZGV4ZWQgcHJvcGVydGllcyB0aGF0IG5lZWQgdG8gYmUgZW51bWVyYXRlZCksIHRoZW4g
dGhlIGdlbmVyaWMgcHJvcGVydHkgCisgICAgLy8gaXRlcmF0aW9uIGNhbiBza2lwIGFueSBwcm9w
ZXJ0aWVzIGl0IHdvdWxkIGdldCBmcm9tIHRoZSBKU09iamVjdCBiYXNlIGNsYXNzLiBUaGlzIHR1
cm5zIG91dCB0byBiZSBpbXBvcnRhbnQgCisgICAgLy8gZm9yIGhvdCBsb29wcyBiZWNhdXNlIG1v
c3Qgb2Ygb3VyIHRpbWUgaXMgdGhlbiBkb21pbmF0ZWQgYnkgdHJ5aW5nIHRvIGFkZCB0aGUgb3du
IFN0cnVjdHVyZSBwcm9wZXJ0aWVzIHRvIAorICAgIC8vIHRoZSBuZXcgZ2VuZXJpYyBQcm9wZXJ0
eU5hbWVBcnJheSBhbmQgZmFpbGluZyBiZWNhdXNlIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGVt
LgorICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJlID0gc3RydWN0dXJlRW51bWVyYXRvci0+
Y2FjaGVkU3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlID09IGNhY2hlZFN0cnVjdHVy
ZSAmJiBzdHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5KCkgJiYgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGxlbmd0aCkgPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkKKyAgICAgICAg
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRHZW5lcmljUHJvcGVydHlOYW1lcyhiYXNlLCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBlbHNlCisg
ICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhiYXNlLCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICAKKyAgICBu
b3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBiYXNlKTsKKworICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRl
KHZtLCBiYXNlLT5zdHJ1Y3R1cmUodm0pLCBwcm9wZXJ0eU5hbWVzKTsKKyAgICBlbnVtZXJhdG9y
LT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihl
eGVjKSk7CisgICAgaWYgKCFsZW5ndGggJiYgc3RydWN0dXJlLT5jYW5DYWNoZUdlbmVyaWNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCkpCisgICAgICAgIHN0cnVjdHVyZS0+c2V0Q2FjaGVkR2VuZXJp
Y1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworICAgIHJldHVybiBlbnVt
ZXJhdG9yOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3h5LmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMjQgQEAgdm9pZCBK
U1Byb3h5OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KgogICAgIHRoaXNPYmplY3QtPnRhcmdl
dCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LT50YXJnZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK3VpbnQzMl90IEpT
UHJveHk6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0KQoreworICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNQcm94eSo+KG9iamVj
dCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJsZShleGVjLT52
bSgpKS0+Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCB0aGlzT2JqZWN0LT50YXJnZXQoKSk7Cit9
CisKK3ZvaWQgSlNQcm94eTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU1Byb3h5KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTUHJveHkqPihvYmplY3QpOworICAgIHRoaXNPYmplY3QtPnRhcmdldCgpLT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LT50YXJn
ZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNQcm94eTo6Z2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7
CisgICAgSlNQcm94eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Byb3h5Kj4ob2JqZWN0KTsKKyAg
ICB0aGlzT2JqZWN0LT50YXJnZXQoKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QtPnRhcmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKK30KKwogdm9pZCBKU1Byb3h5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTUHJveHkqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNQcm94eSo+KG9iamVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm94eS5oCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDkgQEAgcHJvdGVj
dGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJ
bmRleChKU0NlbGwqLCBFeGVjU3RhdGUqLCB1bnNpZ25lZCk7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJv
cGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51
bWVyYXRpb25Nb2RlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRHZW5l
cmljUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcg
KzY2LDcgQEAgdm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Ob25JbmRleAogICAgICAg
ICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBp
ZiAoaXQtPmtleS0+aXNFbXB0eVVuaXF1ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKCEoaXQtPnZhbHVlLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8
fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIGlmICgh
KGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgc2hvdWxkSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVB
cnJheS5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzMgKzIzLDMy
IEBACiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3Rh
dGljIGNvbnN0IHNpemVfdCBzZXRUaHJlc2hvbGQgPSAyMDsKLQogdm9pZCBQcm9wZXJ0eU5hbWVB
cnJheTo6YWRkKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFpZGVudGlm
aWVyIHx8IGlkZW50aWZpZXIgPT0gU3RyaW5nSW1wbDo6ZW1wdHkoKSB8fCBpZGVudGlmaWVyLT5p
c0F0b21pYygpKTsKLQotICAgIHNpemVfdCBzaXplID0gbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0
b3IoKS5zaXplKCk7Ci0gICAgaWYgKHNpemUgPCBzZXRUaHJlc2hvbGQpIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChpZGVudGlm
aWVyID09IG1fZGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKClbaV0uaW1wbCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3Nl
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICAgICAgICAgIG1fc2V0LmFkZChtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3Rv
cigpW2ldLmltcGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX3NldC5hZGQoaWRlbnRp
ZmllcikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgeworICAgICAgICB1aW50MzJfdCBpbmRleCA9IFByb3BlcnR5TmFtZShJZGVudGlm
aWVyKG1fdm0sIGlkZW50aWZpZXIpKS5hc0luZGV4KCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
aW5kZXgsIGluZGV4ID09IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCB8fCBpbmRleCA+PSBtX3By
ZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKTsKICAgICB9CiAKKyAgICBpZiAobV9hbHRlcm5hdGVT
ZXQgJiYgbV9hbHRlcm5hdGVTZXQtPmNvbnRhaW5zKGlkZW50aWZpZXIpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fc2V0LT5hZGQoaWRlbnRpZmllcikuaXNOZXdFbnRyeSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgYWRkS25vd25VbmlxdWUoaWRlbnRpZmllcik7CiB9CiAKK3ZvaWQg
UHJvcGVydHlOYW1lQXJyYXk6OnNldFByZXZpb3VzbHlFbnVtZXJhdGVkUHJvcGVydGllcyhjb25z
dCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9hbHRlcm5h
dGVTZXQgPSBlbnVtZXJhdG9yLT5pZGVudGlmaWVyU2V0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU5hbWVBcnJheS5oCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwy
MiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKKyAgICBjbGFzcyBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I7CiAgICAgY2xhc3MgU3RydWN0dXJlOwogICAgIGNsYXNzIFN0cnVjdHVyZUNoYWlu
OwogCisgICAgY2xhc3MgUmVmQ291bnRlZElkZW50aWZpZXJTZXQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxSZWZDb3VudGVkSWRlbnRpZmllclNldD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRl
ZiBIYXNoU2V0PFN0cmluZ0ltcGwqLCBQdHJIYXNoPFN0cmluZ0ltcGwqPj4gU2V0OworCisgICAg
ICAgIGJvb2wgY29udGFpbnMoU3RyaW5nSW1wbCogaW1wbCkgY29uc3QgeyByZXR1cm4gbV9zZXQu
Y29udGFpbnMoaW1wbCk7IH0KKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCAgeyByZXR1cm4g
bV9zZXQuc2l6ZSgpOyB9CisgICAgICAgIFNldDo6QWRkUmVzdWx0IGFkZChTdHJpbmdJbXBsKiBp
bXBsKSB7IHJldHVybiBtX3NldC5hZGQoaW1wbCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IFNldCBtX3NldDsKKyAgICB9OworCiAgICAgLy8gRklYTUU6IFJlbmFtZSB0byBQcm9wZXJ0eU5h
bWVBcnJheS4KICAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGEgOiBwdWJsaWMgUmVmQ291
bnRlZDxQcm9wZXJ0eU5hbWVBcnJheURhdGE+IHsKICAgICBwdWJsaWM6CkBAIC01MywyNSArNjYs
NDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHVibGljOgogICAgICAgICBQcm9wZXJ0eU5hbWVB
cnJheShWTSogdm0pCiAgICAgICAgICAgICA6IG1fZGF0YShQcm9wZXJ0eU5hbWVBcnJheURhdGE6
OmNyZWF0ZSgpKQorICAgICAgICAgICAgLCBtX3NldChhZG9wdFJlZihuZXcgUmVmQ291bnRlZElk
ZW50aWZpZXJTZXQpKQogICAgICAgICAgICAgLCBtX3ZtKHZtKQogICAgICAgICAgICAgLCBtX251
bUNhY2hlYWJsZVNsb3RzKDApCiAgICAgICAgICAgICAsIG1fYmFzZU9iamVjdCgwKQorICAgICAg
ICAgICAgLCBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoKDApCiAgICAgICAgIHsKICAgICAg
ICAgfQogCiAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykKICAgICAg
ICAgICAgIDogbV9kYXRhKFByb3BlcnR5TmFtZUFycmF5RGF0YTo6Y3JlYXRlKCkpCisgICAgICAg
ICAgICAsIG1fc2V0KGFkb3B0UmVmKG5ldyBSZWZDb3VudGVkSWRlbnRpZmllclNldCkpCiAgICAg
ICAgICAgICAsIG1fdm0oJmV4ZWMtPnZtKCkpCiAgICAgICAgICAgICAsIG1fbnVtQ2FjaGVhYmxl
U2xvdHMoMCkKICAgICAgICAgICAgICwgbV9iYXNlT2JqZWN0KDApCisgICAgICAgICAgICAsIG1f
cHJldmlvdXNseUVudW1lcmF0ZWRMZW5ndGgoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAg
ICAgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92bTsgfQogCisgICAgICAgIHZvaWQgYWRkKHVpbnQz
Ml90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPCBtX3ByZXZpb3Vz
bHlFbnVtZXJhdGVkTGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGFkZChJZGVudGlmaWVyOjpmcm9tKG1fdm0sIGluZGV4KSk7CisgICAgICAgIH0KKwogICAgICAg
ICB2b2lkIGFkZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKSB7IGFkZChpZGVudGlmaWVy
LmltcGwoKSk7IH0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoU3RyaW5nSW1w
bCopOwotICAgICAgICB2b2lkIGFkZEtub3duVW5pcXVlKFN0cmluZ0ltcGwqIGlkZW50aWZpZXIp
IHsgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRpZmllcihtX3ZtLCBp
ZGVudGlmaWVyKSk7IH0KKyAgICAgICAgdm9pZCBhZGRLbm93blVuaXF1ZShTdHJpbmdJbXBsKiBp
ZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICBtX3NldC0+YWRkKGlkZW50aWZpZXIp
OworICAgICAgICAgICAgbV9kYXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5hcHBlbmQoSWRlbnRp
ZmllcihtX3ZtLCBpZGVudGlmaWVyKSk7CisgICAgICAgIH0KIAogICAgICAgICBJZGVudGlmaWVy
JiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fZGF0YS0+cHJvcGVydHlOYW1lVmVj
dG9yKClbaV07IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpW2ldOyB9CkBA
IC04MCw3ICsxMDgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFByb3BlcnR5TmFtZUFy
cmF5RGF0YSogZGF0YSgpIHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQogICAgICAgICBQYXNzUmVm
UHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gcmVsZWFzZURhdGEoKSB7IHJldHVybiBtX2RhdGEu
cmVsZWFzZSgpOyB9CiAKKyAgICAgICAgUmVmQ291bnRlZElkZW50aWZpZXJTZXQqIGlkZW50aWZp
ZXJTZXQoKSBjb25zdCB7IHJldHVybiBtX3NldC5nZXQoKTsgfQorCiAgICAgICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhlc2UgZnVuY3Rpb25zLgorICAgICAgICBib29sIGNhbkFkZEtub3duVW5pcXVl
Rm9yU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gIW1fc2V0LT5zaXplKCkgJiYgKCFtX2FsdGVy
bmF0ZVNldCB8fCAhbV9hbHRlcm5hdGVTZXQtPnNpemUoKSk7IH0KICAgICAgICAgdHlwZWRlZiBQ
cm9wZXJ0eU5hbWVBcnJheURhdGE6OlByb3BlcnR5TmFtZVZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
Y29uc3RfaXRlcmF0b3I7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLT5wcm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpLmJl
Z2luKCk7IH0KQEAgLTEwMCwxNCArMTMxLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgbV9iYXNlT2JqZWN0ID0gb2JqZWN0OwogICAgICAgICB9CiAKLSAgICBwcml2YXRlOgotICAg
ICAgICB0eXBlZGVmIEhhc2hTZXQ8U3RyaW5nSW1wbCosIFB0ckhhc2g8U3RyaW5nSW1wbCo+PiBJ
ZGVudGlmaWVyU2V0OworICAgICAgICB2b2lkIHNldFByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3Ro
KHVpbnQzMl90IGxlbmd0aCkgeyBtX3ByZXZpb3VzbHlFbnVtZXJhdGVkTGVuZ3RoID0gbGVuZ3Ro
OyB9CisgICAgICAgIHZvaWQgc2V0UHJldmlvdXNseUVudW1lcmF0ZWRQcm9wZXJ0aWVzKGNvbnN0
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOwogCisgICAgcHJpdmF0ZToKICAgICAgICAgUmVm
UHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4gbV9kYXRhOwotICAgICAgICBJZGVudGlmaWVyU2V0
IG1fc2V0OworICAgICAgICBSZWZQdHI8UmVmQ291bnRlZElkZW50aWZpZXJTZXQ+IG1fc2V0Owor
ICAgICAgICBSZWZQdHI8UmVmQ291bnRlZElkZW50aWZpZXJTZXQ+IG1fYWx0ZXJuYXRlU2V0Owog
ICAgICAgICBWTSogbV92bTsKICAgICAgICAgc2l6ZV90IG1fbnVtQ2FjaGVhYmxlU2xvdHM7CiAg
ICAgICAgIEpTT2JqZWN0KiBtX2Jhc2VPYmplY3Q7CisgICAgICAgIHVpbnQzMl90IG1fcHJldmlv
dXNseUVudW1lcmF0ZWRMZW5ndGg7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJl
dmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxOCArMTA5LDI1IEBAIGJvb2wgUmVnRXhw
T2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwKIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKLSAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgIGlmIChz
aG91bGRJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKG1vZGUpKQogICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGFzdEluZGV4KTsKICAgICBCYXNlOjpnZXRP
d25Ob25JbmRleFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKIH0KIAogdm9pZCBSZWdFeHBPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcykKKyAgICBpZiAoc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2Rl
KSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJ
bmRleCk7CiAgICAgQmFzZTo6Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIG1vZGUpOwogfQogCit2b2lkIFJlZ0V4cE9iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKHNob3Vs
ZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkpCisgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sYXN0SW5kZXgpOworICAgIEJhc2U6OmdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisK
IHN0YXRpYyBib29sIHJlamVjdChFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgdGhyb3dFeGNlcHRpb24s
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgaWYgKHRocm93RXhjZXB0aW9uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9u
IDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NywxMyArNzcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZ0V4cE9iamVjdChWTSYsIFN0cnVjdHVyZSosIFJlZ0V4
cCopOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7
CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldEdlbmVyaWNQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lv
biAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBTdHJpbmdPYmplY3Q6
OmdldE93blByb3BlcnR5TmFtZXMoSgogICAgIGludCBzaXplID0gdGhpc09iamVjdC0+aW50ZXJu
YWxWYWx1ZSgpLT5sZW5ndGgoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkK
ICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCBpKSk7Ci0g
ICAgaWYgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICBpZiAoc2hvdWxk
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyhtb2RlKSkKICAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CiAgICAgcmV0dXJuIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiRHVt
cENvbnRleHQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKLSNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiUHJv
cGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgpAQCAt
OTU2LDEyICs5NTYsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3Ry
dQogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29s
IGtub3duVW5pcXVlID0gIXByb3BlcnR5TmFtZXMuc2l6ZSgpOworICAgIGJvb2wga25vd25Vbmlx
dWUgPSBwcm9wZXJ0eU5hbWVzLmNhbkFkZEtub3duVW5pcXVlRm9yU3RydWN0dXJlKCk7CiAKICAg
ICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwog
ICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBBU1NFUlQoaGFzTm9uRW51
bWVyYWJsZVByb3BlcnRpZXMoKSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwot
ICAgICAgICBpZiAoIWl0ZXItPmtleS0+aXNFbXB0eVVuaXF1ZSgpICYmICghKGl0ZXItPmF0dHJp
YnV0ZXMgJiBEb250RW51bSkgfHwgbW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkg
eworICAgICAgICBpZiAoIWl0ZXItPmtleS0+aXNFbXB0eVVuaXF1ZSgpICYmICghKGl0ZXItPmF0
dHJpYnV0ZXMgJiBEb250RW51bSkgfHwgc2hvdWxkSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyht
b2RlKSkpIHsKICAgICAgICAgICAgIGlmIChrbm93blVuaXF1ZSkKICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZEtub3duVW5pcXVlKGl0ZXItPmtleSk7CiAgICAgICAgICAgICBlbHNl
CkBAIC0xMjIzLDQgKzEyMjMsNzQgQEAgYm9vbCBDbGFzc0luZm86Omhhc1N0YXRpY1NldHRlck9y
UmVhZG9ubAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnNldENhY2hl
ZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgQVNTRVJUKCFpc0RpY3Rpb25hcnkoKSk7Cisg
ICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAg
ICByYXJlRGF0YSgpLT5zZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZt
LCBlbnVtZXJhdG9yKTsKK30KKworSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBTdHJ1Y3R1cmU6
OmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlm
ICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJh
cmVEYXRhKCktPmNhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKK30KKwor
dm9pZCBTdHJ1Y3R1cmU6OnNldENhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZN
JiB2bSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKQoreworICAgIEFTU0VS
VCghaXNEaWN0aW9uYXJ5KCkpOworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgYWxs
b2NhdGVSYXJlRGF0YSh2bSk7CisgICAgcmFyZURhdGEoKS0+c2V0Q2FjaGVkR2VuZXJpY1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3Iodm0sIGVudW1lcmF0b3IpOworfQorCitKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIFN0cnVjdHVyZTo6Y2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3Io
KSBjb25zdAoreworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIHJhcmVEYXRhKCktPmNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlOjpjYW5DYWNoZVN0cnVjdHVyZVByb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIGlmIChpc0RpY3Rpb25hcnkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0cnVjdHVyZTo6
Y2FuQ2FjaGVHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYg
KCFjYW5DYWNoZVN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSgp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVy
ZUNoYWluID0gbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKTsKKyAgICBBU1NFUlQoc3RydWN0
dXJlQ2hhaW4pOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVDaGFpbi0+aGVhZCgpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5nZXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoc3RydWN0dXJl
LT5nZXQoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN0cnVjdHVyZSsrOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFN0cnVjdHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNr
bHkoKSBjb25zdAoreworICAgIGlmIChoYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNiArMjgzLDE1IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iq
IGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
aC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7IC8vIERl
ZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgorCisgICAgdm9pZCBzZXRDYWNoZWRT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKik7CisgICAgdm9pZCBzZXRDYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihW
TSYsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogY2FjaGVkU3RydWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcigpIGNvbnN0OworICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogY2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IoKSBjb25zdDsKKyAgICBib29sIGNhbkNhY2hlU3RydWN0dXJlUHJvcGVydHlOYW1lRW51
bWVyYXRvcigpIGNvbnN0OworICAgIGJvb2wgY2FuQ2FjaGVHZW5lcmljUHJvcGVydHlOYW1lRW51
bWVyYXRvcigpIGNvbnN0OworICAgIGJvb2wgY2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHkoKSBj
b25zdDsKKwogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CiAKICAgICBKU1N0cmluZyogb2JqZWN0
VG9TdHJpbmdWYWx1ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVSYXJlRGF0YS5oIgogCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
CiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNjgsNiArNjksMjggQEAgdm9pZCBTdHJ1
Y3R1cmVSYXJlRGF0YTo6dmlzaXRDaGlsZHJlbihKUwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3ByZXZpb3VzKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9v
YmplY3RUb1N0cmluZ1ZhbHVlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9l
bnVtZXJhdGlvbkNhY2hlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWNo
ZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9jYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvcik7Cit9CisK
K0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlUmFyZURhdGE6OmNhY2hlZFN0cnVj
dHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhY2hl
ZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IuZ2V0KCk7Cit9CisKK3ZvaWQgU3RydWN0
dXJlUmFyZURhdGE6OnNldENhY2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0m
IHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9jYWNo
ZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLnNldCh2bSwgdGhpcywgZW51bWVyYXRv
cik7Cit9CisKK0pTUHJvcGVydHlOYW1lRW51bWVyYXRvciogU3RydWN0dXJlUmFyZURhdGE6OmNh
Y2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jYWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvci5nZXQoKTsKK30KKwordm9pZCBT
dHJ1Y3R1cmVSYXJlRGF0YTo6c2V0Q2FjaGVkR2VuZXJpY1Byb3BlcnR5TmFtZUVudW1lcmF0b3Io
Vk0mIHZtLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpCit7CisgICAgbV9j
YWNoZWRHZW5lcmljUHJvcGVydHlOYW1lRW51bWVyYXRvci5zZXQodm0sIHRoaXMsIGVudW1lcmF0
b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMTcxNDg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogY2xhc3MgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjsK
IGNsYXNzIFN0cnVjdHVyZTsKIApAQCAtNjEsNiArNjIsMTEgQEAgcHVibGljOgogICAgIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGNh
Y2hlZFN0cnVjdHVyZVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSBjb25zdDsKKyAgICBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIGNhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRDYWNoZWRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KFZNJiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKik7CisgICAgdm9pZCBzZXRDYWNoZWRHZW5l
cmljUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciop
OworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmU7CiAgICAgCkBAIC03MSw2
ICs3Nyw4IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91
czsKICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4gbV9lbnVtZXJhdGlvbkNhY2hl
OworICAgIFdyaXRlQmFycmllcjxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I+IG1fY2FjaGVkU3Ry
dWN0dXJlUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKKyAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yPiBtX2NhY2hlZEdlbmVyaWNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwog
ICAgIAogICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9p
bnRTZXQ+LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRX
YXRjaHBvaW50U2V0czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIkpTTm90QW5PYmplY3Qu
aCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZVJl
YWN0aW9uLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAj
aW5jbHVkZSAiTGV4ZXIuaCIKQEAgLTI1OCw2ICsyNTksNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgc3RyaW5nU3RydWN0dXJlLnNldCgqdGhpcywgSlNT
dHJpbmc6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBub3RBbk9i
amVjdFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTTm90QW5PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlLnNldCgq
dGhpcywgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgZ2V0dGVyU2V0dGVyU3RydWN0dXJlLnNldCgqdGhpcywgR2V0dGVy
U2V0dGVyOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgYXBpV3Jh
cHBlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgSlNTY29wZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IEpTU2NvcGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYgKzI2Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBzdHJpbmdTdHJ1
Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG5vdEFuT2JqZWN0U3RydWN0dXJlOwog
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eU5hbWVJdGVyYXRvclN0cnVjdHVyZTsK
KyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVy
ZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZ2V0dGVyU2V0dGVyU3RydWN0dXJlOwogICAg
ICAgICBTdHJvbmc8U3RydWN0dXJlPiBhcGlXcmFwcGVyU3RydWN0dXJlOwogICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiBKU1Njb3BlU3RydWN0dXJlOwpAQCAtMjkxLDYgKzI5Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlUmVhY3Rpb25TdHJ1
Y3R1cmU7CiAjZW5kaWYKICAgICAgICAgU3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9uVGVybWluYXRv
cjsKKyAgICAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwog
CiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2F0b21pY1N0cmluZ1RhYmxlOwogICAgICAg
ICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE3MTUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMwIEBACisyMDE0LTA3LTIzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVy
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3Igb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRp
b24gb2YgZm9yLWluCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzQxNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBzcGxpdHMgZm9yLWluIGxv
b3BzIGludG8gdGhyZWUgZGlzdGluY3QgcGFydHM6CisKKyAgICAgICAgLSBJdGVyYXRpbmcgb3Zl
ciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzIGluIHRoZSBiYXNlIG9iamVjdC4KKyAgICAgICAgLSBJ
dGVyYXRpbmcgb3ZlciB0aGUgU3RydWN0dXJlIHByb3BlcnRpZXMgaW4gdGhlIGJhc2Ugb2JqZWN0
LgorICAgICAgICAtIEl0ZXJhdGluZyBvdmVyIGFueSBvdGhlciBlbnVtZXJhYmxlIHByb3BlcnRp
ZXMgZm9yIHRoYXQgb2JqZWN0IGFuZCBhbnkgb2JqZWN0cyBpbiB0aGUgcHJvdG90eXBlIGNoYWlu
LgorIAorICAgICAgICBJdCBkb2VzIHRoaXMgYnkgZW1pdHRpbmcgdGhlc2UgZXhwbGljaXQgbG9v
cHMgaW4gYnl0ZWNvZGUsIHVzaW5nIGEgbmV3IHNldCBvZiBieXRlY29kZXMgdG8gCisgICAgICAg
IHN1cHBvcnQgdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyByZXF1aXJlZCBmb3IgZWFjaCBsb29wLgor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01XaW5kb3c6OmdldEVudW1lcmFibGVMZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNET01XaW5kb3c6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SlNET01XaW5kb3c6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRl
SGVhZGVyKToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAgICAgIChK
U0M6OlJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisKIDIwMTQtMDctMDEgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIERlYnVnZ2Vy
Q2FsbEZyYW1lOjpzY29wZSgpIHNob3VsZCByZXR1cm4gYSBEZWJ1Z2dlclNjb3BlLgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODEsNiArMzgxLDMzIEBAIGJvb2wgSlNE
T01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5QnlJbmRleCgKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7CiB9CiAKK3Vp
bnQzMl90IEpTRE9NV2luZG93OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCkKK3sKKyAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0RPTVdpbmRvdyo+KG9iamVjdCk7CisgICAgLy8gT25seSBhbGxvdyB0aGUgd2luZG93IHRv
IGVudW1lcmF0ZWQgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KKyAgICBpZiAoIUJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0
LT5pbXBsKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gQmFzZTo6Z2V0RW51bWVy
YWJsZUxlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKK30KKwordm9pZCBKU0RPTVdpbmRvdzo6Z2V0
U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
K3sKKyAgICBKU0RPTVdpbmRvdyogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0RPTVdpbmRvdyo+KG9i
amVjdCk7CisgICAgLy8gT25seSBhbGxvdyB0aGUgd2luZG93IHRvIGVudW1lcmF0ZWQgYnkgZnJh
bWVzIGluIHRoZSBzYW1lIG9yaWdpbi4KKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhleGVjLCB0aGlzT2JqZWN0LT5pbXBsKCkpKQorICAgICAg
ICByZXR1cm47CisgICAgQmFzZTo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU0RPTVdpbmRvdzo6Z2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7
CisgICAgSlNET01XaW5kb3cqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihvYmpl
Y3QpOworICAgIC8vIE9ubHkgYWxsb3cgdGhlIHdpbmRvdyB0byBlbnVtZXJhdGVkIGJ5IGZyYW1l
cyBpbiB0aGUgc2FtZSBvcmlnaW4uCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coZXhlYywgdGhpc09iamVjdC0+aW1wbCgpKSkKKyAgICAgICAg
cmV0dXJuOworICAgIEJhc2U6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCiB2b2lkIEpTRE9NV2luZG93OjpnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTRE9N
V2luZG93KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRE9NV2luZG93Kj4ob2JqZWN0KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCShyZXZpc2lvbiAxNzE0ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtOTcyLDYgKzk3Miw5IEBAIHN1
YiBHZW5lcmF0ZUhlYWRlcgogICAgICMgQ3VzdG9tIGdldFByb3BlcnR5TmFtZXMgZnVuY3Rpb24g
ZXhpc3RzIG9uIERPTVdpbmRvdwogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93
IikgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGdldFBy
b3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlIG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250
RW51bVByb3BlcnRpZXMpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIHZvaWQgZ2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2Rl
IG1vZGUgPSBKU0M6OkV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpO1xuIik7CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgbW9kZSA9IEpTQzo6RXhjbHVkZURvbnRFbnVtUHJv
cGVydGllcyk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMg
dWludDMyX3QgZ2V0RW51bWVyYWJsZUxlbmd0aChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmpl
Y3QqKTtcbiIpOwogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyJ9ID0gMTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9y
dW50aW1lX2FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVu
dGltZV9hcnJheS5jcHAJKHJldmlzaW9uIDE3MTQ4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX2FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCB2b2lk
IFJ1bnRpbWVBcnJheTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyOjpmcm9tKGV4ZWMsIGkpKTsKIAotICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVBy
b3BlcnRpZXMpCisgICAgaWYgKHNob3VsZEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMobW9kZSkp
CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
OwogCiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lcywgbW9kZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzE1MDQpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxNC0wNy0yMyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIFJlZmFjdG9yIG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGZvci1pbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MTQyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkpT
TlBPYmplY3Q6OmludmFsaWRhdGUpOiBGaXhlZCBhbiBpbnZhbGlkIEFTU0VSVCB0aGF0IHdhcyBj
cmFzaGluZyBpbiBkZWJ1ZyBidWlsZHMuCisKIDIwMTQtMDUtMDggIFNpbW9uIEZyYXNlciAgPHNp
bW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBXSzJdIEJvdHRvbS1yZWxhdGl2
ZSBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgbWlzcGxhY2VkIG9uIHBhZ2UgbG9hZApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9KU05QT2JqZWN0LmNwcAkocmV2aXNpb24gMTcxNDg5KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL0pTTlBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw3ICs5MCw2IEBAIHZvaWQgSlNOUE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
CiB2b2lkIEpTTlBPYmplY3Q6OmludmFsaWRhdGUoKQogewogICAgIEFTU0VSVChtX25wT2JqZWN0
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsIGluZm8oKSk7CiAKICAgICBy
ZWxlYXNlTlBPYmplY3QobV9ucE9iamVjdCk7CiAgICAgbV9ucE9iamVjdCA9IDA7Cg==
</data>
<flag name="review"
          id="259976"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>