<?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>165480</bug_id>
          
          <creation_ts>2016-12-06 10:54:17 -0800</creation_ts>
          <short_desc>WebAssembly JS API: coerce return values from imports</short_desc>
          <delta_ts>2017-01-25 18:40:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>165118</dependson>
          <blocked>161709</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1256868</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-06 10:54:17 -0800</bug_when>
    <thetext>I&apos;ll start off with aborting if the return values are of the wrong type. Let&apos;s add coercions after.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261766</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-12-20 14:29:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/29760318&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263572</commentid>
    <comment_count>2</comment_count>
      <attachid>297959</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-03 15:14:58 -0800</bug_when>
    <thetext>Created attachment 297959
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263582</commentid>
    <comment_count>3</comment_count>
      <attachid>297959</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-03 15:26:30 -0800</bug_when>
    <thetext>Comment on attachment 297959
patch

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

(will look more after rebase)

&gt; JSTests/wasm/function-tests/function-import-return-value.js:19
&gt; +        .End();

You repeat this code below with just the type changing. I&apos;d make it a function, takes in the return type.

&gt; JSTests/wasm/function-tests/function-import-return-value.js:25
&gt; +    let tests = [

Could you use a dictionary per entry, with { returned: 20, check: () =&gt; ... } ? It&apos;s easier to read IMO.

&gt; JSTests/wasm/function-tests/function-import-return-value.js:29
&gt; +        [{valueOf() { assert.truthy(!called); called = true; return 25; } }, (x) =&gt; { assert.truthy(called); assert.eq(x, 25) }],

Also test: MAX_SAFE_INTEGER, Infinity, -Infinity, NaN, undefined, null, new Boolean(true), new Boolean(false), &apos;hello&apos;, [].

&gt; JSTests/wasm/function-tests/function-import-return-value.js:68
&gt; +        [{valueOf() { assert.truthy(!called); called = true; return 25.82; } }, (x) =&gt; { assert.truthy(called); assert.eq(x, Math.fround(25.82)) }],

I&apos;d fold all of these into the other tests: test all the same value, but have one function per expected result type.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:979
&gt; +                AllowMacroScratchRegisterUsage allowScratch(jit);

Why does it need a scratch here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263583</commentid>
    <comment_count>4</comment_count>
      <attachid>297963</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-03 15:27:51 -0800</bug_when>
    <thetext>Created attachment 297963
patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263617</commentid>
    <comment_count>5</comment_count>
      <attachid>297963</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-03 17:09:25 -0800</bug_when>
    <thetext>Comment on attachment 297963
patch

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

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:69
&gt; +    {

Is this the right place to do it, or after adjusting SP below? I thought unwinding would want to see this as a full-fledged function with its own stack, before throwing?

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:103
&gt; +                    auto* error = ErrorInstance::create(exec, *vm, globalObject-&gt;typeErrorConstructor()-&gt;errorStructure(), ASCIILiteral(&quot;i64 not allowed as return type or argument to an imported function&quot;));

createTypeError(exec, ASCIILiteral(...), defaultSourceAppender, TypeFunction);

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:113
&gt; +            return FINALIZE_CODE(linkBuffer, (&quot;WebAssembly-&gt;JavaScript import[%i]&quot;, importIndex));

Maybe &quot;WebAssembly-&gt;Javascript invalid import[%i]&quot;? We could unique all of them later.

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:338
&gt; +        float (*convertToF32)(ExecState*, JSValue) = [] (ExecState* exec, JSValue v) -&gt; float { 

Do we always assume that this call returns in returnValueFPR? e.g. on A32 soft-float it doesn&apos;t (hard-float does).

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:344
&gt; +        jit.move(GPRInfo::returnValueGPR, GPRInfo::argumentGPR1);

On A32 and A64 this is wrong because argGPR0 == retGPR0, so the first line clobbers the second.

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:370
&gt; +        double (*convertToF64)(ExecState*, JSValue) = [] (ExecState* exec, JSValue v) -&gt; double { 

Ditto on calling convention.

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:375
&gt; +        jit.move(GPRInfo::returnValueGPR, GPRInfo::argumentGPR1);

Ditto on clobber.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263649</commentid>
    <comment_count>6</comment_count>
      <attachid>297963</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-03 18:49:43 -0800</bug_when>
    <thetext>Comment on attachment 297963
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:69
&gt;&gt; +    {
&gt; 
&gt; Is this the right place to do it, or after adjusting SP below? I thought unwinding would want to see this as a full-fledged function with its own stack, before throwing?

It will still be seeing a valid frame with a valid SP/FP, but it will just be a smaller frame (specifically, it&apos;ll be 16 bytes large containing return PC/previous FP).

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:103
&gt;&gt; +                    auto* error = ErrorInstance::create(exec, *vm, globalObject-&gt;typeErrorConstructor()-&gt;errorStructure(), ASCIILiteral(&quot;i64 not allowed as return type or argument to an imported function&quot;));
&gt; 
&gt; createTypeError(exec, ASCIILiteral(...), defaultSourceAppender, TypeFunction);

This won&apos;t work. createTypeError uses lexicalGlobalobject which won&apos;t work since we don&apos;t have a JSObject as our callee inside this thunk. That&apos;s why I specifically grab JSGlobalObject from the instance.

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:113
&gt;&gt; +            return FINALIZE_CODE(linkBuffer, (&quot;WebAssembly-&gt;JavaScript import[%i]&quot;, importIndex));
&gt; 
&gt; Maybe &quot;WebAssembly-&gt;Javascript invalid import[%i]&quot;? We could unique all of them later.

SGTM

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:338
&gt;&gt; +        float (*convertToF32)(ExecState*, JSValue) = [] (ExecState* exec, JSValue v) -&gt; float { 
&gt; 
&gt; Do we always assume that this call returns in returnValueFPR? e.g. on A32 soft-float it doesn&apos;t (hard-float does).

I believe we do assume this (for example, B3 assumes this). What about A64 since that&apos;s what we&apos;re supporting? Does that support soft-float?

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:344
&gt;&gt; +        jit.move(GPRInfo::returnValueGPR, GPRInfo::argumentGPR1);
&gt; 
&gt; On A32 and A64 this is wrong because argGPR0 == retGPR0, so the first line clobbers the second.

Nice catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263667</commentid>
    <comment_count>7</comment_count>
      <attachid>297986</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-03 19:21:18 -0800</bug_when>
    <thetext>Created attachment 297986
patch

Addressed JF&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263668</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-03 19:21:48 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created attachment 297986 [details]
&gt; patch
&gt; 
&gt; Addressed JF&apos;s comments

That&apos;s actually not true. I still need to add JF&apos;s suggested tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263670</commentid>
    <comment_count>9</comment_count>
      <attachid>297959</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-03 19:30:52 -0800</bug_when>
    <thetext>Comment on attachment 297959
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:979
&gt;&gt; +                AllowMacroScratchRegisterUsage allowScratch(jit);
&gt; 
&gt; Why does it need a scratch here?

When we properly implement cross-instance call-indirect, the stub might use a scratch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263678</commentid>
    <comment_count>10</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-03 20:04:40 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:338
&gt; &gt;&gt; +        float (*convertToF32)(ExecState*, JSValue) = [] (ExecState* exec, JSValue v) -&gt; float { 
&gt; &gt; 
&gt; &gt; Do we always assume that this call returns in returnValueFPR? e.g. on A32 soft-float it doesn&apos;t (hard-float does).

Not that I know: AFAIK soft-float exists on A32 to bridge the ABI between platforms with and without VFP. It&apos;s an ABI that works between both by basically ignoring all S/D/Q regs.

So if B3 assumes this then we&apos;re OK with the same assumption. x64-64 and A64 are OK here, I was just worried other platforms may have a slight gotcha, but since it&apos;s pervasive then it&apos;s not worth playing special.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263679</commentid>
    <comment_count>11</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-03 20:05:13 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created attachment 297986 [details]
&gt; patch
&gt; 
&gt; Addressed JF&apos;s comments

Oh can you also test -0.0? I just updated assert.eq to detect it properly (versus 0.0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263683</commentid>
    <comment_count>12</comment_count>
      <attachid>297986</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-03 20:15:54 -0800</bug_when>
    <thetext>Comment on attachment 297986
patch

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

Took a second look, I think this is good to go after suggested tests.

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:292
&gt; +        auto isDouble = jit.branchIfNotInt32(JSValueRegs(GPRInfo::returnValueGPR), DoNotHaveTagRegisters);

Actually: for the return side (after the call) don&apos;t we have the tag registers since we&apos;re coming from JS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263691</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-03 22:13:27 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 297986 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=297986&amp;action=review
&gt; 
&gt; Took a second look, I think this is good to go after suggested tests.
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:292
&gt; &gt; +        auto isDouble = jit.branchIfNotInt32(JSValueRegs(GPRInfo::returnValueGPR), DoNotHaveTagRegisters);
&gt; 
&gt; Actually: for the return side (after the call) don&apos;t we have the tag
&gt; registers since we&apos;re coming from JS?

Nope. The tags are callee saves, so a JS callee would have to save our potentially non-tag callee saves before populating the tags.

It might be worth populating the tags here and restoring them before we return. I&apos;ll leave that for another time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263692</commentid>
    <comment_count>14</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-03 22:14:54 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Comment on attachment 297986 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=297986&amp;action=review
&gt; &gt; 
&gt; &gt; Took a second look, I think this is good to go after suggested tests.
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:292
&gt; &gt; &gt; +        auto isDouble = jit.branchIfNotInt32(JSValueRegs(GPRInfo::returnValueGPR), DoNotHaveTagRegisters);
&gt; &gt; 
&gt; &gt; Actually: for the return side (after the call) don&apos;t we have the tag
&gt; &gt; registers since we&apos;re coming from JS?
&gt; 
&gt; Nope. The tags are callee saves, so a JS callee would have to save our
&gt; potentially non-tag callee saves before populating the tags.
&gt; 
&gt; It might be worth populating the tags here and restoring them before we
&gt; return. I&apos;ll leave that for another time.

Oh OK, probably not worth doing here then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263723</commentid>
    <comment_count>15</comment_count>
      <attachid>297997</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-04 01:21:29 -0800</bug_when>
    <thetext>Created attachment 297997
patch

I found a couple of interesting bug as I wrote more tests.
For
- Boxed Int32 JSValue =&gt; float/double, we were zero extending instead of sign extending before converting to float/double.
- the truncateDoubleToInt32 MacroAssembler function isn&apos;t what we want for all doubles. For example, it breaks on various numbers not representable as int32. We could probably detect the breakage and branch around it, but for now, converting double to int32 goes to the slow path.

The patch fixes these bugs, and has tests for them. Because of these bugs, the conversion code has changed a bit since the last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263725</commentid>
    <comment_count>16</comment_count>
      <attachid>297999</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-04 01:26:13 -0800</bug_when>
    <thetext>Created attachment 297999
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263726</commentid>
    <comment_count>17</comment_count>
      <attachid>298000</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-04 01:27:30 -0800</bug_when>
    <thetext>Created attachment 298000
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263729</commentid>
    <comment_count>18</comment_count>
      <attachid>298002</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-04 01:30:49 -0800</bug_when>
    <thetext>Created attachment 298002
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263809</commentid>
    <comment_count>19</comment_count>
      <attachid>298002</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-01-04 10:17:44 -0800</bug_when>
    <thetext>Comment on attachment 298002
patch

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

A few nits, lgtm otherwise.

&gt; JSTests/wasm/function-tests/function-import-return-value.js:28
&gt; +            [-0.0, (x) =&gt; assert.eq(1/x, -Infinity)],

assert.eq already handles it: it differentiates -0.0 from 0.0. You can therefore just do assert.eq(x, -0.0);

&gt; JSTests/wasm/function-tests/function-import-return-value.js:42
&gt; +            [-0.0, (x) =&gt; assert.eq(1/x, -Infinity)],

Ditto.

&gt; JSTests/wasm/function-tests/function-import-return-value.js:126
&gt; +        }

Can&apos;t this be assert.throws(() =&gt; instance.exports.foo(), Error, &quot;&quot;);

&gt; JSTests/wasm/function-tests/function-import-return-value.js:156
&gt; +}

I think you need a test with a parameter that has valueOf, and check that valueOf wasn&apos;t called (the exception occurs before the call).
Same below: if the first param isn&apos;t i64 but the second is, then its valueOf shouldn&apos;t be called.

We could just leave a FIXME + bug and do it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1264969</commentid>
    <comment_count>20</comment_count>
      <attachid>298002</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-01-09 06:58:18 -0800</bug_when>
    <thetext>Comment on attachment 298002
patch

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

r=me

&gt; Source/JavaScriptCore/wasm/WasmFunctionParser.h:330
&gt; +        return { };

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269029</commentid>
    <comment_count>21</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-01-23 04:42:48 -0800</bug_when>
    <thetext>Is this patch missed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269065</commentid>
    <comment_count>22</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-23 09:24:40 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Is this patch missed?

Yeah! I&apos;ll land today, thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269909</commentid>
    <comment_count>23</comment_count>
      <attachid>299725</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-25 12:19:16 -0800</bug_when>
    <thetext>Created attachment 299725
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269910</commentid>
    <comment_count>24</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-25 12:21:46 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comment on attachment 298002 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=298002&amp;action=review
&gt; 
&gt; A few nits, lgtm otherwise.
&gt; 
&gt; &gt; JSTests/wasm/function-tests/function-import-return-value.js:28
&gt; &gt; +            [-0.0, (x) =&gt; assert.eq(1/x, -Infinity)],
&gt; 
&gt; assert.eq already handles it: it differentiates -0.0 from 0.0. You can
&gt; therefore just do assert.eq(x, -0.0);
&gt; 
&gt; &gt; JSTests/wasm/function-tests/function-import-return-value.js:42
&gt; &gt; +            [-0.0, (x) =&gt; assert.eq(1/x, -Infinity)],
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; JSTests/wasm/function-tests/function-import-return-value.js:126
&gt; &gt; +        }
&gt; 
&gt; Can&apos;t this be assert.throws(() =&gt; instance.exports.foo(), Error, &quot;&quot;);
&gt; 
&gt; &gt; JSTests/wasm/function-tests/function-import-return-value.js:156
&gt; &gt; +}
&gt; 
&gt; I think you need a test with a parameter that has valueOf, and check that
&gt; valueOf wasn&apos;t called (the exception occurs before the call).
&gt; Same below: if the first param isn&apos;t i64 but the second is, then its valueOf
&gt; shouldn&apos;t be called.
Oops, I haven&apos;t done this yet. Will add a test for this.

&gt; 
&gt; We could just leave a FIXME + bug and do it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270055</commentid>
    <comment_count>25</comment_count>
      <attachid>299775</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-01-25 17:16:06 -0800</bug_when>
    <thetext>Created attachment 299775
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270089</commentid>
    <comment_count>26</comment_count>
      <attachid>299775</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-25 18:39:59 -0800</bug_when>
    <thetext>Comment on attachment 299775
patch for landing

Clearing flags on attachment: 299775

Committed r211195: &lt;http://trac.webkit.org/changeset/211195&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270090</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-25 18:40:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297959</attachid>
            <date>2017-01-03 15:14:58 -0800</date>
            <delta_ts>2017-01-03 15:27:51 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25404</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAyNTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE3LTAxLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnguYXNzZXJ0LmVxKToKKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmxldC50ZXN0Lm9mLnRlc3RzLmNvbnN0LmZ1bmMpOgorICAgICAg
ICAodGVzdC4xKToKKyAgICAgICAgKGFzc2VydC50cnV0aHkpOgorICAgICAgICAoYXNzZXJ0LnRo
cm93cyk6CisKIDIwMTctMDEtMDMgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY2hlY2sgYW5kIHRlc3QgaW4tY2FsbCAvIG91
dC1jYWxsIHZhbHVlcwpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2Z1bmN0aW9u
LWltcG9ydC1yZXR1cm4tdmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFsdWUuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFs
dWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjQgQEAKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JworCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwg
ImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAg
ICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCB0ZXN0cyA9IFsKKyAgICAg
ICAgWzIwLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwKV0sCisgICAgICAgIFsyMC44ODgsICh4KSA9
PiBhc3NlcnQuZXEoeCwgMjAuODg4IHwgMCldLAorICAgICAgICBbTWF0aC5QSSwgKHgpID0+IGFz
c2VydC5lcSh4LCBNYXRoLlBJIHwgMCldLAorICAgICAgICBbe3ZhbHVlT2YoKSB7IGFzc2VydC50
cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyNTsgfSB9LCAoeCkgPT4geyBh
c3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4LCAyNSkgfV0sCisgICAgXTsKKworICAg
IGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+IHsK
KyAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9
fSk7CisgICAgICAgIGNvbnN0IHJldCA9IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAgICAg
IHRlc3RbMV0ocmV0KTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1
aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjMyIiB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCBy
ZXQ6ICJmMzIifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5S
ZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7Cisg
ICAgbGV0IHRlc3RzID0gWworICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjApXSwK
KyAgICAgICAgWzIwLjg4OCwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZCgyMC44ODgp
KV0sCisgICAgICAgIFtNYXRoLlBJLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKE1h
dGguUEkpKV0sCisgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsg
Y2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1LjgyOyB9IH0sICh4KSA9PiB7IGFzc2VydC50cnV0aHko
Y2FsbGVkKTsgYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKDI1LjgyKSkgfV0sCisgICAgXTsKKwor
ICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+
IHsKKyAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAgICB9OworCisgICAgICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1
bmN9fSk7CisgICAgICAgIGNvbnN0IHJldCA9IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAg
ICAgIHRlc3RbMV0ocmV0KTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3
IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjY0
IiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtd
LCByZXQ6ICJmNjQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
IC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAg
Y29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7
CisgICAgbGV0IHRlc3RzID0gWworICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjAp
XSwKKyAgICAgICAgWzIqKjI0LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIqKjI0KV0sCisgICAgICAg
IFsyKio1MiwgKHgpID0+IGFzc2VydC5lcSh4LCAyKio1MildLAorICAgICAgICBbMjAuODg4ODg4
OCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMC44ODg4ODg4KV0sCisgICAgICAgIFtNYXRoLlBJLCAo
eCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguUEkpXSwKKyAgICAgICAgW3t2YWx1ZU9mKCkgeyBhc3Nl
cnQudHJ1dGh5KCFjYWxsZWQpOyBjYWxsZWQgPSB0cnVlOyByZXR1cm4gMjUuODI7IH0gfSwgKHgp
ID0+IHsgYXNzZXJ0LnRydXRoeShjYWxsZWQpOyBhc3NlcnQuZXEoeCwgMjUuODIpIH1dLAorICAg
IF07CisKKyAgICBmb3IgKGxldCB0ZXN0IG9mIHRlc3RzKSB7CisgICAgICAgIGNvbnN0IGZ1bmMg
PSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gdGVzdFswXTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtp
bXA6IHtmdW5jfX0pOworICAgICAgICBjb25zdCByZXQgPSBpbnN0YW5jZS5leHBvcnRzLmZvbygp
OworICAgICAgICB0ZXN0WzFdKHJldCk7CisgICAgfQorfQorCit7CisgICAgbGV0IHR5cGVzID0g
WyJpMzIiLCAiZjMyIiwgImY2NCJdOworICAgIGZvciAobGV0IHR5cGUgb2YgdHlwZXMpIHsKKyAg
ICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigi
aW1wIiwgImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogdHlwZX0pCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJh
bXM6IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAg
ICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgICAgIGNvbnN0IGZ1bmMg
PSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHZhbHVlT2Yo
KSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yOworICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Owor
ICAgICAgICB9OworCisgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmZvbygpOworICAgICAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxKGUsIGVycm9yKTsK
KyAgICAgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIo
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTY0In0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogInZv
aWQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkK
KyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgZnVuYyA9ICgpID0+IDIwOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9y
dHMuZm9vKCksIFR5cGVFcnJvciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBh
cmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KKworeworICAgIGNv
bnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJh
bXM6IFsiaTY0Il0sIHJldDogInZvaWQifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAidm9pZCJ9KQorICAgICAgICAgICAgICAgICAu
STY0Q29uc3QoMjApCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAu
UmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNv
bnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgZnVuYyA9ICgpID0+IDIw
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
e2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAg
ICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuZm9vKCksIFR5cGVFcnJv
ciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0byBhbiBpbXBv
cnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEwMjQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAxLTAzICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJl
dHVybiB2YWx1ZXMgZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZG9lcyBwcm9wZXIgY29lcmNpb24gZm9yIGFsbCBwb3NzaWJsZQorICAgICAgICBKU1Zh
bHVlIHJldHVybiB0eXBlcyBmcm9tIGFuIGltcG9ydGVkIGZ1bmN0aW9uLgorICAgICAgICAKKyAg
ICAgICAgSXQgYWxzbyBhZGRzIHRoZSBzcGVjLWNvbXBsaWFudCBjb2RlIHRvIHRocm93IGFuIGV4
Y2VwdGlvbgorICAgICAgICB3aGVuIGNhbGxpbmcgYW4gaW1wb3J0IHRoYXQgaGFzIGFuIGk2NCBw
YXJhbWV0ZXIgb3IgcmV0dXJuCisgICAgICAgIHZhbHVlLgorCisgICAgICAgICogaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJ
ZkV4Y2VwdGlvbik6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9Kcyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaDoKKwogMjAxNy0wMS0wMyAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0ganNjLmV4ZSBzb21ldGltZXMgbmV2ZXIgZXhp
dHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCShyZXZpc2lvbiAyMTAyNDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsMTEgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIH0KIH0KIAorQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCit7Cisg
ICAgcmV0dXJuIGVtaXRFeGNlcHRpb25DaGVjayhOb3JtYWxFeGNlcHRpb25DaGVjayk7Cit9CisK
IEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVj
ayhFeGNlcHRpb25DaGVja0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewog
ICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIxMDI0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExODUsNiAr
MTE4NSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKdW1wIGVtaXRFeGNlcHRp
b25DaGVjaygKICAgICAgICAgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hl
Y2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSnVtcCBlbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soKTsKKyAgICBKdW1w
IGVtaXRKdW1wSWZFeGNlcHRpb24oKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykK
ICAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RT
YW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDIxMDI0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc2LDYgKzk3Niw3IEBAIGF1dG8gQjNJUkdl
bmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKIAogICAgICAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAg
ICAgICAgICBqaXQuY2FsbChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigp
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDIxMDI0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTUgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJBc3Nl
bWJseUhlbHBlcnMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJ
VEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseUluc3RhbmNlLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5h
dGl2ZUVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24u
aCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCi10eXBlZGVmIEFzc2VtYmx5SGVscGVycyBKSVQ7Cit0eXBlZGVmIEND
YWxsSGVscGVycyBKSVQ7CiAKIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKFZN
KiB2bSwgSklUJiBqaXQsIHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQogewpA
QCAtNjEsNiArNjUsNTUgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhW
TQogICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTMyKDApLCBKSVQ6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFz
IGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUz
MjEKICAgICBqaXQuc3RvcmVQdHIoSklUOjpUcnVzdGVkSW1tUHRyKHZtLT53ZWJBc3NlbWJseVRv
SlNDYWxsZWUuZ2V0KCkpLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKIAorCisgICAgeworICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAg
ICAgICBoYXNCYWRJNjRVc2UgfD0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gSTY0OworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50ICYmICFoYXNC
YWRJNjRVc2U7ICsrYXJnTnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1
cmUtPmFyZ3VtZW50KGFyZ051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAg
IGNhc2UgQW55ZnVuYzoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgICAgICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAgICAgIGhhc0JhZEk2
NFVzZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAgICBq
aXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAg
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAg
ICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgICAgICAgICAgdm9pZCAo
KnRocm93QmFkSTY0KShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQg
eworICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CisgICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSB2bS0+dG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhl
YywgKnZtLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0
dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFy
Z3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5L
X0lEKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7Cisg
ICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5
LT5KYXZhU2NyaXB0IGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOworICAgICAgICB9CisgICAg
fQorCiAgICAgLy8gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBjb252ZW50aW9u
IHNhdmVzIGF0IGxlYXN0IGFsbCB0aGUgd2FzbSBjYWxsZWUgc2F2ZWQuIFdlIHRoZXJlZm9yZSBk
b24ndCBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgbW9yZSByZWdpc3RlcnMgc2luY2UgdGhlIHdh
c20gY2FsbGVlIGFscmVhZHkgdG9vayBjYXJlIG9mIHRoaXMuCiAgICAgUmVnaXN0ZXJTZXQgbWlz
c2luZ0NhbGxlZVNhdmVzID0gd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKICAgICBtaXNz
aW5nQ2FsbGVlU2F2ZXMuZXhjbHVkZShqc0NDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CkBAIC04
NywxMCArMTQwLDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQog
ICAgICAgICBjYXNlIEZ1bmM6CiAgICAgICAgIGNhc2UgQW55ZnVuYzoKICAgICAgICAgY2FzZSBJ
NjQ6Ci0gICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB0aGUgY29ycmVjdCBiZWhhdmlv
ciBoZXJlLiBJIHN1c3BlY3Qgd2Ugd2FudCBzdWNoIGEgc3R1YiB0byB0aHJvdyBhbiBleGNlcHRp
b24gaW1tZWRpYXRlbHkKLSAgICAgICAgICAgIC8vIGlmIGNhbGxlZC4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTk5MQotICAgICAgICAgICAgaml0LmJyZWFrcG9p
bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KICAgICAgICAgY2FzZSBJMzI6IHsKICAgICAg
ICAgICAgIEdQUlJlZyBncHJSZWc7CiAgICAgICAgICAgICBpZiAobWFyc2hhbGxlZEdQUnMgPCB3
YXNtQ0MubV9ncHJBcmdzLnNpemUoKSkKQEAgLTE0OCwxMCArMTk4LDkgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogCiAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0Nl
bGwodm0sIGppdCwgaW1wb3J0SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7CiAKLSAgICB1aW50
NjRfdCB0aGlzQXJndW1lbnQgPSBWYWx1ZVVuZGVmaW5lZDsgLy8gRklYTUUgd2hhdCBkb2VzIHRo
ZSBXZWJBc3NlbWJseSBzcGVjIHNheSB0aGlzIHNob3VsZCBiZT8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ3MQogICAgIGppdC5zdG9yZTY0KGltcG9ydEpTQ2Vs
bEdQUlJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAgICAgaml0LnN0b3JlMzIoSklU
OjpUcnVzdGVkSW1tMzIobnVtYmVyT2ZQYXJhbWV0ZXJzKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNl
dChDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpKTsKLSAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0
ZWRJbW02NCh0aGlzQXJndW1lbnQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNs
b3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsK
KyAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW02NChWYWx1ZVVuZGVmaW5lZCksIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCiAgICAgLy8gRklYTUUgVGFpbCBjYWxsIGlm
IHRoZSB3YXNtIHJldHVybiB0eXBlIGlzIHZvaWQgYW5kIG5vIHJlZ2lzdGVycyB3ZXJlIHNwaWxs
ZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODgKIApAQCAt
MTY4LDYgKzIxNyw4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0K
ICAgICBKSVQ6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBkb25lLmxpbmso
JmppdCk7CiAKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKKwog
ICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkpIHsKICAgICBjYXNlIFZvaWQ6CiAg
ICAgICAgIC8vIERpc2NhcmQuCkBAIC0xNzcsNTMgKzIyOCwxMDMgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQg
ZW1iZWRkaW5nLCBpbXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJl
dHVybiBhcmUgYSBXZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
NjQ6IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBh
Ym92ZS4KKyAgICB9CiAgICAgY2FzZSBJMzI6IHsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAg
ICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1
YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwot
ICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQzMihG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJv
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2Vy
Y2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9y
dGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAg
ICAgICBjaGVja0pTSW50MzIubGluaygmaml0KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
ICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8v
IE90aGVyd2lzZSwgd2UncmUgYW4gaW50MzIuCiAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0
cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAg
ICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEk2NDogeworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAg
ICBpc0RvdWJsZS5saW5rKCZqaXQpOwogICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02
NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgSklU
OjpKdW1wIGNoZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChKSVQ6OkFib3ZlT3JFcXVhbCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAg
IGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRv
SW50NjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
LSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6
Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
Mik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklY
TUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQg
b2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0
ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC56ZXJvRXh0
ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOwotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGppdC50cnVu
Y2F0ZURvdWJsZVRvSW50MzIoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAg
bm90QU51bWJlci5saW5rKCZqaXQpOworCisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIp
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAt
PiBpbnQzMl90IHsgCisgICAgICAgICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAgICAg
ICB9OworCisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2Vw
dGlvbigpKTsKKworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMy
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAg
IGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdl
J3JlIGFuIGludDMyCisgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVy
dEludDY0VG9GbG9hdChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0Rv
dWJsZS5saW5rKCZqaXQpOwogICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdU
eXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0
KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAg
ICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86
OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUklu
Zm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIEpJ
VDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAg
ICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJv
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2Vy
Y2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9y
dGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAg
ICAgICBjaGVja0pTSW50MzIubGluaygmaml0KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRv
UHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0g
ICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygmaml0
KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgZmxvYXQgKCpj
b252ZXJ0VG9GMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2KSAtPiBmbG9hdCB7IAorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgfTsKKworICAgICAgICBub3RBTnVtYmVy
LmxpbmsoJmppdCk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgYXV0byBjYWxsID0g
aml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJ
ZkV4Y2VwdGlvbigpKTsKKworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVy
dFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGNjQ6IHsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpU
cnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0g
ICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0
LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIg
PSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
QUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qg
d2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmpp
dCk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBu
b3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJy
YW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05v
dEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgogICAgICAgICBq
aXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGNoZWNr
SlNOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisK
KyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5q
dW1wKCkpOworCisgICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNW
YWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAorICAg
ICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIG5v
dEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGppdC5tb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBhdXRv
IGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5l
bWl0SnVtcElmRXhjZXB0aW9uKCkpOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
Y29udmVydFRvRjY0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtMjMxLDE0ICszMzIsMzIgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGppdC5lbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKIAorICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVt
cHR5KCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgICAgIGpp
dC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVt
cFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhl
Y1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKKyAgICAgICAgICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIH07CisK
KyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGRvVW53aW5kaW5nKTsKKyAgICAgICAg
fSk7CisgICAgfQorCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKICAgICBDb2RlTG9jYXRpb25M
YWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7
CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9j
YXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7Ci0g
ICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dCh2bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwotICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMi
LCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKTsKKyAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNj
cmlwdCBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKIH0KIAogc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiB3YXNtVG9XYXNtKFZNKiB2bSwgdW5zaWduZWQgaW1wb3J0SW5kZXgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAko
cmV2aXNpb24gMjEwMjQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0
aW9uUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw3ICszMjcsNyBAQCBhdXRvIEZ1bmN0
aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlCiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29u
dGV4dDo6ZW1wdHlFeHByZXNzaW9uKQogICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBw
ZW5kKHJlc3VsdCk7CiAKLSAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgY2FzZSBDYWxsSW5kaXJlY3Q6IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297963</attachid>
            <date>2017-01-03 15:27:51 -0800</date>
            <delta_ts>2017-01-03 19:21:18 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>26182</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAyNTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE3LTAxLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnguYXNzZXJ0LmVxKToKKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmxldC50ZXN0Lm9mLnRlc3RzLmNvbnN0LmZ1bmMpOgorICAgICAg
ICAodGVzdC4xKToKKyAgICAgICAgKGFzc2VydC50cnV0aHkpOgorICAgICAgICAoYXNzZXJ0LnRo
cm93cyk6CisKIDIwMTctMDEtMDMgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY2hlY2sgYW5kIHRlc3QgaW4tY2FsbCAvIG91
dC1jYWxsIHZhbHVlcwpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2Z1bmN0aW9u
LWltcG9ydC1yZXR1cm4tdmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFsdWUuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFs
dWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjQgQEAKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JworCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwg
ImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAg
ICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCB0ZXN0cyA9IFsKKyAgICAg
ICAgWzIwLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwKV0sCisgICAgICAgIFsyMC44ODgsICh4KSA9
PiBhc3NlcnQuZXEoeCwgMjAuODg4IHwgMCldLAorICAgICAgICBbTWF0aC5QSSwgKHgpID0+IGFz
c2VydC5lcSh4LCBNYXRoLlBJIHwgMCldLAorICAgICAgICBbe3ZhbHVlT2YoKSB7IGFzc2VydC50
cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyNTsgfSB9LCAoeCkgPT4geyBh
c3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4LCAyNSkgfV0sCisgICAgXTsKKworICAg
IGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+IHsK
KyAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9
fSk7CisgICAgICAgIGNvbnN0IHJldCA9IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAgICAg
IHRlc3RbMV0ocmV0KTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1
aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjMyIiB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCBy
ZXQ6ICJmMzIifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5S
ZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7Cisg
ICAgbGV0IHRlc3RzID0gWworICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjApXSwK
KyAgICAgICAgWzIwLjg4OCwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZCgyMC44ODgp
KV0sCisgICAgICAgIFtNYXRoLlBJLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKE1h
dGguUEkpKV0sCisgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsg
Y2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1LjgyOyB9IH0sICh4KSA9PiB7IGFzc2VydC50cnV0aHko
Y2FsbGVkKTsgYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKDI1LjgyKSkgfV0sCisgICAgXTsKKwor
ICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+
IHsKKyAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAgICB9OworCisgICAgICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1
bmN9fSk7CisgICAgICAgIGNvbnN0IHJldCA9IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAg
ICAgIHRlc3RbMV0ocmV0KTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3
IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjY0
IiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtd
LCByZXQ6ICJmNjQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
IC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAg
Y29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7
CisgICAgbGV0IHRlc3RzID0gWworICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjAp
XSwKKyAgICAgICAgWzIqKjI0LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIqKjI0KV0sCisgICAgICAg
IFsyKio1MiwgKHgpID0+IGFzc2VydC5lcSh4LCAyKio1MildLAorICAgICAgICBbMjAuODg4ODg4
OCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMC44ODg4ODg4KV0sCisgICAgICAgIFtNYXRoLlBJLCAo
eCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguUEkpXSwKKyAgICAgICAgW3t2YWx1ZU9mKCkgeyBhc3Nl
cnQudHJ1dGh5KCFjYWxsZWQpOyBjYWxsZWQgPSB0cnVlOyByZXR1cm4gMjUuODI7IH0gfSwgKHgp
ID0+IHsgYXNzZXJ0LnRydXRoeShjYWxsZWQpOyBhc3NlcnQuZXEoeCwgMjUuODIpIH1dLAorICAg
IF07CisKKyAgICBmb3IgKGxldCB0ZXN0IG9mIHRlc3RzKSB7CisgICAgICAgIGNvbnN0IGZ1bmMg
PSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gdGVzdFswXTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtp
bXA6IHtmdW5jfX0pOworICAgICAgICBjb25zdCByZXQgPSBpbnN0YW5jZS5leHBvcnRzLmZvbygp
OworICAgICAgICB0ZXN0WzFdKHJldCk7CisgICAgfQorfQorCit7CisgICAgbGV0IHR5cGVzID0g
WyJpMzIiLCAiZjMyIiwgImY2NCJdOworICAgIGZvciAobGV0IHR5cGUgb2YgdHlwZXMpIHsKKyAg
ICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigi
aW1wIiwgImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogdHlwZX0pCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJh
bXM6IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAg
ICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgICAgIGNvbnN0IGZ1bmMg
PSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHZhbHVlT2Yo
KSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yOworICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Owor
ICAgICAgICB9OworCisgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmZvbygpOworICAgICAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxKGUsIGVycm9yKTsK
KyAgICAgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIo
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTY0In0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogInZv
aWQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkK
KyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgZnVuYyA9ICgpID0+IDIwOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9y
dHMuZm9vKCksIFR5cGVFcnJvciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBh
cmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KKworeworICAgIGNv
bnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJh
bXM6IFsiaTY0Il0sIHJldDogInZvaWQifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAidm9pZCJ9KQorICAgICAgICAgICAgICAgICAu
STY0Q29uc3QoMjApCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAu
UmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNv
bnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgZnVuYyA9ICgpID0+IDIw
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
e2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAg
ICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuZm9vKCksIFR5cGVFcnJv
ciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0byBhbiBpbXBv
cnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEwMjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAxLTAzICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJl
dHVybiB2YWx1ZXMgZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZG9lcyBwcm9wZXIgY29lcmNpb24gZm9yIGFsbCBwb3NzaWJsZQorICAgICAgICBKU1Zh
bHVlIHJldHVybiB0eXBlcyBmcm9tIGFuIGltcG9ydGVkIGZ1bmN0aW9uLgorICAgICAgICAKKyAg
ICAgICAgSXQgYWxzbyBhZGRzIHRoZSBzcGVjLWNvbXBsaWFudCBjb2RlIHRvIHRocm93IGFuIGV4
Y2VwdGlvbgorICAgICAgICB3aGVuIGNhbGxpbmcgYW4gaW1wb3J0IHRoYXQgaGFzIGFuIGk2NCBw
YXJhbWV0ZXIgb3IgcmV0dXJuCisgICAgICAgIHZhbHVlLgorCisgICAgICAgICogaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJ
ZkV4Y2VwdGlvbik6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9Kcyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaDoKKwogMjAxNy0wMS0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZHJlc3MgZmFpbHVyZXMg
dW5kZXIgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3N0ZXBwaW5nCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
MTAyNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsMTEgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIH0KIH0KIAorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFz
c2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIGVtaXRF
eGNlcHRpb25DaGVjayhOb3JtYWxFeGNlcHRpb25DaGVjayk7Cit9CisKIEFzc2VtYmx5SGVscGVy
czo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVj
a0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewogICAgIGNhbGxFeGNlcHRp
b25GdXp6KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHJldmlzaW9uIDIxMDI1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExODUsNiArMTE4NSw3IEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKdW1wIGVtaXRFeGNlcHRpb25DaGVjaygKICAgICAg
ICAgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkp1
bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSnVtcCBl
bWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soKTsKKyAgICBKdW1wIGVtaXRKdW1wSWZFeGNl
cHRpb24oKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9p
ZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXIm
IGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMDI1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTc2LDYgKzk3Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2Rl
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAgICBqaXQuY2Fs
bChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QmluZGluZy5jcHAJKHJldmlzaW9uIDIxMDI1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDE5IEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgorI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
Ci10eXBlZGVmIEFzc2VtYmx5SGVscGVycyBKSVQ7Cit0eXBlZGVmIENDYWxsSGVscGVycyBKSVQ7
CiAKIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKFZNKiB2bSwgSklUJiBqaXQs
IHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQogewpAQCAtNjEsNiArNjUsNTUg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGppdC5zdG9y
ZTY0KEpJVDo6VHJ1c3RlZEltbTMyKDApLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKICAgICBqaXQuc3Rv
cmVQdHIoSklUOjpUcnVzdGVkSW1tUHRyKHZtLT53ZWJBc3NlbWJseVRvSlNDYWxsZWUuZ2V0KCkp
LCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAorCisgICAg
eworICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRV
c2UgfD0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gSTY0OworICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50ICYmICFoYXNCYWRJNjRVc2U7ICsrYXJn
TnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUtPmFyZ3VtZW50KGFy
Z051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
Vm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAg
ICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgaml0Lmp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShF
eGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Cisg
ICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS0+dG9w
SlNXZWJBc3NlbWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxP
YmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0
ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGlt
cG9ydGVkIGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEh
dm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGlt
cG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gSGVy
ZSB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBjb252ZW50aW9uIHNhdmVzIGF0IGxlYXN0
IGFsbCB0aGUgd2FzbSBjYWxsZWUgc2F2ZWQuIFdlIHRoZXJlZm9yZSBkb24ndCBuZWVkIHRvIHNh
dmUgYW5kIHJlc3RvcmUgbW9yZSByZWdpc3RlcnMgc2luY2UgdGhlIHdhc20gY2FsbGVlIGFscmVh
ZHkgdG9vayBjYXJlIG9mIHRoaXMuCiAgICAgUmVnaXN0ZXJTZXQgbWlzc2luZ0NhbGxlZVNhdmVz
ID0gd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKICAgICBtaXNzaW5nQ2FsbGVlU2F2ZXMu
ZXhjbHVkZShqc0NDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CkBAIC03NCwyNiArMTI3LDYgQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGNvbnN0IHVuc2ln
bmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwogICAgIGppdC5zdWJQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09mZnNldCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAgICAgSklUOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgCi0gICAg
Zm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsK
LSAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLT5hcmd1bWVudChhcmdOdW0pOwotICAg
ICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAgY2FzZSBWb2lkOgotICAgICAgICBjYXNl
IEZ1bmM6Ci0gICAgICAgIGNhc2UgQW55ZnVuYzoKLSAgICAgICAgY2FzZSBJNjQ6IHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGJlaGF2aW9yIGhlcmUuIEkg
c3VzcGVjdCB3ZSB3YW50IHN1Y2ggYSBzdHViIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbW1lZGlh
dGVseS4KLSAgICAgICAgICAgIC8vIGlmIGNhbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTk5MQotICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKLSAg
ICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19J
RCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJB
c3NlbWJseSBpbXBvcnRbJWldIHN0dWIgZm9yIHNpZ25hdHVyZSAlaSIsIGltcG9ydEluZGV4LCBz
aWduYXR1cmVJbmRleCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSTMyOgotICAgICAgICBj
YXNlIEYzMjoKLSAgICAgICAgY2FzZSBGNjQ6Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgIH0KIAogICAgIC8vIEZJWE1FIG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNo
IG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJ
dCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3CiAgICAgCkBAIC0yMjAsMTAgKzI1Myw5
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KIAogICAgIG1hdGVy
aWFsaXplSW1wb3J0SlNDZWxsKHZtLCBqaXQsIGltcG9ydEluZGV4LCBpbXBvcnRKU0NlbGxHUFJS
ZWcpOwogCi0gICAgdWludDY0X3QgdGhpc0FyZ3VtZW50ID0gVmFsdWVVbmRlZmluZWQ7IC8vIEZJ
WE1FIHdoYXQgZG9lcyB0aGUgV2ViQXNzZW1ibHkgc3BlYyBzYXkgdGhpcyBzaG91bGQgYmU/IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0NzEKICAgICBqaXQuc3Rv
cmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAg
IGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0
b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQodGhpc0FyZ3VtZW50KSwgY2FsbGVlRnJhbWUud2l0aE9m
ZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpKSk7CisgICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVV
bmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1
bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAogICAgIC8vIEZJ
WE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdp
c3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NDg4CiAKQEAgLTI0MCw2ICsyNzIsOCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHdhc21Ub0pzKFZNCiAgICAgSklUOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7
CiAgICAgZG9uZS5saW5rKCZqaXQpOwogCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNl
cHRpb25DaGVja3M7CisKICAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpKSB7CiAg
ICAgY2FzZSBWb2lkOgogICAgICAgICAvLyBEaXNjYXJkLgpAQCAtMjQ5LDUzICsyODMsMTAzIEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICAgICAgLy8gRm9y
IHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5cGVzIGluIHRo
ZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZhbGlkYXRpb24g
ZXJyb3IuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSTY0OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgfQogICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgIGpp
dC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0
KEpJVDo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC50cnVuY2F0
ZURvdWJsZVRvSW50MzIoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVz
dDY0KEpJVDo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVy
KTsgLy8gRklYTUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3Qs
IGluc3RlYWQgb2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7CisgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0
LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpOworICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGFuIGludDMyLgogICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKICAgICAgICAgaml0Lm1vdmUo
SklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BS
Mik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpB
Ym92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBqaXQu
dHJ1bmNhdGVEb3VibGVUb0ludDY0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTTnVtYmVyID0gaml0LmJy
YW5jaFRlc3Q2NChKSVQ6Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFISXNOb3RK
U051bWJlcik7IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRoZSB2YWx1ZXMgYXJlbid0IHdoYXQgd2Ug
ZXhwZWN0LCBpbnN0ZWFkIG9mIGFib3J0aW5nLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNrSlNJbnQzMi5saW5rKCZqaXQpOwotICAg
ICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQpOwor
ICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUkluZm86OnJldHVyblZhbHVlRlBS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1w
KCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKworICAgICAgICBpbnQzMl90
ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAorICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQz
MihleGVjKTsKKyAgICAgICAgfTsKKworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1vdmUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGF1
dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0
LmVtaXRKdW1wSWZFeGNlcHRpb24oKSk7CisKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIGNvbnZlcnRUb0kzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRjMyOiB7CisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJy
YW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdp
c3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNW
YWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMp
OworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9Q
dHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQ
UkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKICAgICAgICAgaml0Lm1vdmUoSklUOjpU
cnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Cisg
ICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiAgICAgICAgIGppdC5jb252ZXJ0RG91
YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6
QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVz
dDY0KEpJVDo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVy
KTsgLy8gRklYTUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3Qs
IGluc3RlYWQgb2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBjaGVja0pT
TnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisg
ICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihleGVjKSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBl
bmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKSk7CisKKyAgICAgICAgaml0LmFkZExpbmtUYXNr
KFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGlu
aygmaml0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRjY0OiB7Ci0gICAgICAg
IGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgSklUOjpKdW1wIGNo
ZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChKSVQ6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIEpJVDo6SnVt
cCBjaGVja0pTTnVtYmVyID0gaml0LmJyYW5jaFRlc3Q2NChKSVQ6Ok5vblplcm8sIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEFISXNOb3RKU051bWJlcik7IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRo
ZSB2YWx1ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0LCBpbnN0ZWFkIG9mIGFib3J0aW5nLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNr
SlNJbnQzMi5saW5rKCZqaXQpOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7
CisgICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBp
c0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4g
aW50MzIKICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGppdC5jb252ZXJ0SW50NjRU
b0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OwotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGRvbmUuYXBwZW5k
KGppdC5qdW1wKCkpOworCisgICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CisgICAgICAgIGpp
dC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQp
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAt
PiBkb3VibGUgeyAKKyAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAg
ICB9OworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hl
Y2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaml0LmFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGNhbGwsIGNvbnZlcnRUb0Y2NCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRv
bmUubGluaygmaml0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTMwMywxMyAr
Mzg3LDM2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAKKyAgICBpZiAoIWV4
Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZq
aXQpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZl
c0J1ZmZlcigpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsK
KyAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgICAgICB2b2lkICgq
ZG9VbndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7
CisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2lu
ZCh2bSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gp
OworICAgICAgICB9OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2lu
ZGluZyk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2Fs
bCwgRnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0
dXJuTG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7CiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
dGFyZ2V0VG9DaGVjaykpOwogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlciA9
IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCk7CiAgICAgY2FsbExpbmtJ
bmZvLT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBo
b3RQYXRoT3RoZXIpOworI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBTdHJpbmcgc2lnbmF0dXJl
RGVzY3JpcHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHZtLCBzaWduYXR1cmVJbmRl
eCktPnRvU3RyaW5nKCk7CisjZWxzZQorICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbjsK
KyNlbmRpZgogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2Vt
Ymx5LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlRGVz
Y3JpcHRpb24uYXNjaWkoKS5kYXRhKCkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJldmlzaW9uIDIxMDI1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjcsNyArMzI3LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6
cGFyc2VFeHByZQogICAgICAgICBpZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lv
bikKICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCi0gICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNh
c2UgQ2FsbEluZGlyZWN0OiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297986</attachid>
            <date>2017-01-03 19:21:18 -0800</date>
            <delta_ts>2017-01-04 01:21:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25988</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAyNTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDE3LTAxLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLnguYXNzZXJ0LmVxKToKKyAgICAgICAgKGltcG9ydC5C
dWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0
cmluZ19hcHBlYXJlZF9oZXJlLmxldC50ZXN0Lm9mLnRlc3RzLmNvbnN0LmZ1bmMpOgorICAgICAg
ICAodGVzdC4xKToKKyAgICAgICAgKGFzc2VydC50cnV0aHkpOgorICAgICAgICAoYXNzZXJ0LnRo
cm93cyk6CisKIDIwMTctMDEtMDMgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY2hlY2sgYW5kIHRlc3QgaW4tY2FsbCAvIG91
dC1jYWxsIHZhbHVlcwpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2Z1bmN0aW9u
LWltcG9ydC1yZXR1cm4tdmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFsdWUuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFs
dWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjQgQEAKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JworCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUo
KS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwg
ImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAg
ICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxl
KGJpbik7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCB0ZXN0cyA9IFsKKyAgICAg
ICAgWzIwLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwKV0sCisgICAgICAgIFsyMC44ODgsICh4KSA9
PiBhc3NlcnQuZXEoeCwgMjAuODg4IHwgMCldLAorICAgICAgICBbTWF0aC5QSSwgKHgpID0+IGFz
c2VydC5lcSh4LCBNYXRoLlBJIHwgMCldLAorICAgICAgICBbe3ZhbHVlT2YoKSB7IGFzc2VydC50
cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyNTsgfSB9LCAoeCkgPT4geyBh
c3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4LCAyNSkgfV0sCisgICAgXTsKKworICAg
IGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+IHsK
KyAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAgICB9OworCisgICAgICAgIGNvbnN0
IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9
fSk7CisgICAgICAgIGNvbnN0IHJldCA9IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAgICAg
IHRlc3RbMV0ocmV0KTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1
aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjMyIiB9
KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQorICAg
ICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCBy
ZXQ6ICJmMzIifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5S
ZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7Cisg
ICAgbGV0IHRlc3RzID0gWworICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjApXSwK
KyAgICAgICAgWzIwLjg4OCwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZCgyMC44ODgp
KV0sCisgICAgICAgIFtNYXRoLlBJLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKE1h
dGguUEkpKV0sCisgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsg
Y2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1LjgyOyB9IH0sICh4KSA9PiB7IGFzc2VydC50cnV0aHko
Y2FsbGVkKTsgYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKDI1LjgyKSkgfV0sCisgICAgXTsKKwor
ICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHMpIHsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+
IHsKKyAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAgICB9OworCisgICAgICAgIGNv
bnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1
bmN9fSk7CisgICAgICAgIGNvbnN0IHJldCA9IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAg
ICAgIHRlc3RbMV0ocmV0KTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3
IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiZjY0
IiB9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
LkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQoKQor
ICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtd
LCByZXQ6ICJmNjQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
IC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAg
Y29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7
CisgICAgbGV0IHRlc3RzID0gWworICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjAp
XSwKKyAgICAgICAgWzIqKjI0LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIqKjI0KV0sCisgICAgICAg
IFsyKio1MiwgKHgpID0+IGFzc2VydC5lcSh4LCAyKio1MildLAorICAgICAgICBbMjAuODg4ODg4
OCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMC44ODg4ODg4KV0sCisgICAgICAgIFtNYXRoLlBJLCAo
eCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguUEkpXSwKKyAgICAgICAgW3t2YWx1ZU9mKCkgeyBhc3Nl
cnQudHJ1dGh5KCFjYWxsZWQpOyBjYWxsZWQgPSB0cnVlOyByZXR1cm4gMjUuODI7IH0gfSwgKHgp
ID0+IHsgYXNzZXJ0LnRydXRoeShjYWxsZWQpOyBhc3NlcnQuZXEoeCwgMjUuODIpIH1dLAorICAg
IF07CisKKyAgICBmb3IgKGxldCB0ZXN0IG9mIHRlc3RzKSB7CisgICAgICAgIGNvbnN0IGZ1bmMg
PSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gdGVzdFswXTsKKyAgICAgICAgfTsKKworICAg
ICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtp
bXA6IHtmdW5jfX0pOworICAgICAgICBjb25zdCByZXQgPSBpbnN0YW5jZS5leHBvcnRzLmZvbygp
OworICAgICAgICB0ZXN0WzFdKHJldCk7CisgICAgfQorfQorCit7CisgICAgbGV0IHR5cGVzID0g
WyJpMzIiLCAiZjMyIiwgImY2NCJdOworICAgIGZvciAobGV0IHR5cGUgb2YgdHlwZXMpIHsKKyAg
ICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigi
aW1wIiwgImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDogdHlwZX0pCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJh
bXM6IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAg
ICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgICAgIGNvbnN0IGZ1bmMg
PSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHZhbHVlT2Yo
KSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yOworICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Owor
ICAgICAgICB9OworCisgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5leHBvcnRzLmZvbygpOworICAgICAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVxKGUsIGVycm9yKTsK
KyAgICAgICAgICAgICAgICB0aHJldyA9IHRydWU7CisgICAgICAgICAgICAgICAgZXJyb3IgPSBu
dWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIo
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTY0In0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogInZv
aWQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5Ecm9wKCkK
KyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgZnVuYyA9ICgpID0+IDIwOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5
Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9y
dHMuZm9vKCksIFR5cGVFcnJvciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBh
cmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KKworeworICAgIGNv
bnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJh
bXM6IFsiaTY0Il0sIHJldDogInZvaWQifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJm
b28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAidm9pZCJ9KQorICAgICAgICAgICAgICAgICAu
STY0Q29uc3QoMjApCisgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAu
UmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNv
bnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUg
PSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgZnVuYyA9ICgpID0+IDIw
OworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwg
e2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAg
ICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuZm9vKCksIFR5cGVFcnJv
ciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0byBhbiBpbXBv
cnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMjEwMjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3LTAxLTAzICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJl
dHVybiB2YWx1ZXMgZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggZG9lcyBwcm9wZXIgY29lcmNpb24gZm9yIGFsbCBwb3NzaWJsZQorICAgICAgICBKU1Zh
bHVlIHJldHVybiB0eXBlcyBmcm9tIGFuIGltcG9ydGVkIGZ1bmN0aW9uLgorICAgICAgICAKKyAg
ICAgICAgSXQgYWxzbyBhZGRzIHRoZSBzcGVjLWNvbXBsaWFudCBjb2RlIHRvIHRocm93IGFuIGV4
Y2VwdGlvbgorICAgICAgICB3aGVuIGNhbGxpbmcgYW4gaW1wb3J0IHRoYXQgaGFzIGFuIGk2NCBw
YXJhbWV0ZXIgb3IgcmV0dXJuCisgICAgICAgIHZhbHVlLgorCisgICAgICAgICogaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJ
ZkV4Y2VwdGlvbik6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcu
Y3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9Kcyk6CisgICAgICAgICogd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaDoKKwogMjAxNy0wMS0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZHJlc3MgZmFpbHVyZXMg
dW5kZXIgTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3N0ZXBwaW5nCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
MTAyNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1NCw2ICszNTQsMTEgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmNhbGxFeGNlcHRpb25GdXp6KAogICAgIH0KIH0KIAorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFz
c2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIGVtaXRF
eGNlcHRpb25DaGVjayhOb3JtYWxFeGNlcHRpb25DaGVjayk7Cit9CisKIEFzc2VtYmx5SGVscGVy
czo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVj
a0tpbmQga2luZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewogICAgIGNhbGxFeGNlcHRp
b25GdXp6KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHJldmlzaW9uIDIxMDI1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExODUsNiArMTE4NSw3IEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBKdW1wIGVtaXRFeGNlcHRpb25DaGVjaygKICAgICAg
ICAgRXhjZXB0aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkp1
bXBXaWR0aCA9IE5vcm1hbEp1bXBXaWR0aCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSnVtcCBl
bWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2soKTsKKyAgICBKdW1wIGVtaXRKdW1wSWZFeGNl
cHRpb24oKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9p
ZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXIm
IGNvdW50ZXIsIGludDMyX3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMDI1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTc2LDYgKzk3Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2Rl
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAgICBqaXQuY2Fs
bChwYXJhbXNbcmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpKTsKICAgICAgICAgICAg
IH0pOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QmluZGluZy5jcHAJKHJldmlzaW9uIDIxMDI1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDE5IEBACiAK
ICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgorI2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNl
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJX
YXNtRXhjZXB0aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewog
Ci10eXBlZGVmIEFzc2VtYmx5SGVscGVycyBKSVQ7Cit0eXBlZGVmIENDYWxsSGVscGVycyBKSVQ7
CiAKIHN0YXRpYyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKFZNKiB2bSwgSklUJiBqaXQs
IHVuc2lnbmVkIGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQogewpAQCAtNjEsNiArNjUsNTUg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGppdC5zdG9y
ZTY0KEpJVDo6VHJ1c3RlZEltbTMyKDApLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKICAgICBqaXQuc3Rv
cmVQdHIoSklUOjpUcnVzdGVkSW1tUHRyKHZtLT53ZWJBc3NlbWJseVRvSlNDYWxsZWUuZ2V0KCkp
LCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAorCisgICAg
eworICAgICAgICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRV
c2UgfD0gc2lnbmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gSTY0OworICAgICAgICBmb3IgKHVuc2ln
bmVkIGFyZ051bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50ICYmICFoYXNCYWRJNjRVc2U7ICsrYXJn
TnVtKSB7CisgICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUtPmFyZ3VtZW50KGFy
Z051bSk7CisgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
Vm9pZDoKKyAgICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAg
ICAgICBjYXNlIEk2NDogeworICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICAgICAgaml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgaml0Lmp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShF
eGVjU3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7Cisg
ICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS0+dG9w
SlNXZWJBc3NlbWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byogZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxP
YmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0
ZXJhbCgiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGlt
cG9ydGVkIGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEh
dm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGlu
dmFsaWQgaTY0IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVu
dGlvbiBzYXZlcyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZv
cmUgZG9uJ3QgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRo
ZSB3YXNtIGNhbGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgogICAgIFJlZ2lzdGVyU2V0
IG1pc3NpbmdDYWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CiAgICAg
bWlzc2luZ0NhbGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOwpA
QCAtNzQsMjYgKzEyNyw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMo
Vk0KICAgICBjb25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKICAgICBq
aXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIEpJVDo6QWRkcmVzcyBjYWxs
ZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJn
Q291bnQ7ICsrYXJnTnVtKSB7Ci0gICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS0+YXJn
dW1lbnQoYXJnTnVtKTsKLSAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgIGNhc2Ug
Vm9pZDoKLSAgICAgICAgY2FzZSBGdW5jOgotICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAg
IGNhc2UgSTY0OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB0aGUgY29ycmVj
dCBiZWhhdmlvciBoZXJlLiBJIHN1c3BlY3Qgd2Ugd2FudCBzdWNoIGEgc3R1YiB0byB0aHJvdyBh
biBleGNlcHRpb24gaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAvLyBpZiBjYWxsZWQuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5OTEKLSAgICAgICAgICAgIGpp
dC5icmVha3BvaW50KCk7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
aml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1ibHkgaW1wb3J0WyVpXSBzdHViIGZvciBzaWduYXR1cmUg
JWkiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEkzMjoKLSAgICAgICAgY2FzZSBGMzI6Ci0gICAgICAgIGNhc2UgRjY0OgotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICAvLyBGSVhNRSBtYWtlIHRoZXNl
IGxvb3BzIHdoaWNoIHN3aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkgYXJndW1l
bnRzIG9uIHRoZSBzdGFjay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2Ugc2lnbmF0
dXJlcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0NwogICAg
IApAQCAtMjIwLDEwICsyNTMsOSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21U
b0pzKFZNCiAKICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbCh2bSwgaml0LCBpbXBvcnRJbmRl
eCwgaW1wb3J0SlNDZWxsR1BSUmVnKTsKIAotICAgIHVpbnQ2NF90IHRoaXNBcmd1bWVudCA9IFZh
bHVlVW5kZWZpbmVkOyAvLyBGSVhNRSB3aGF0IGRvZXMgdGhlIFdlYkFzc2VtYmx5IHNwZWMgc2F5
IHRoaXMgc2hvdWxkIGJlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1NDcxCiAgICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53
aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkpKTsKICAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJP
ZlBhcmFtZXRlcnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCkpOwotICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KHRoaXNBcmd1bWVudCks
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5zdG9yZTY0KEpJVDo6
VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxs
RnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpKSk7CiAKICAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUg
aXMgdm9pZCBhbmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4OAogCkBAIC0yNDAsNiArMjcyLDggQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIEpJVDo6Q2FsbCBzbG93Q2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOwogICAgIGRvbmUubGluaygmaml0KTsKIAorICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCiAgICAgc3dpdGNoIChzaWduYXR1cmUt
PnJldHVyblR5cGUoKSkgewogICAgIGNhc2UgVm9pZDoKICAgICAgICAgLy8gRGlzY2FyZC4KQEAg
LTI0OSw1MyArMjgzLDk5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMo
Vk0KICAgICAgICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRo
IHRoZXNlIHR5cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHku
TW9kdWxlIHZhbGlkYXRpb24gZXJyb3IuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSTY0OiB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgfQogICAgIGNhc2Ug
STMyOiB7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIp
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0lu
dDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91
YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0g
ICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1i
ZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFz
b24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVu
J3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmso
JmppdCk7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0
byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0
LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBE
b05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGFuIGlu
dDMyLgogICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5r
KCZqaXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJNjQ6IHsKKyAgICAgICAg
ZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsK
ICAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBq
aXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGppdC5tb3Zl
NjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIpOwotICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KEZQUkluZm86OnJldHVyblZh
bHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVj
a0pTTnVtYmVyID0gaml0LmJyYW5jaFRlc3Q2NChKSVQ6Ok5vblplcm8sIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWJvcnRX
aXRoUmVhc29uKEFISXNOb3RKU051bWJlcik7IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRoZSB2YWx1
ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0LCBpbnN0ZWFkIG9mIGFib3J0aW5nLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNrSlNJbnQz
Mi5saW5rKCZqaXQpOwotICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgY2hlY2tKU051
bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUklu
Zm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGRv
bmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsK
KyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2Vw
dGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKSk7CisKKyAgICAgICAg
aW50MzJfdCAoKmNvbnZlcnRUb0kzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGludDMyX3QgeyAKKyAgICAgICAgICAgIHJldHVybiB2
LnRvSW50MzIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhj
YWxsLCBjb252ZXJ0VG9JMzIpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmpp
dCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEYzMjogeworICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5i
cmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVn
aXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpT
VmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJz
KTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKKyAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRv
UHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkp
OworCisgICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5tb3ZlKEpJVDo6
VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwor
ICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CiAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwogICAgICAgICBqaXQuY29udmVydERv
dWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChKSVQ6
OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTTnVtYmVyID0gaml0LmJyYW5jaFRl
c3Q2NChKSVQ6Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFISXNOb3RKU051bWJl
cik7IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRoZSB2YWx1ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0
LCBpbnN0ZWFkIG9mIGFib3J0aW5nLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNrSlNJbnQzMi5saW5rKCZqaXQpOwotICAgICAgICBq
aXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgY2hlY2tK
U051bWJlci5saW5rKCZqaXQpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKwor
ICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNh
bGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0
SnVtcElmRXhjZXB0aW9uKCkpOworCisgICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVj
U3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxv
YXQgeyAKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051bWJlcihl
eGVjKSk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252
ZXJ0VG9GMzIpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEY2NDogewotICAgICAgICBqaXQubW92ZShKSVQ6
OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsK
LSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBq
aXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU051bWJl
ciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2VyY2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4n
dCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9ydGluZy4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAgICAgICBjaGVja0pTSW50MzIubGluaygm
aml0KTsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRv
IG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQu
YnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCiAgICAgICAg
IGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgY2hl
Y2tKU051bWJlci5saW5rKCZqaXQpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsK
KworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOworICAgICAgICBqaXQubW92ZShKSVQ6OlRy
dXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAg
ICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25DaGVja3Mu
YXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkpOworCisgICAgICAgIGRvdWJsZSAoKmNv
bnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAorICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhl
Yyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0
VG9GNjQpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICB9CkBAIC0zMDMsMTMgKzM4MywzNiBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CiAgICAgaml0LnJldCgpOwogCisgICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkg
eworICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKKyAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7CisKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUq
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAg
ICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9KTsKKyAg
ICB9CisKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktf
SUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRD
VElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGhv
dFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKICAgICBD
b2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoZmFzdENhbGwpOwogICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhj
YWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyNpZiAhZGVm
aW5lZChOREVCVUcpCiAgICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJl
SW5mb3JtYXRpb246OmdldCh2bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOworI2Vsc2UK
KyAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb247CisjZW5kaWYKICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRb
JWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgp
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvblBhcnNlci5oCShyZXZpc2lvbiAyMTAyNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDcgKzMyNyw3
IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgaWYg
KHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAgICAgICAgICBtX2V4cHJl
c3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKIAotICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIENhbGxJbmRpcmVjdDogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297997</attachid>
            <date>2017-01-04 01:21:29 -0800</date>
            <delta_ts>2017-01-04 01:26:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25839</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAyNzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTAxLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLnguYXNzZXJ0LmVxKToKKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLk1hdGguZnJvdW5kKToK
KyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0
LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmxldC50eXBlLm9mLlJlZmxlY3Qu
b3duS2V5cyk6CisgICAgICAgICh0ZXN0LjEpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeSk6Cisg
ICAgICAgIChhc3NlcnQudGhyb3dzKToKKwogMjAxNy0wMS0wMyAgSkYgQmFzdGllbiAgPGpmYmFz
dGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBjaGVjayBhbmQg
dGVzdCBpbi1jYWxsIC8gb3V0LWNhbGwgdmFsdWVzCkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24t
aW1wb3J0LXJldHVybi12YWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisKKyAgICBj
b25zdCB0ZXN0cyA9IHsKKyAgICAgICAgaTMyOiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBh
c3NlcnQuZXEoeCwgMjApXSwKKyAgICAgICAgICAgIFsyMC44ODgsICh4KSA9PiBhc3NlcnQuZXEo
eCwgMjAuODg4IHwgMCldLAorICAgICAgICAgICAgW01hdGguUEksICh4KSA9PiBhc3NlcnQuZXEo
eCwgTWF0aC5QSSB8IDApXSwKKyAgICAgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRydXRo
eSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1OyB9IH0sICh4KSA9PiB7IGFzc2Vy
dC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIDI1KTsgY2FsbGVkID0gZmFsc2U7IH1dLAor
ICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2VydC5lcSh4LCBOYU4gfCAwKV0sCisgICAgICAg
ICAgICBbLTAuMCwgKHgpID0+IGFzc2VydC5lcSgxL3gsIEluZmluaXR5KV0sCisgICAgICAgICAg
ICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIHVuZGVmaW5lZCB8IDApXSwKKyAgICAg
ICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIG51bGwgfCAwKV0sCisgICAgICAgICAg
ICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3NlcnQuZXEoeCwgTnVtYmVyLk1B
WF9TQUZFX0lOVEVHRVIgfCAwKV0sCisgICAgICAgICAgICBbMioqMzEgLSAxLCAoeCkgPT4gYXNz
ZXJ0LmVxKHgsICgyKiozMSAtIDEpIHwgMCldLAorICAgICAgICAgICAgWzIqKjMyIC0gMSwgKHgp
ID0+IGFzc2VydC5lcSh4LCAoMioqMzIgLSAxKSB8IDApXSwKKyAgICAgICAgICAgIFsyKiozMiAt
IDEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgKDIqKjMyIC0gMTAwMCkgfCAwKV0sCisgICAgICAg
IF0sCisgICAgICAgIGYzMjogWworICAgICAgICAgICAgWzIwLCAoeCkgPT4gYXNzZXJ0LmVxKHgs
IDIwKV0sCisgICAgICAgICAgICBbMjAuODg4LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguZnJv
dW5kKDIwLjg4OCkpXSwKKyAgICAgICAgICAgIFtNYXRoLlBJLCAoeCkgPT4gYXNzZXJ0LmVxKHgs
IE1hdGguZnJvdW5kKE1hdGguUEkpKV0sCisgICAgICAgICAgICBbe3ZhbHVlT2YoKSB7IGFzc2Vy
dC50cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyNS44MjsgfSB9LCAoeCkg
PT4geyBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZCgyNS44
MikpOyBjYWxsZWQgPSBmYWxzZTsgfV0sCisgICAgICAgICAgICBbTmFOLCAoeCkgPT4gYXNzZXJ0
LnRydXRoeShpc05hTih4KSldLAorICAgICAgICAgICAgWy0wLjAsICh4KSA9PiBhc3NlcnQuZXEo
MS94LCAtSW5maW5pdHkpXSwKKyAgICAgICAgICAgIFt1bmRlZmluZWQsICh4KSA9PiBhc3NlcnQu
dHJ1dGh5KGlzTmFOKHgpKV0sCisgICAgICAgICAgICBbbnVsbCwgKHgpID0+IGFzc2VydC5lcSh4
LCAwKV0sCisgICAgICAgICAgICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3Nl
cnQuZXEoeCwgTWF0aC5mcm91bmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKV0sCisgICAgICAg
ICAgICBbLTEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgLTEwMDApXSwKKyAgICAgICAgXSwKKyAg
ICAgICAgZjY0OiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjApXSwK
KyAgICAgICAgICAgIFsyKioyNCwgKHgpID0+IGFzc2VydC5lcSh4LCAyKioyNCldLAorICAgICAg
ICAgICAgWzIqKjUyLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIqKjUyKV0sCisgICAgICAgICAgICBb
MjAuODg4ODg4OCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMC44ODg4ODg4KV0sCisgICAgICAgICAg
ICBbTWF0aC5QSSwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLlBJKV0sCisgICAgICAgICAgICBb
e3ZhbHVlT2YoKSB7IGFzc2VydC50cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVy
biAyNS44MjsgfSB9LCAoeCkgPT4geyBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4
LCAyNS44Mik7IGNhbGxlZCA9IGZhbHNlOyB9XSwKKyAgICAgICAgICAgIFtOYU4sICh4KSA9PiBh
c3NlcnQudHJ1dGh5KGlzTmFOKHgpKV0sCisgICAgICAgICAgICBbLTAuMCwgKHgpID0+IGFzc2Vy
dC5lcSgxL3gsIC1JbmZpbml0eSldLAorICAgICAgICAgICAgW3VuZGVmaW5lZCwgKHgpID0+IGFz
c2VydC50cnV0aHkoaXNOYU4oeCkpXSwKKyAgICAgICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0
LmVxKHgsIDApXSwKKyAgICAgICAgICAgIFtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgKHgpID0+
IGFzc2VydC5lcSh4LCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUildLAorICAgICAgICAgICAgWy0x
MDAwLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIC0xMDAwKV0sCisgICAgICAgIF0KKyAgICB9OworCisg
ICAgZm9yIChsZXQgdHlwZSBvZiBSZWZsZWN0Lm93bktleXModGVzdHMpKSB7CisgICAgICAgIGNv
bnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJm
dW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwg
cmV0OiB0eXBlfSkKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKwor
ICAgICAgICBmb3IgKGxldCB0ZXN0IG9mIHRlc3RzW3R5cGVdKSB7CisgICAgICAgICAgICBjb25z
dCBmdW5jID0gKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7ZnVuY319KTsKKyAgICAgICAgICAgIGNvbnN0IHJldCA9
IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAgICAgICAgICB0ZXN0WzFdKHJldCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdHlwZXMgPSBbImkzMiIsICJmMzIiLCAiZjY0
Il07CisgICAgZm9yIChsZXQgdHlwZSBvZiB0eXBlcykgeworICAgICAgICBjb25zdCBidWlsZGVy
ID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgICAg
LkltcG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFy
YW1zOiBbXSwgcmV0OiB0eXBlfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5G
dW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogdHlwZX0p
CisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5VbnJl
YWNoYWJsZSgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCk7CisK
KworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICAgICAg
bGV0IGVycm9yID0gbnVsbDsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+IHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdmFsdWVPZigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZXJyb3IgPSBuZXcgRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9y
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1w
OiB7ZnVuY319KTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAg
ICAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgIGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXEoZSwgZXJyb3IpOworICAgICAgICAgICAgICAgIHRo
cmV3ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IG51bGw7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKKyAgICAgICAgfQorICAgIH0KK30K
KworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJm
dW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpNjQifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAidm9pZCJ9KQorICAgICAgICAgICAg
ICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkRyb3AoKQorICAgICAgICAgICAgICAgIC5S
ZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBmdW5jID0gKCkgPT4gMjA7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
aW1wOiB7ZnVuY319KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAg
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5mb28oKSwgVHlwZUVycm9y
LCAiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9y
dGVkIGZ1bmN0aW9uIik7CisgICAgfQorfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBC
dWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMiLCB7IHBhcmFtczogWyJpNjQiXSwgcmV0OiAi
dm9pZCJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIn0pCisgICAgICAgICAgICAgICAgIC5JNjRDb25zdCgyMCkKKyAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBmdW5jID0gKCkgPT4gMjA7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7ZnVuY319KTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5mb28oKSwgVHlwZUVycm9yLCAiaTY0IG5vdCBhbGxvd2Vk
IGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIik7Cisg
ICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTAyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTctMDEtMDQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBjb2VyY2UgcmV0dXJuIHZhbHVlcyBmcm9tIGlt
cG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTQ4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk3NjAzMTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHByb3BlciBj
b2VyY2lvbiBmb3IgYWxsIHBvc3NpYmxlCisgICAgICAgIEpTVmFsdWUgcmV0dXJuIHR5cGVzIGZy
b20gYW4gaW1wb3J0ZWQgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICBJdCBhbHNvIGFkZHMg
dGhlIHNwZWMtY29tcGxpYW50IGNvZGUgdG8gdGhyb3cgYW4gZXhjZXB0aW9uCisgICAgICAgIHdo
ZW4gY2FsbGluZyBhbiBpbXBvcnQgdGhhdCBoYXMgYW4gaTY0IHBhcmFtZXRlciBvciByZXR1cm4K
KyAgICAgICAgdmFsdWUuCisKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ondhc21Ub0pzKToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgor
CiAyMDE3LTAxLTAzICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OIChyMjEwMjQ0KTogUmVsZWFzZSBKU0MgU3RyZXNzIHRlc3QgZmFpbHVyZTog
d2FzbS55YW1sL3dhc20vanMtYXBpL3dhc20tdG8td2FzbS5qcy5kZWZhdWx0LXdhc20KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDIxMDI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwxMSBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAgICAgfQogfQogCitBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4g
ZW1pdEV4Y2VwdGlvbkNoZWNrKE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKK30KKwogQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlv
bkNoZWNrS2luZCBraW5kLCBFeGNlcHRpb25KdW1wV2lkdGggd2lkdGgpCiB7CiAgICAgY2FsbEV4
Y2VwdGlvbkZ1enooKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjEwMjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4NSw2ICsxMTg1LDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKAog
ICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjaywgRXhjZXB0
aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
dW1wIGVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjaygpOworICAgIEp1bXAgZW1pdEp1bXBJ
ZkV4Y2VwdGlvbigpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIHN0YXRp
YyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291
bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjEw
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NzYsNiArOTc2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxl
ZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogCiAgICAgICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgICAgIGpp
dC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCkpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjEwMjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsMTkg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVy
cy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0aW9u
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1
ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLXR5cGVkZWYgQXNzZW1ibHlIZWxwZXJzIEpJVDsKK3R5cGVkZWYgQ0NhbGxIZWxwZXJz
IEpJVDsKIAogc3RhdGljIHZvaWQgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoVk0qIHZtLCBKSVQm
IGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCiB7CkBAIC02MSw2ICs2
NSw1NSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgaml0
LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nr
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQogICAgIGpp
dC5zdG9yZVB0cihKSVQ6OlRydXN0ZWRJbW1QdHIodm0tPndlYkFzc2VtYmx5VG9KU0NhbGxlZS5n
ZXQoKSksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCisK
KyAgICB7CisgICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7CisgICAgICAgIGhhc0Jh
ZEk2NFVzZSB8PSBzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsg
KythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS0+YXJndW1l
bnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlm
dW5jOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgICAgIGNhc2UgSTY0OiB7CisgICAgICAgICAgICAgICAgaGFzQmFkSTY0VXNlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChoYXNCYWRJNjRVc2UpIHsKKyAgICAgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJ
NjQpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LT50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGds
b2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVND
SUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8g
YW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKKyAgICAgICAgICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3Jp
cHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOworICAgICAg
ICB9CisgICAgfQorCiAgICAgLy8gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBj
b252ZW50aW9uIHNhdmVzIGF0IGxlYXN0IGFsbCB0aGUgd2FzbSBjYWxsZWUgc2F2ZWQuIFdlIHRo
ZXJlZm9yZSBkb24ndCBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgbW9yZSByZWdpc3RlcnMgc2lu
Y2UgdGhlIHdhc20gY2FsbGVlIGFscmVhZHkgdG9vayBjYXJlIG9mIHRoaXMuCiAgICAgUmVnaXN0
ZXJTZXQgbWlzc2luZ0NhbGxlZVNhdmVzID0gd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsK
ICAgICBtaXNzaW5nQ2FsbGVlU2F2ZXMuZXhjbHVkZShqc0NDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cyk7CkBAIC03NCwyNiArMTI3LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNt
VG9KcyhWTQogICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwog
ICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09mZnNldCks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgSklUOjpBZGRyZXNz
IGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0g
PCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJl
LT5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAg
Y2FzZSBWb2lkOgotICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgIGNhc2UgQW55ZnVuYzoKLSAg
ICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHRoZSBj
b3JyZWN0IGJlaGF2aW9yIGhlcmUuIEkgc3VzcGVjdCB3ZSB3YW50IHN1Y2ggYSBzdHViIHRvIHRo
cm93IGFuIGV4Y2VwdGlvbiBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgIC8vIGlmIGNhbGxlZC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTk5MQotICAgICAgICAg
ICAgaml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseSBpbXBvcnRbJWldIHN0dWIgZm9yIHNpZ25h
dHVyZSAlaSIsIGltcG9ydEluZGV4LCBzaWduYXR1cmVJbmRleCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgSTMyOgotICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgY2FzZSBGNjQ6Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgIH0KIAogICAgIC8vIEZJWE1FIG1ha2Ug
dGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBh
cmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBz
aWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3
CiAgICAgCkBAIC0yMjAsMTAgKzI1Myw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
d2FzbVRvSnMoVk0KIAogICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKHZtLCBqaXQsIGltcG9y
dEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOwogCi0gICAgdWludDY0X3QgdGhpc0FyZ3VtZW50
ID0gVmFsdWVVbmRlZmluZWQ7IC8vIEZJWE1FIHdoYXQgZG9lcyB0aGUgV2ViQXNzZW1ibHkgc3Bl
YyBzYXkgdGhpcyBzaG91bGQgYmU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0NzEKICAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51
bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQodGhpc0FyZ3Vt
ZW50KSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgaml0LnN0b3JlNjQo
SklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKIAogICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4g
dHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CiAKQEAgLTI0MCw2ICsyNzIsOCBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgSklUOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgZG9uZS5saW5rKCZqaXQpOwogCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisKICAgICBzd2l0Y2ggKHNpZ25h
dHVyZS0+cmV0dXJuVHlwZSgpKSB7CiAgICAgY2FzZSBWb2lkOgogICAgICAgICAvLyBEaXNjYXJk
LgpAQCAtMjQ5LDUzICsyODMsOTMgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNt
VG9KcyhWTQogICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRz
IHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3Nl
bWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJMzI6IHsKLSAgICAgICAgaml0
Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQo
SklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgaml0LnRydW5jYXRl
RG91YmxlVG9JbnQzMihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0
NjQoSklUOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKTsKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIp
OyAvLyBGSVhNRSBDb2VyY2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwg
aW5zdGVhZCBvZiBhYm9ydGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTQ4MAotICAgICAgICBjaGVja0pTSW50MzIubGluaygmaml0KTsKLSAgICAgICAgaml0
Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7Ci0gICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygmaml0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQogICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAg
ICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVx
dWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsK
LSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQo
RlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAg
ICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVy
bywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0g
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29l
cmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJv
cnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAg
ICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgfQorICAgIGNhc2UgSTMyOiB7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5j
aElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFs
dWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7
CiAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmpp
dCk7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRo
LmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkp
OworCisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCisgICAgICAg
ICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGMzI6IHsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFO
dW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNo
SWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5z
aWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOwogICAgICAgICBq
aXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAg
aml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQu
YnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9
IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihB
SElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2VyY2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3
aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9ydGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAgICAgICBjaGVja0pTSW50MzIubGluaygmaml0
KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zs
b2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0g
ICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKworICAgICAgICBmbG9hdCAoKmNvbnZl
cnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHYpIC0+IGZsb2F0IHsgCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHYudG9OdW1iZXIoZXhlYykpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgY29udmVydFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5r
KCZqaXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBq
aXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQz
MihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lz
dGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5k
MzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKICAgICAgICAgaml0Lm1vdmUo
SklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BS
Mik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIEpJVDo6SnVt
cCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBKSVQ6
Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJvLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAg
aml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2VyY2Ugd2hl
biB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9ydGluZy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAgICAgICBj
aGVja0pTSW50MzIubGluaygmaml0KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAg
IGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7Cisg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisKKyAgICAgICAgbm90QU51bWJlci5s
aW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAg
ICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsK
KworICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpTVmFsdWUpID0g
W10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAKKyAgICAgICAgICAg
IHJldHVybiB2LnRvTnVtYmVyKGV4ZWMpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgY29udmVydFRvRjY0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9u
ZS5saW5rKCZqaXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQpAQCAtMzAzLDEzICsz
NzcsMzYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGpp
dC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKIAorICAgIGlmICghZXhj
ZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmpp
dCk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCk7CisgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgICAgIHZvaWQgKCpk
b1Vud2luZGluZykoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsK
KyAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICBnZW5lcmljVW53aW5k
KHZtLCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7
CisgICAgICAgIH07CisKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGRvVW53aW5k
aW5nKTsKKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxs
LCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1
cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0
YXJnZXRUb0NoZWNrKSk7CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKTsKICAgICBjYWxsTGlua0lu
Zm8tPnNldENhbGxMb2NhdGlvbnMoY2FsbFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhv
dFBhdGhPdGhlcik7CisjaWYgIWRlZmluZWQoTkRFQlVHKQogICAgIFN0cmluZyBzaWduYXR1cmVE
ZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQodm0sIHNpZ25hdHVyZUluZGV4
KS0+dG9TdHJpbmcoKTsKKyNlbHNlCisgICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uOwor
I2VuZGlmCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1i
bHktPkphdmFTY3JpcHQgaW1wb3J0WyVpXSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmVEZXNj
cmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkocmV2aXNpb24gMjEwMjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNyw3ICszMjcsNyBAQCBhdXRvIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+Ojpw
YXJzZUV4cHJlCiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29udGV4dDo6ZW1wdHlFeHByZXNzaW9u
KQogICAgICAgICAgICAgbV9leHByZXNzaW9uU3RhY2suYXBwZW5kKHJlc3VsdCk7CiAKLSAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgY2Fz
ZSBDYWxsSW5kaXJlY3Q6IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297999</attachid>
            <date>2017-01-04 01:26:13 -0800</date>
            <delta_ts>2017-01-04 01:27:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25837</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAyNzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTAxLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLnguYXNzZXJ0LmVxKToKKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLk1hdGguZnJvdW5kKToK
KyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0
LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmxldC50eXBlLm9mLlJlZmxlY3Qu
b3duS2V5cyk6CisgICAgICAgICh0ZXN0LjEpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeSk6Cisg
ICAgICAgIChhc3NlcnQudGhyb3dzKToKKwogMjAxNy0wMS0wMyAgSkYgQmFzdGllbiAgPGpmYmFz
dGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBjaGVjayBhbmQg
dGVzdCBpbi1jYWxsIC8gb3V0LWNhbGwgdmFsdWVzCkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24t
aW1wb3J0LXJldHVybi12YWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisKKyAgICBj
b25zdCB0ZXN0cyA9IHsKKyAgICAgICAgaTMyOiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBh
c3NlcnQuZXEoeCwgMjApXSwKKyAgICAgICAgICAgIFsyMC44ODgsICh4KSA9PiBhc3NlcnQuZXEo
eCwgMjAuODg4IHwgMCldLAorICAgICAgICAgICAgW01hdGguUEksICh4KSA9PiBhc3NlcnQuZXEo
eCwgTWF0aC5QSSB8IDApXSwKKyAgICAgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRydXRo
eSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1OyB9IH0sICh4KSA9PiB7IGFzc2Vy
dC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIDI1KTsgY2FsbGVkID0gZmFsc2U7IH1dLAor
ICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2VydC5lcSh4LCBOYU4gfCAwKV0sCisgICAgICAg
ICAgICBbLTAuMCwgKHgpID0+IGFzc2VydC5lcSgxL3gsIEluZmluaXR5KV0sCisgICAgICAgICAg
ICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIHVuZGVmaW5lZCB8IDApXSwKKyAgICAg
ICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIG51bGwgfCAwKV0sCisgICAgICAgICAg
ICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3NlcnQuZXEoeCwgTnVtYmVyLk1B
WF9TQUZFX0lOVEVHRVIgfCAwKV0sCisgICAgICAgICAgICBbMioqMzEgLSAxLCAoeCkgPT4gYXNz
ZXJ0LmVxKHgsICgyKiozMSAtIDEpIHwgMCldLAorICAgICAgICAgICAgWzIqKjMyIC0gMSwgKHgp
ID0+IGFzc2VydC5lcSh4LCAoMioqMzIgLSAxKSB8IDApXSwKKyAgICAgICAgICAgIFsyKiozMiAt
IDEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgKDIqKjMyIC0gMTAwMCkgfCAwKV0sCisgICAgICAg
IF0sCisgICAgICAgIGYzMjogWworICAgICAgICAgICAgWzIwLCAoeCkgPT4gYXNzZXJ0LmVxKHgs
IDIwKV0sCisgICAgICAgICAgICBbMjAuODg4LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguZnJv
dW5kKDIwLjg4OCkpXSwKKyAgICAgICAgICAgIFtNYXRoLlBJLCAoeCkgPT4gYXNzZXJ0LmVxKHgs
IE1hdGguZnJvdW5kKE1hdGguUEkpKV0sCisgICAgICAgICAgICBbe3ZhbHVlT2YoKSB7IGFzc2Vy
dC50cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyNS44MjsgfSB9LCAoeCkg
PT4geyBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZCgyNS44
MikpOyBjYWxsZWQgPSBmYWxzZTsgfV0sCisgICAgICAgICAgICBbTmFOLCAoeCkgPT4gYXNzZXJ0
LnRydXRoeShpc05hTih4KSldLAorICAgICAgICAgICAgWy0wLjAsICh4KSA9PiBhc3NlcnQuZXEo
MS94LCAtSW5maW5pdHkpXSwKKyAgICAgICAgICAgIFt1bmRlZmluZWQsICh4KSA9PiBhc3NlcnQu
dHJ1dGh5KGlzTmFOKHgpKV0sCisgICAgICAgICAgICBbbnVsbCwgKHgpID0+IGFzc2VydC5lcSh4
LCAwKV0sCisgICAgICAgICAgICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3Nl
cnQuZXEoeCwgTWF0aC5mcm91bmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKV0sCisgICAgICAg
ICAgICBbLTEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgLTEwMDApXSwKKyAgICAgICAgXSwKKyAg
ICAgICAgZjY0OiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjApXSwK
KyAgICAgICAgICAgIFsyKioyNCwgKHgpID0+IGFzc2VydC5lcSh4LCAyKioyNCldLAorICAgICAg
ICAgICAgWzIqKjUyLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIqKjUyKV0sCisgICAgICAgICAgICBb
MjAuODg4ODg4OCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMC44ODg4ODg4KV0sCisgICAgICAgICAg
ICBbTWF0aC5QSSwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLlBJKV0sCisgICAgICAgICAgICBb
e3ZhbHVlT2YoKSB7IGFzc2VydC50cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVy
biAyNS44MjsgfSB9LCAoeCkgPT4geyBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4
LCAyNS44Mik7IGNhbGxlZCA9IGZhbHNlOyB9XSwKKyAgICAgICAgICAgIFtOYU4sICh4KSA9PiBh
c3NlcnQudHJ1dGh5KGlzTmFOKHgpKV0sCisgICAgICAgICAgICBbLTAuMCwgKHgpID0+IGFzc2Vy
dC5lcSgxL3gsIC1JbmZpbml0eSldLAorICAgICAgICAgICAgW3VuZGVmaW5lZCwgKHgpID0+IGFz
c2VydC50cnV0aHkoaXNOYU4oeCkpXSwKKyAgICAgICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0
LmVxKHgsIDApXSwKKyAgICAgICAgICAgIFtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgKHgpID0+
IGFzc2VydC5lcSh4LCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUildLAorICAgICAgICAgICAgWy0x
MDAwLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIC0xMDAwKV0sCisgICAgICAgIF0KKyAgICB9OworCisg
ICAgZm9yIChsZXQgdHlwZSBvZiBSZWZsZWN0Lm93bktleXModGVzdHMpKSB7CisgICAgICAgIGNv
bnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisg
ICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJm
dW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwg
cmV0OiB0eXBlfSkKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKwor
ICAgICAgICBmb3IgKGxldCB0ZXN0IG9mIHRlc3RzW3R5cGVdKSB7CisgICAgICAgICAgICBjb25z
dCBmdW5jID0gKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0WzBdOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHku
SW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7ZnVuY319KTsKKyAgICAgICAgICAgIGNvbnN0IHJldCA9
IGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAgICAgICAgICB0ZXN0WzFdKHJldCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdHlwZXMgPSBbImkzMiIsICJmMzIiLCAiZjY0
Il07CisgICAgZm9yIChsZXQgdHlwZSBvZiB0eXBlcykgeworICAgICAgICBjb25zdCBidWlsZGVy
ID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgICAg
LkltcG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFy
YW1zOiBbXSwgcmV0OiB0eXBlfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5G
dW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogdHlwZX0p
CisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5VbnJl
YWNoYWJsZSgpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCk7CisK
KworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAg
ICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICAgICAg
bGV0IGVycm9yID0gbnVsbDsKKyAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+IHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdmFsdWVPZigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZXJyb3IgPSBuZXcgRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9y
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAg
ICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1w
OiB7ZnVuY319KTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAg
ICAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgIGluc3RhbmNlLmV4cG9ydHMuZm9vKCk7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsK
KyAgICAgICAgICAgICAgICBhc3NlcnQuZXEoZSwgZXJyb3IpOworICAgICAgICAgICAgICAgIHRo
cmV3ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IG51bGw7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBhc3NlcnQudHJ1dGh5KHRocmV3KTsKKyAgICAgICAgfQorICAgIH0KK30K
KworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCku
RW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJm
dW5jIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpNjQifSkKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAg
LkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAidm9pZCJ9KQorICAgICAgICAgICAg
ICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLkRyb3AoKQorICAgICAgICAgICAgICAgIC5S
ZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9
IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBjb25zdCBmdW5jID0gKCkgPT4gMjA7
CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7
aW1wOiB7ZnVuY319KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAg
ICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5mb28oKSwgVHlwZUVycm9y
LCAiaTY0IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9y
dGVkIGZ1bmN0aW9uIik7CisgICAgfQorfQorCit7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBC
dWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMiLCB7IHBhcmFtczogWyJpNjQiXSwgcmV0OiAi
dm9pZCJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6
IFtdLCByZXQ6ICJ2b2lkIn0pCisgICAgICAgICAgICAgICAgIC5JNjRDb25zdCgyMCkKKyAgICAg
ICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICBjb25zdCBmdW5jID0gKCkgPT4gMjA7CisgICAgY29uc3QgaW5zdGFu
Y2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7ZnVuY319KTsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC50aHJvd3Mo
KCkgPT4gaW5zdGFuY2UuZXhwb3J0cy5mb28oKSwgVHlwZUVycm9yLCAiaTY0IG5vdCBhbGxvd2Vk
IGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1bmN0aW9uIik7Cisg
ICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTAyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTctMDEtMDQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBjb2VyY2UgcmV0dXJuIHZhbHVlcyBmcm9tIGlt
cG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NTQ4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk3NjAzMTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHByb3BlciBj
b2VyY2lvbiBmb3IgYWxsIHBvc3NpYmxlCisgICAgICAgIEpTVmFsdWUgcmV0dXJuIHR5cGVzIGZy
b20gYW4gaW1wb3J0ZWQgZnVuY3Rpb24uCisgICAgICAgIAorICAgICAgICBJdCBhbHNvIGFkZHMg
dGhlIHNwZWMtY29tcGxpYW50IGNvZGUgdG8gdGhyb3cgYW4gZXhjZXB0aW9uCisgICAgICAgIHdo
ZW4gY2FsbGluZyBhbiBpbXBvcnQgdGhhdCBoYXMgYW4gaTY0IHBhcmFtZXRlciBvciByZXR1cm4K
KyAgICAgICAgdmFsdWUuCisKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKToKKyAgICAg
ICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHA6CisgICAgICAgICogd2FzbS9XYXNtQmluZGluZy5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ondhc21Ub0pzKToKKyAgICAgICAgKiB3YXNtL1dhc21GdW5jdGlvblBhcnNlci5oOgor
CiAyMDE3LTAxLTAzICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OIChyMjEwMjQ0KTogUmVsZWFzZSBKU0MgU3RyZXNzIHRlc3QgZmFpbHVyZTog
d2FzbS55YW1sL3dhc20vanMtYXBpL3dhc20tdG8td2FzbS5qcy5kZWZhdWx0LXdhc20KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDIxMDI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwxMSBAQCB2b2lkIEFzc2VtYmx5SGVs
cGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAgICAgfQogfQogCitBc3NlbWJseUhlbHBlcnM6Okp1
bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKCkKK3sKKyAgICByZXR1cm4g
ZW1pdEV4Y2VwdGlvbkNoZWNrKE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKK30KKwogQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlv
bkNoZWNrS2luZCBraW5kLCBFeGNlcHRpb25KdW1wV2lkdGggd2lkdGgpCiB7CiAgICAgY2FsbEV4
Y2VwdGlvbkZ1enooKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAkocmV2aXNpb24gMjEwMjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4NSw2ICsxMTg1LDcgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKAog
ICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjaywgRXhjZXB0
aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBK
dW1wIGVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjaygpOworICAgIEp1bXAgZW1pdEp1bXBJ
ZkV4Y2VwdGlvbigpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAgIHN0YXRp
YyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291
bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjEw
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NzYsNiArOTc2LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGNhbGxl
ZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogCiAgICAgICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgICAgIGpp
dC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCkpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjEwMjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNSArMjgsMTkg
QEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkFzc2VtYmx5SGVscGVy
cy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCisjaW5jbHVkZSAiSklURXhjZXB0aW9u
cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgorI2luY2x1
ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2Fz
bSB7CiAKLXR5cGVkZWYgQXNzZW1ibHlIZWxwZXJzIEpJVDsKK3R5cGVkZWYgQ0NhbGxIZWxwZXJz
IEpJVDsKIAogc3RhdGljIHZvaWQgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoVk0qIHZtLCBKSVQm
IGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCiB7CkBAIC02MSw2ICs2
NSw1NSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgaml0
LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29kZUJsb2Nr
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQogICAgIGpp
dC5zdG9yZVB0cihKSVQ6OlRydXN0ZWRJbW1QdHIodm0tPndlYkFzc2VtYmx5VG9KU0NhbGxlZS5n
ZXQoKSksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogCisK
KyAgICB7CisgICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7CisgICAgICAgIGhhc0Jh
ZEk2NFVzZSB8PSBzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAgIGZvciAo
dW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2NFVzZTsg
KythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS0+YXJndW1l
bnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2FzZSBBbnlm
dW5jOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgICAgIGNhc2UgSTY0OiB7CisgICAgICAgICAgICAgICAgaGFzQmFkSTY0VXNlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChoYXNCYWRJNjRVc2UpIHsKKyAgICAgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICBqaXQu
anVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgICAgICAgICB2b2lkICgqdGhyb3dCYWRJ
NjQpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAg
ICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZt
LT50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAqdm0sIGds
b2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgQVND
SUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8g
YW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAg
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKKyAgICAgICAgICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3Jp
cHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOworICAgICAg
ICB9CisgICAgfQorCiAgICAgLy8gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2FsbGluZyBj
b252ZW50aW9uIHNhdmVzIGF0IGxlYXN0IGFsbCB0aGUgd2FzbSBjYWxsZWUgc2F2ZWQuIFdlIHRo
ZXJlZm9yZSBkb24ndCBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgbW9yZSByZWdpc3RlcnMgc2lu
Y2UgdGhlIHdhc20gY2FsbGVlIGFscmVhZHkgdG9vayBjYXJlIG9mIHRoaXMuCiAgICAgUmVnaXN0
ZXJTZXQgbWlzc2luZ0NhbGxlZVNhdmVzID0gd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsK
ICAgICBtaXNzaW5nQ2FsbGVlU2F2ZXMuZXhjbHVkZShqc0NDLm1fY2FsbGVlU2F2ZVJlZ2lzdGVy
cyk7CkBAIC03NCwyNiArMTI3LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNt
VG9KcyhWTQogICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNhbGwpOwog
ICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09mZnNldCks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgSklUOjpBZGRyZXNz
IGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0g
PCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJl
LT5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAgICAgICAg
Y2FzZSBWb2lkOgotICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgIGNhc2UgQW55ZnVuYzoKLSAg
ICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHRoZSBj
b3JyZWN0IGJlaGF2aW9yIGhlcmUuIEkgc3VzcGVjdCB3ZSB3YW50IHN1Y2ggYSBzdHViIHRvIHRo
cm93IGFuIGV4Y2VwdGlvbiBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgIC8vIGlmIGNhbGxlZC4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTk5MQotICAgICAgICAg
ICAgaml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgICAgICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseSBpbXBvcnRbJWldIHN0dWIgZm9yIHNpZ25h
dHVyZSAlaSIsIGltcG9ydEluZGV4LCBzaWduYXR1cmVJbmRleCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgSTMyOgotICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgY2FzZSBGNjQ6Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgIH0KIAogICAgIC8vIEZJWE1FIG1ha2Ug
dGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUgbWFueSBh
cmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3IgaHVnZSBz
aWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTQ3
CiAgICAgCkBAIC0yMjAsMTAgKzI1Myw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
d2FzbVRvSnMoVk0KIAogICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKHZtLCBqaXQsIGltcG9y
dEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOwogCi0gICAgdWludDY0X3QgdGhpc0FyZ3VtZW50
ID0gVmFsdWVVbmRlZmluZWQ7IC8vIEZJWE1FIHdoYXQgZG9lcyB0aGUgV2ViQXNzZW1ibHkgc3Bl
YyBzYXkgdGhpcyBzaG91bGQgYmU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0NzEKICAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50Pihz
aXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZEltbTMyKG51
bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQodGhpc0FyZ3Vt
ZW50KSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgaml0LnN0b3JlNjQo
SklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKIAogICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSByZXR1cm4g
dHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CiAKQEAgLTI0MCw2ICsyNzIsOCBAQCBz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgSklUOjpDYWxsIHNs
b3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgZG9uZS5saW5rKCZqaXQpOwogCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisKICAgICBzd2l0Y2ggKHNpZ25h
dHVyZS0+cmV0dXJuVHlwZSgpKSB7CiAgICAgY2FzZSBWb2lkOgogICAgICAgICAvLyBEaXNjYXJk
LgpAQCAtMjQ5LDUzICsyODMsOTIgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNt
VG9KcyhWTQogICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBpbXBvcnRz
IHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBXZWJBc3Nl
bWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJMzI6IHsKLSAgICAgICAgaml0
Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQo
SklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgaml0LnRydW5jYXRl
RG91YmxlVG9JbnQzMihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0
NjQoSklUOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKTsKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIp
OyAvLyBGSVhNRSBDb2VyY2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwg
aW5zdGVhZCBvZiBhYm9ydGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTQ4MAotICAgICAgICBjaGVja0pTSW50MzIubGluaygmaml0KTsKLSAgICAgICAgaml0
Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7Ci0gICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygmaml0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQogICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAg
ICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVx
dWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsK
LSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50NjQo
RlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAg
ICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVy
bywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0g
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29l
cmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJv
cnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAg
ICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgfQorICAgIGNhc2UgSTMyOiB7Cisg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5j
aElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFs
dWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7
CiAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmpp
dCk7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRo
LmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkp
OworCisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
ID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCisgICAgICAg
ICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5r
QnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRvSTMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
ZG9uZS5saW5rKCZqaXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGMzI6IHsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFO
dW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERv
Tm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNo
SWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2
ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5z
aWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVu
ZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOwogICAgICAgICBq
aXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAg
aml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQu
YnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9
IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihB
SElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2VyY2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3
aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9ydGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAgICAgICBjaGVja0pTSW50MzIubGluaygmaml0
KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zs
b2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0g
ICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0
Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFw
cGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKworICAgICAgICBmbG9hdCAoKmNvbnZl
cnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHYpIC0+IGZsb2F0IHsgCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHYudG9OdW1iZXIoZXhlYykpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Wz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoY2FsbCwgY29udmVydFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5r
KCZqaXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBq
aXQuYnJhbmNoSWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRh
Z1JlZ2lzdGVycyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQz
MihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lz
dGVycyk7CisgICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5k
MzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1
bXAoKSk7CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKICAgICAgICAgaml0Lm1vdmUo
SklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BS
Mik7CisgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIEpJVDo6SnVt
cCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBKSVQ6
Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJvLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAg
aml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2VyY2Ugd2hl
biB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9ydGluZy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAgICAgICBj
aGVja0pTSW50MzIubGluaygmaml0KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAg
IGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7Cisg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGlu
aygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAg
ICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKSk7CisK
KyAgICAgICAgZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtd
IChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsgCisgICAgICAgICAgICBy
ZXR1cm4gdi50b051bWJlcihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIGNvbnZlcnRUb0Y2NCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUu
bGluaygmaml0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTMwMywxMyArMzc2
LDM2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAKKyAgICBpZiAoIWV4Y2Vw
dGlvbkNoZWNrcy5lbXB0eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQp
OworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcigpOworICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAg
ICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgICAgICB2b2lkICgqZG9V
bndpbmRpbmcpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Cisg
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2
bSwgZXhlYyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwor
ICAgICAgICB9OworCisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGlu
Zyk7CisgICAgICAgIH0pOworICAgIH0KKwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwg
RnVuY3Rpb25QdHIodm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJu
TG9jYXRpb24ocGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7CiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YodGFy
Z2V0VG9DaGVjaykpOwogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlciA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCk7CiAgICAgY2FsbExpbmtJbmZv
LT5zZXRDYWxsTG9jYXRpb25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBob3RQ
YXRoT3RoZXIpOworI2lmICFkZWZpbmVkKE5ERUJVRykKICAgICBTdHJpbmcgc2lnbmF0dXJlRGVz
Y3JpcHRpb24gPSBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHZtLCBzaWduYXR1cmVJbmRleCkt
PnRvU3RyaW5nKCk7CisjZWxzZQorICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbjsKKyNl
bmRpZgogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5
LT5KYXZhU2NyaXB0IGltcG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlRGVzY3Jp
cHRpb24uYXNjaWkoKS5kYXRhKCkpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmgJKHJldmlzaW9uIDIxMDI3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjcsNyArMzI3LDcgQEAgYXV0byBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFy
c2VFeHByZQogICAgICAgICBpZiAocmVzdWx0ICE9IENvbnRleHQ6OmVtcHR5RXhwcmVzc2lvbikK
ICAgICAgICAgICAgIG1fZXhwcmVzc2lvblN0YWNrLmFwcGVuZChyZXN1bHQpOwogCi0gICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGNhc2Ug
Q2FsbEluZGlyZWN0OiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298000</attachid>
            <date>2017-01-04 01:27:30 -0800</date>
            <delta_ts>2017-01-04 01:30:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25823</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAyNzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTAxLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLnguYXNzZXJ0LmVxKToKKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLk1hdGguZnJvdW5kKToK
KyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0
LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmxldC50eXBlLm9mLlJlZmxlY3Qu
b3duS2V5cyk6CisgICAgICAgICh0ZXN0LjEpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeSk6Cisg
ICAgICAgIChhc3NlcnQudGhyb3dzKToKKwogMjAxNy0wMS0wMyAgSkYgQmFzdGllbiAgPGpmYmFz
dGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBjaGVjayBhbmQg
dGVzdCBpbi1jYWxsIC8gb3V0LWNhbGwgdmFsdWVzCkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24t
aW1wb3J0LXJldHVybi12YWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisKKyAgICBj
b25zdCB0ZXN0cyA9IHsKKyAgICAgICAgaTMyOiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBh
c3NlcnQuZXEoeCwgMjApXSwKKyAgICAgICAgICAgIFsyMC44ODgsICh4KSA9PiBhc3NlcnQuZXEo
eCwgMjAuODg4IHwgMCldLAorICAgICAgICAgICAgW01hdGguUEksICh4KSA9PiBhc3NlcnQuZXEo
eCwgTWF0aC5QSSB8IDApXSwKKyAgICAgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRydXRo
eSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1OyB9IH0sICh4KSA9PiB7IGFzc2Vy
dC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIDI1KTsgY2FsbGVkID0gZmFsc2U7IH1dLAor
ICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2VydC5lcSh4LCBOYU4gfCAwKV0sCisgICAgICAg
ICAgICBbLTAuMCwgKHgpID0+IGFzc2VydC5lcSgxL3gsIEluZmluaXR5KV0sCisgICAgICAgICAg
ICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIHVuZGVmaW5lZCB8IDApXSwKKyAgICAg
ICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIG51bGwgfCAwKV0sCisgICAgICAgICAg
ICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3NlcnQuZXEoeCwgTnVtYmVyLk1B
WF9TQUZFX0lOVEVHRVIgfCAwKV0sCisgICAgICAgICAgICBbMioqMzIgLSAxLCAoeCkgPT4gYXNz
ZXJ0LmVxKHgsICgyKiozMiAtIDEpIHwgMCldLAorICAgICAgICAgICAgWzIqKjMyIC0gMTAwMCwg
KHgpID0+IGFzc2VydC5lcSh4LCAoMioqMzIgLSAxMDAwKSB8IDApXSwKKyAgICAgICAgICAgIFst
MTAwMCwgKHgpID0+IGFzc2VydC5lcSh4LCAtMTAwMCldLAorICAgICAgICBdLAorICAgICAgICBm
MzI6IFsKKyAgICAgICAgICAgIFsyMCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMCldLAorICAgICAg
ICAgICAgWzIwLjg4OCwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZCgyMC44ODgpKV0s
CisgICAgICAgICAgICBbTWF0aC5QSSwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZChN
YXRoLlBJKSldLAorICAgICAgICAgICAgW3t2YWx1ZU9mKCkgeyBhc3NlcnQudHJ1dGh5KCFjYWxs
ZWQpOyBjYWxsZWQgPSB0cnVlOyByZXR1cm4gMjUuODI7IH0gfSwgKHgpID0+IHsgYXNzZXJ0LnRy
dXRoeShjYWxsZWQpOyBhc3NlcnQuZXEoeCwgTWF0aC5mcm91bmQoMjUuODIpKTsgY2FsbGVkID0g
ZmFsc2U7IH1dLAorICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2VydC50cnV0aHkoaXNOYU4o
eCkpXSwKKyAgICAgICAgICAgIFstMC4wLCAoeCkgPT4gYXNzZXJ0LmVxKDEveCwgLUluZmluaXR5
KV0sCisgICAgICAgICAgICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0LnRydXRoeShpc05hTih4
KSldLAorICAgICAgICAgICAgW251bGwsICh4KSA9PiBhc3NlcnQuZXEoeCwgMCldLAorICAgICAg
ICAgICAgW051bWJlci5NQVhfU0FGRV9JTlRFR0VSLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGgu
ZnJvdW5kKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSldLAorICAgICAgICAgICAgWy0xMDAwLCAo
eCkgPT4gYXNzZXJ0LmVxKHgsIC0xMDAwKV0sCisgICAgICAgIF0sCisgICAgICAgIGY2NDogWwor
ICAgICAgICAgICAgWzIwLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwKV0sCisgICAgICAgICAgICBb
MioqMjQsICh4KSA9PiBhc3NlcnQuZXEoeCwgMioqMjQpXSwKKyAgICAgICAgICAgIFsyKio1Miwg
KHgpID0+IGFzc2VydC5lcSh4LCAyKio1MildLAorICAgICAgICAgICAgWzIwLjg4ODg4ODgsICh4
KSA9PiBhc3NlcnQuZXEoeCwgMjAuODg4ODg4OCldLAorICAgICAgICAgICAgW01hdGguUEksICh4
KSA9PiBhc3NlcnQuZXEoeCwgTWF0aC5QSSldLAorICAgICAgICAgICAgW3t2YWx1ZU9mKCkgeyBh
c3NlcnQudHJ1dGh5KCFjYWxsZWQpOyBjYWxsZWQgPSB0cnVlOyByZXR1cm4gMjUuODI7IH0gfSwg
KHgpID0+IHsgYXNzZXJ0LnRydXRoeShjYWxsZWQpOyBhc3NlcnQuZXEoeCwgMjUuODIpOyBjYWxs
ZWQgPSBmYWxzZTsgfV0sCisgICAgICAgICAgICBbTmFOLCAoeCkgPT4gYXNzZXJ0LnRydXRoeShp
c05hTih4KSldLAorICAgICAgICAgICAgWy0wLjAsICh4KSA9PiBhc3NlcnQuZXEoMS94LCAtSW5m
aW5pdHkpXSwKKyAgICAgICAgICAgIFt1bmRlZmluZWQsICh4KSA9PiBhc3NlcnQudHJ1dGh5KGlz
TmFOKHgpKV0sCisgICAgICAgICAgICBbbnVsbCwgKHgpID0+IGFzc2VydC5lcSh4LCAwKV0sCisg
ICAgICAgICAgICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3NlcnQuZXEoeCwg
TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXSwKKyAgICAgICAgICAgIFstMTAwMCwgKHgpID0+IGFz
c2VydC5lcSh4LCAtMTAwMCldLAorICAgICAgICBdCisgICAgfTsKKworICAgIGZvciAobGV0IHR5
cGUgb2YgUmVmbGVjdC5vd25LZXlzKHRlc3RzKSkgeworICAgICAgICBjb25zdCBidWlsZGVyID0g
bmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1z
OiBbXSwgcmV0OiB0eXBlfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5j
dGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogdHlwZX0pCisg
ICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4o
KQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAg
ICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisKKyAgICAgICAgZm9yIChs
ZXQgdGVzdCBvZiB0ZXN0c1t0eXBlXSkgeworICAgICAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFswXTsKKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwge2ltcDoge2Z1bmN9fSk7CisgICAgICAgICAgICBjb25zdCByZXQgPSBpbnN0YW5jZS5leHBv
cnRzLmZvbygpOworICAgICAgICAgICAgdGVzdFsxXShyZXQpOworICAgICAgICB9CisgICAgfQor
fQorCit7CisgICAgbGV0IHR5cGVzID0gWyJpMzIiLCAiZjMyIiwgImY2NCJdOworICAgIGZvciAo
bGV0IHR5cGUgb2YgdHlwZXMpIHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVy
KCkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDog
dHlwZX0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAg
ICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAg
ICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQorICAg
ICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIGxldCBlcnJvciA9IG51
bGw7CisgICAgICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHZhbHVlT2YoKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0g
bmV3IEVycm9yOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7Cisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCB0
aHJldyA9IGZhbHNlOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnN0YW5j
ZS5leHBvcnRzLmZvbygpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxKGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB0aHJldyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgZXJyb3IgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YXNzZXJ0LnRydXRoeSh0aHJldyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTY0In0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9v
Iiwge3BhcmFtczogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgZnVuYyA9ICgpID0+IDIwOworICAgIGNvbnN0IGlu
c3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhy
b3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuZm9vKCksIFR5cGVFcnJvciwgImk2NCBub3QgYWxs
b3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIp
OworICAgIH0KK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAg
ICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImltcCIsICJmdW5jIiwgeyBwYXJhbXM6IFsiaTY0Il0sIHJldDogInZvaWQifSkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAidm9p
ZCJ9KQorICAgICAgICAgICAgICAgICAuSTY0Q29uc3QoMjApCisgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgZnVuYyA9ICgpID0+IDIwOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNl
LmV4cG9ydHMuZm9vKCksIFR5cGVFcnJvciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlw
ZSBvciBhcmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMjcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3
LTAxLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFz
c2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMgZnJvbSBpbXBvcnRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBwcm9wZXIgY29lcmNpb24gZm9yIGFs
bCBwb3NzaWJsZQorICAgICAgICBKU1ZhbHVlIHJldHVybiB0eXBlcyBmcm9tIGFuIGltcG9ydGVk
IGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAgSXQgYWxzbyBhZGRzIHRoZSBzcGVjLWNvbXBs
aWFudCBjb2RlIHRvIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICB3aGVuIGNhbGxpbmcgYW4g
aW1wb3J0IHRoYXQgaGFzIGFuIGk2NCBwYXJhbWV0ZXIgb3IgcmV0dXJuCisgICAgICAgIHZhbHVl
LgorCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbik6CisgICAgICAgICogaml0L0Fzc2Vt
Ymx5SGVscGVycy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9K
cyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKwogMjAxNy0wMS0wMyAg
SkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAo
cjIxMDI0NCk6IFJlbGVhc2UgSlNDIFN0cmVzcyB0ZXN0IGZhaWx1cmU6IHdhc20ueWFtbC93YXNt
L2pzLWFwaS93YXNtLXRvLXdhc20uanMuZGVmYXVsdC13YXNtCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMTAyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NCw2ICszNTQsMTEgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNl
cHRpb25GdXp6KAogICAgIH0KIH0KIAorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIGVtaXRFeGNlcHRpb25D
aGVjayhOb3JtYWxFeGNlcHRpb25DaGVjayk7Cit9CisKIEFzc2VtYmx5SGVscGVyczo6SnVtcCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2lu
ZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewogICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJl
dmlzaW9uIDIxMDI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExODUsNiArMTE4NSw3IEBAIHB1YmxpYzoKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKdW1wIGVtaXRFeGNlcHRpb25DaGVjaygKICAgICAgICAgRXhjZXB0
aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9
IE5vcm1hbEp1bXBXaWR0aCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSnVtcCBlbWl0Tm9uUGF0
Y2hhYmxlRXhjZXB0aW9uQ2hlY2soKTsKKyAgICBKdW1wIGVtaXRKdW1wSWZFeGNlcHRpb24oKTsK
IAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291
bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIs
IGludDMyX3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMDI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTc2LDYgKzk3Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KGNvbnMKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNb
cmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5j
cHAJKHJldmlzaW9uIDIxMDI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDE5IEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0
aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi10eXBlZGVm
IEFzc2VtYmx5SGVscGVycyBKSVQ7Cit0eXBlZGVmIENDYWxsSGVscGVycyBKSVQ7CiAKIHN0YXRp
YyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKFZNKiB2bSwgSklUJiBqaXQsIHVuc2lnbmVk
IGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQogewpAQCAtNjEsNiArNjUsNTUgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGppdC5zdG9yZTY0KEpJVDo6
VHJ1c3RlZEltbTMyKDApLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKICAgICBqaXQuc3RvcmVQdHIoSklU
OjpUcnVzdGVkSW1tUHRyKHZtLT53ZWJBc3NlbWJseVRvSlNDYWxsZWUuZ2V0KCkpLCBKSVQ6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAorCisgICAgeworICAgICAg
ICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2ln
bmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gSTY0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051
bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50ICYmICFoYXNCYWRJNjRVc2U7ICsrYXJnTnVtKSB7Cisg
ICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUtPmFyZ3VtZW50KGFyZ051bSk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAg
ICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICBjYXNl
IEk2NDogeworICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIoKTsKKworICAgICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUq
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS0+dG9wSlNXZWJBc3Nl
bWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byog
ZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5
cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0
IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1
bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZ2Vu
ZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxG
cmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0
IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZl
cyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3Qg
bmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNh
bGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgogICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdD
YWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CiAgICAgbWlzc2luZ0Nh
bGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOwpAQCAtNzQsMjYg
KzEyNyw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBj
b25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKICAgICBqaXQuc3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9
IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwot
ICAgIAotICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsr
YXJnTnVtKSB7Ci0gICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS0+YXJndW1lbnQoYXJn
TnVtKTsKLSAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgIGNhc2UgVm9pZDoKLSAg
ICAgICAgY2FzZSBGdW5jOgotICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgIGNhc2UgSTY0
OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB0aGUgY29ycmVjdCBiZWhhdmlv
ciBoZXJlLiBJIHN1c3BlY3Qgd2Ugd2FudCBzdWNoIGEgc3R1YiB0byB0aHJvdyBhbiBleGNlcHRp
b24gaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAvLyBpZiBjYWxsZWQuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5OTEKLSAgICAgICAgICAgIGppdC5icmVha3Bv
aW50KCk7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiV2ViQXNzZW1ibHkgaW1wb3J0WyVpXSBzdHViIGZvciBzaWduYXR1cmUgJWkiLCBpbXBv
cnRJbmRleCwgc2lnbmF0dXJlSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEkzMjoK
LSAgICAgICAgY2FzZSBGMzI6Ci0gICAgICAgIGNhc2UgRjY0OgotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICAvLyBGSVhNRSBtYWtlIHRoZXNlIGxvb3BzIHdo
aWNoIHN3aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkgYXJndW1lbnRzIG9uIHRo
ZSBzdGFjay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2Ugc2lnbmF0dXJlcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0NwogICAgIApAQCAtMjIw
LDEwICsyNTMsOSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAK
ICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbCh2bSwgaml0LCBpbXBvcnRJbmRleCwgaW1wb3J0
SlNDZWxsR1BSUmVnKTsKIAotICAgIHVpbnQ2NF90IHRoaXNBcmd1bWVudCA9IFZhbHVlVW5kZWZp
bmVkOyAvLyBGSVhNRSB3aGF0IGRvZXMgdGhlIFdlYkFzc2VtYmx5IHNwZWMgc2F5IHRoaXMgc2hv
dWxkIGJlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDcxCiAg
ICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKICAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRl
cnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOwot
ICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KHRoaXNBcmd1bWVudCksIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZElt
bTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAK
ICAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBh
bmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTQ4OAogCkBAIC0yNDAsNiArMjcyLDggQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwogICAgIGRvbmUubGluaygmaml0KTsKIAorICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCiAgICAgc3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5
cGUoKSkgewogICAgIGNhc2UgVm9pZDoKICAgICAgICAgLy8gRGlzY2FyZC4KQEAgLTI0OSw1MyAr
MjgzLDkyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICAg
ICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5
cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZh
bGlkYXRpb24gZXJyb3IuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAg
ICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVx
dWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsK
LSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIo
RlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAg
ICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVy
bywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0g
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29l
cmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJv
cnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAg
ICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwot
ICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
ICAgICBjYXNlIEk2NDogewotICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdU
eXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgSklUOjpKdW1w
IGNoZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChKSVQ6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5t
b3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOwotICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KEZQUkluZm86OnJldHVy
blZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBj
aGVja0pTTnVtYmVyID0gaml0LmJyYW5jaFRlc3Q2NChKSVQ6Ok5vblplcm8sIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWJv
cnRXaXRoUmVhc29uKEFISXNOb3RKU051bWJlcik7IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRoZSB2
YWx1ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0LCBpbnN0ZWFkIG9mIGFib3J0aW5nLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNrSlNJ
bnQzMi5saW5rKCZqaXQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBIYW5kbGVkIGFib3ZlLgorICAgIH0KKyAgICBjYXNlIEkzMjogeworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d1BhdGg7CisKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwogICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQpOworICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwor
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKworICAgICAgICBp
bnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAorICAgICAgICAgICAgcmV0dXJuIHYu
dG9JbnQzMihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIGNvbnZlcnRUb0kzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRjMyOiB7CisgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJy
YW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdp
c3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNW
YWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMp
OworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9Q
dHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQ
UkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7
CisKKyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKICAgICAgICAgaml0Lm1vdmUoSklUOjpU
cnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Cisg
ICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiAgICAgICAgIGppdC5jb252ZXJ0RG91
YmxlVG9GbG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6
QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVz
dDY0KEpJVDo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVy
KTsgLy8gRklYTUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3Qs
IGluc3RlYWQgb2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgIGpp
dC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBjaGVja0pT
TnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisg
ICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2Fs
bCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRK
dW1wSWZFeGNlcHRpb24oKSk7CisKKyAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9GMzIpKEV4ZWNT
dGF0ZSosIEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBmbG9h
dCB7IAorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGV4
ZWMpKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNvbnZl
cnRUb0YzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRjY0OiB7CisgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90
TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwor
ICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3Mo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAgICAg
ICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgaml0
LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpy
ZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAg
ICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZElt
bTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgICAgICBq
aXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CiAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
RlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMy
ID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNO
dW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBh
cmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxp
bmsoJmppdCk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQuY29udmVydElu
dDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQpOworICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7CisgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBleGNlcHRpb25D
aGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkpOworCisgICAgICAgIGRvdWJs
ZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkgPSBbXSAoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAorICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1i
ZXIoZXhlYyk7CisgICAgICAgIH07CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBj
b252ZXJ0VG9GNjQpOworICAgICAgICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CkBAIC0zMDMsMTMgKzM3NiwzNiBAQCBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgaml0LmVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogCisgICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1w
dHkoKSkgeworICAgICAgICBleGNlcHRpb25DaGVja3MubGluaygmaml0KTsKKyAgICAgICAgaml0
LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1w
VG9FeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVj
U3RhdGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAg
ICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9
KTsKKyAgICB9CisKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxf
VEhVTktfSUQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZt
LT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVMb2NhdGlvbkxh
YmVsIGhvdFBhdGhCZWdpbihwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsK
ICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoZmFzdENhbGwpOwogICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0
aW9ucyhjYWxsUmV0dXJuTG9jYXRpb24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyNp
ZiAhZGVmaW5lZChOREVCVUcpCiAgICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2ln
bmF0dXJlSW5mb3JtYXRpb246OmdldCh2bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOwor
I2Vsc2UKKyAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb247CisjZW5kaWYKICAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBp
bXBvcnRbJWldICVzIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCku
ZGF0YSgpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5j
dGlvblBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21GdW5jdGlvblBhcnNlci5oCShyZXZpc2lvbiAyMTAyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDcg
KzMyNyw3IEBAIGF1dG8gRnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAg
ICAgaWYgKHJlc3VsdCAhPSBDb250ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAgICAgICAgICBt
X2V4cHJlc3Npb25TdGFjay5hcHBlbmQocmVzdWx0KTsKIAotICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBjYXNlIENhbGxJbmRpcmVjdDog
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298002</attachid>
            <date>2017-01-04 01:30:49 -0800</date>
            <delta_ts>2017-01-25 12:19:16 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>26087</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTAyNzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTAxLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLnguYXNzZXJ0LmVxKToKKyAgICAg
ICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFz
c2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNvbnN0LnRlc3RzLk1hdGguZnJvdW5kKToK
KyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0
LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmxldC50eXBlLm9mLlJlZmxlY3Qu
b3duS2V5cyk6CisgICAgICAgICh0ZXN0LjEpOgorICAgICAgICAoYXNzZXJ0LnRydXRoeSk6Cisg
ICAgICAgIChhc3NlcnQudGhyb3dzKToKKwogMjAxNy0wMS0wMyAgSkYgQmFzdGllbiAgPGpmYmFz
dGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBjaGVjayBhbmQg
dGVzdCBpbi1jYWxsIC8gb3V0LWNhbGwgdmFsdWVzCkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
U1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24taW1wb3J0LXJldHVybi12YWx1ZS5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvZnVuY3Rpb24t
aW1wb3J0LXJldHVybi12YWx1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NCBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisKKyAgICBj
b25zdCB0ZXN0cyA9IHsKKyAgICAgICAgaTMyOiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBh
c3NlcnQuZXEoeCwgMjApXSwKKyAgICAgICAgICAgIFsyMC44ODgsICh4KSA9PiBhc3NlcnQuZXEo
eCwgMjAuODg4IHwgMCldLAorICAgICAgICAgICAgW01hdGguUEksICh4KSA9PiBhc3NlcnQuZXEo
eCwgTWF0aC5QSSB8IDApXSwKKyAgICAgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRydXRo
eSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1OyB9IH0sICh4KSA9PiB7IGFzc2Vy
dC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIDI1KTsgY2FsbGVkID0gZmFsc2U7IH1dLAor
ICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2VydC5lcSh4LCBOYU4gfCAwKV0sCisgICAgICAg
ICAgICBbLTAuMCwgKHgpID0+IGFzc2VydC5lcSgxL3gsIEluZmluaXR5KV0sCisgICAgICAgICAg
ICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIHVuZGVmaW5lZCB8IDApXSwKKyAgICAg
ICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIG51bGwgfCAwKV0sCisgICAgICAgICAg
ICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3NlcnQuZXEoeCwgTnVtYmVyLk1B
WF9TQUZFX0lOVEVHRVIgfCAwKV0sCisgICAgICAgICAgICBbMioqMzIgLSAxLCAoeCkgPT4gYXNz
ZXJ0LmVxKHgsICgyKiozMiAtIDEpIHwgMCldLAorICAgICAgICAgICAgWzIqKjMyIC0gMTAwMCwg
KHgpID0+IGFzc2VydC5lcSh4LCAoMioqMzIgLSAxMDAwKSB8IDApXSwKKyAgICAgICAgICAgIFst
MTAwMCwgKHgpID0+IGFzc2VydC5lcSh4LCAtMTAwMCldLAorICAgICAgICBdLAorICAgICAgICBm
MzI6IFsKKyAgICAgICAgICAgIFsyMCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMCldLAorICAgICAg
ICAgICAgWzIwLjg4OCwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZCgyMC44ODgpKV0s
CisgICAgICAgICAgICBbTWF0aC5QSSwgKHgpID0+IGFzc2VydC5lcSh4LCBNYXRoLmZyb3VuZChN
YXRoLlBJKSldLAorICAgICAgICAgICAgW3t2YWx1ZU9mKCkgeyBhc3NlcnQudHJ1dGh5KCFjYWxs
ZWQpOyBjYWxsZWQgPSB0cnVlOyByZXR1cm4gMjUuODI7IH0gfSwgKHgpID0+IHsgYXNzZXJ0LnRy
dXRoeShjYWxsZWQpOyBhc3NlcnQuZXEoeCwgTWF0aC5mcm91bmQoMjUuODIpKTsgY2FsbGVkID0g
ZmFsc2U7IH1dLAorICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2VydC50cnV0aHkoaXNOYU4o
eCkpXSwKKyAgICAgICAgICAgIFstMC4wLCAoeCkgPT4gYXNzZXJ0LmVxKDEveCwgLUluZmluaXR5
KV0sCisgICAgICAgICAgICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0LnRydXRoeShpc05hTih4
KSldLAorICAgICAgICAgICAgW251bGwsICh4KSA9PiBhc3NlcnQuZXEoeCwgMCldLAorICAgICAg
ICAgICAgW051bWJlci5NQVhfU0FGRV9JTlRFR0VSLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGgu
ZnJvdW5kKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSldLAorICAgICAgICAgICAgWy0xMDAwLCAo
eCkgPT4gYXNzZXJ0LmVxKHgsIC0xMDAwKV0sCisgICAgICAgIF0sCisgICAgICAgIGY2NDogWwor
ICAgICAgICAgICAgWzIwLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwKV0sCisgICAgICAgICAgICBb
MioqMjQsICh4KSA9PiBhc3NlcnQuZXEoeCwgMioqMjQpXSwKKyAgICAgICAgICAgIFsyKio1Miwg
KHgpID0+IGFzc2VydC5lcSh4LCAyKio1MildLAorICAgICAgICAgICAgWzIwLjg4ODg4ODgsICh4
KSA9PiBhc3NlcnQuZXEoeCwgMjAuODg4ODg4OCldLAorICAgICAgICAgICAgW01hdGguUEksICh4
KSA9PiBhc3NlcnQuZXEoeCwgTWF0aC5QSSldLAorICAgICAgICAgICAgW3t2YWx1ZU9mKCkgeyBh
c3NlcnQudHJ1dGh5KCFjYWxsZWQpOyBjYWxsZWQgPSB0cnVlOyByZXR1cm4gMjUuODI7IH0gfSwg
KHgpID0+IHsgYXNzZXJ0LnRydXRoeShjYWxsZWQpOyBhc3NlcnQuZXEoeCwgMjUuODIpOyBjYWxs
ZWQgPSBmYWxzZTsgfV0sCisgICAgICAgICAgICBbTmFOLCAoeCkgPT4gYXNzZXJ0LnRydXRoeShp
c05hTih4KSldLAorICAgICAgICAgICAgWy0wLjAsICh4KSA9PiBhc3NlcnQuZXEoMS94LCAtSW5m
aW5pdHkpXSwKKyAgICAgICAgICAgIFt1bmRlZmluZWQsICh4KSA9PiBhc3NlcnQudHJ1dGh5KGlz
TmFOKHgpKV0sCisgICAgICAgICAgICBbbnVsbCwgKHgpID0+IGFzc2VydC5lcSh4LCAwKV0sCisg
ICAgICAgICAgICBbTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsICh4KSA9PiBhc3NlcnQuZXEoeCwg
TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXSwKKyAgICAgICAgICAgIFstMTAwMCwgKHgpID0+IGFz
c2VydC5lcSh4LCAtMTAwMCldLAorICAgICAgICBdCisgICAgfTsKKworICAgIGZvciAobGV0IHR5
cGUgb2YgUmVmbGVjdC5vd25LZXlzKHRlc3RzKSkgeworICAgICAgICBjb25zdCBidWlsZGVyID0g
bmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAgICAgLklt
cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1z
OiBbXSwgcmV0OiB0eXBlfSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5j
dGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogdHlwZX0pCisg
ICAgICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4o
KQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAg
ICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25z
dCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisKKyAgICAgICAgZm9yIChs
ZXQgdGVzdCBvZiB0ZXN0c1t0eXBlXSkgeworICAgICAgICAgICAgY29uc3QgZnVuYyA9ICgpID0+
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFswXTsKKyAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVs
ZSwge2ltcDoge2Z1bmN9fSk7CisgICAgICAgICAgICBjb25zdCByZXQgPSBpbnN0YW5jZS5leHBv
cnRzLmZvbygpOworICAgICAgICAgICAgdGVzdFsxXShyZXQpOworICAgICAgICB9CisgICAgfQor
fQorCit7CisgICAgbGV0IHR5cGVzID0gWyJpMzIiLCAiZjMyIiwgImY2NCJdOworICAgIGZvciAo
bGV0IHR5cGUgb2YgdHlwZXMpIHsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVy
KCkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMiLCB7IHBhcmFtczogW10sIHJldDog
dHlwZX0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgp
CisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIp
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAg
ICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAg
ICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAgICAuVW5yZWFjaGFibGUoKQorICAg
ICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29u
c3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1
bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIGxldCBlcnJvciA9IG51
bGw7CisgICAgICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHZhbHVlT2YoKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0g
bmV3IEVycm9yOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIGNvbnN0IGluc3Rh
bmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7Cisg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgICAgIGxldCB0
aHJldyA9IGZhbHNlOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpbnN0YW5j
ZS5leHBvcnRzLmZvbygpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0LmVxKGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB0aHJldyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgZXJyb3IgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YXNzZXJ0LnRydXRoeSh0aHJldyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3sKKyAgICBjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1z
OiBbXSwgcmV0OiAiaTY0In0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9v
Iiwge3BhcmFtczogW10sIHJldDogInZvaWQifSkKKyAgICAgICAgICAgICAgICAuQ2FsbCgwKQor
ICAgICAgICAgICAgICAgIC5Ecm9wKCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxk
ZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgY29uc3QgZnVuYyA9ICgpID0+IDIwOworICAgIGNvbnN0IGlu
c3RhbmNlID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhy
b3dzKCgpID0+IGluc3RhbmNlLmV4cG9ydHMuZm9vKCksIFR5cGVFcnJvciwgImk2NCBub3QgYWxs
b3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIp
OworICAgIH0KK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAg
ICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImltcCIsICJmdW5jIiwgeyBwYXJhbXM6IFsiaTY0Il0sIHJldDogInZvaWQifSkKKyAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkNv
ZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiAidm9p
ZCJ9KQorICAgICAgICAgICAgICAgICAuSTY0Q29uc3QoMjApCisgICAgICAgICAgICAgICAgLkNh
bGwoMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAuRW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgY29uc3QgZnVuYyA9ICgpID0+IDIwOworICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFdlYkFz
c2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z1bmN9fSk7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGluc3RhbmNl
LmV4cG9ydHMuZm9vKCksIFR5cGVFcnJvciwgImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlw
ZSBvciBhcmd1bWVudCB0byBhbiBpbXBvcnRlZCBmdW5jdGlvbiIpOworICAgIH0KK30KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEwMjcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3
LTAxLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFz
c2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMgZnJvbSBpbXBvcnRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBwcm9wZXIgY29lcmNpb24gZm9yIGFs
bCBwb3NzaWJsZQorICAgICAgICBKU1ZhbHVlIHJldHVybiB0eXBlcyBmcm9tIGFuIGltcG9ydGVk
IGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAgSXQgYWxzbyBhZGRzIHRoZSBzcGVjLWNvbXBs
aWFudCBjb2RlIHRvIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICB3aGVuIGNhbGxpbmcgYW4g
aW1wb3J0IHRoYXQgaGFzIGFuIGk2NCBwYXJhbWV0ZXIgb3IgcmV0dXJuCisgICAgICAgIHZhbHVl
LgorCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFz
c2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbik6CisgICAgICAgICogaml0L0Fzc2Vt
Ymx5SGVscGVycy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9K
cyk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKwogMjAxNy0wMS0wMyAg
SkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAo
cjIxMDI0NCk6IFJlbGVhc2UgSlNDIFN0cmVzcyB0ZXN0IGZhaWx1cmU6IHdhc20ueWFtbC93YXNt
L2pzLWFwaS93YXNtLXRvLXdhc20uanMuZGVmYXVsdC13YXNtCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMTAyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NCw2ICszNTQsMTEgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhbGxFeGNl
cHRpb25GdXp6KAogICAgIH0KIH0KIAorQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVs
cGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuIGVtaXRFeGNlcHRpb25D
aGVjayhOb3JtYWxFeGNlcHRpb25DaGVjayk7Cit9CisKIEFzc2VtYmx5SGVscGVyczo6SnVtcCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2lu
ZCwgRXhjZXB0aW9uSnVtcFdpZHRoIHdpZHRoKQogewogICAgIGNhbGxFeGNlcHRpb25GdXp6KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJl
dmlzaW9uIDIxMDI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExODUsNiArMTE4NSw3IEBAIHB1YmxpYzoKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKdW1wIGVtaXRFeGNlcHRpb25DaGVjaygKICAgICAgICAgRXhjZXB0
aW9uQ2hlY2tLaW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkp1bXBXaWR0aCA9
IE5vcm1hbEp1bXBXaWR0aCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSnVtcCBlbWl0Tm9uUGF0
Y2hhYmxlRXhjZXB0aW9uQ2hlY2soKTsKKyAgICBKdW1wIGVtaXRKdW1wSWZFeGNlcHRpb24oKTsK
IAogI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKICAgICBzdGF0aWMgdm9pZCBlbWl0Q291
bnQoTWFjcm9Bc3NlbWJsZXImIGppdCwgQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIs
IGludDMyX3QgaW5jcmVtZW50ID0gMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxMDI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTc2LDYgKzk3Niw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KGNvbnMKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChjYWxsZWVDb2RlLCBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKTsKIAogICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgICAgICBqaXQuY2FsbChwYXJhbXNb
cmV0dXJuVHlwZSA9PSBWb2lkID8gMCA6IDFdLmdwcigpKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5j
cHAJKHJldmlzaW9uIDIxMDI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDE5IEBACiAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKLSNpbmNsdWRlICJBc3NlbWJseUhlbHBlcnMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIkZyYW1lVHJhY2Vycy5oIgorI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0
aW9uVHlwZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCi10eXBlZGVm
IEFzc2VtYmx5SGVscGVycyBKSVQ7Cit0eXBlZGVmIENDYWxsSGVscGVycyBKSVQ7CiAKIHN0YXRp
YyB2b2lkIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKFZNKiB2bSwgSklUJiBqaXQsIHVuc2lnbmVk
IGltcG9ydEluZGV4LCBHUFJSZWcgcmVzdWx0KQogewpAQCAtNjEsNiArNjUsNTUgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGppdC5zdG9yZTY0KEpJVDo6
VHJ1c3RlZEltbTMyKDApLCBKSVQ6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpKTsgLy8gRklYTUUgU3RvcCB1c2luZyAwIGFzIGNvZGVCbG9ja3MuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUzMjEKICAgICBqaXQuc3RvcmVQdHIoSklU
OjpUcnVzdGVkSW1tUHRyKHZtLT53ZWJBc3NlbWJseVRvSlNDYWxsZWUuZ2V0KCkpLCBKSVQ6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKIAorCisgICAgeworICAgICAg
ICBib29sIGhhc0JhZEk2NFVzZSA9IGZhbHNlOworICAgICAgICBoYXNCYWRJNjRVc2UgfD0gc2ln
bmF0dXJlLT5yZXR1cm5UeXBlKCkgPT0gSTY0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ051
bSA9IDA7IGFyZ051bSA8IGFyZ0NvdW50ICYmICFoYXNCYWRJNjRVc2U7ICsrYXJnTnVtKSB7Cisg
ICAgICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUtPmFyZ3VtZW50KGFyZ051bSk7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVm9pZDoKKyAg
ICAgICAgICAgIGNhc2UgRnVuYzoKKyAgICAgICAgICAgIGNhc2UgQW55ZnVuYzoKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICBjYXNl
IEk2NDogeworICAgICAgICAgICAgICAgIGhhc0JhZEk2NFVzZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaGFzQmFkSTY0VXNlKSB7CisgICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgICAg
ICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2VwdGlv
bkhhbmRsZXIoKTsKKworICAgICAgICAgICAgdm9pZCAoKnRocm93QmFkSTY0KShFeGVjU3RhdGUq
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS0+dG9wSlNXZWJBc3Nl
bWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byog
ZXJyb3IgPSBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgKnZtLCBnbG9iYWxPYmplY3QtPnR5
cGVFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIEFTQ0lJTGl0ZXJhbCgiaTY0
IG5vdCBhbGxvd2VkIGFzIHJldHVybiB0eXBlIG9yIGFyZ3VtZW50IHRvIGFuIGltcG9ydGVkIGZ1
bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJv
d1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZ2Vu
ZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxG
cmFtZUZvckNhdGNoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCB0aHJvd0JhZEk2NCk7CisgICAgICAgICAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGludmFsaWQgaTY0
IHVzZSBpbiBpbXBvcnRbJWldIiwgaW1wb3J0SW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIC8vIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIEpTIGNhbGxpbmcgY29udmVudGlvbiBzYXZl
cyBhdCBsZWFzdCBhbGwgdGhlIHdhc20gY2FsbGVlIHNhdmVkLiBXZSB0aGVyZWZvcmUgZG9uJ3Qg
bmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIG1vcmUgcmVnaXN0ZXJzIHNpbmNlIHRoZSB3YXNtIGNh
bGxlZSBhbHJlYWR5IHRvb2sgY2FyZSBvZiB0aGlzLgogICAgIFJlZ2lzdGVyU2V0IG1pc3NpbmdD
YWxsZWVTYXZlcyA9IHdhc21DQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnM7CiAgICAgbWlzc2luZ0Nh
bGxlZVNhdmVzLmV4Y2x1ZGUoanNDQy5tX2NhbGxlZVNhdmVSZWdpc3RlcnMpOwpAQCAtNzQsMjYg
KzEyNyw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBj
b25zdCB1bnNpZ25lZCBzdGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFj
a0FsaWdubWVudEJ5dGVzKCksIG51bWJlck9mQnl0ZXNGb3JDYWxsKTsKICAgICBqaXQuc3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tPZmZzZXQpLCBNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIEpJVDo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9
IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwot
ICAgIAotICAgIGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQ7ICsr
YXJnTnVtKSB7Ci0gICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS0+YXJndW1lbnQoYXJn
TnVtKTsKLSAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7Ci0gICAgICAgIGNhc2UgVm9pZDoKLSAg
ICAgICAgY2FzZSBGdW5jOgotICAgICAgICBjYXNlIEFueWZ1bmM6Ci0gICAgICAgIGNhc2UgSTY0
OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB0aGUgY29ycmVjdCBiZWhhdmlv
ciBoZXJlLiBJIHN1c3BlY3Qgd2Ugd2FudCBzdWNoIGEgc3R1YiB0byB0aHJvdyBhbiBleGNlcHRp
b24gaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAvLyBpZiBjYWxsZWQuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU5OTEKLSAgICAgICAgICAgIGppdC5icmVha3Bv
aW50KCk7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9C
QUxfVEhVTktfSUQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiV2ViQXNzZW1ibHkgaW1wb3J0WyVpXSBzdHViIGZvciBzaWduYXR1cmUgJWkiLCBpbXBv
cnRJbmRleCwgc2lnbmF0dXJlSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEkzMjoK
LSAgICAgICAgY2FzZSBGMzI6Ci0gICAgICAgIGNhc2UgRjY0OgotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICB9CiAKICAgICAvLyBGSVhNRSBtYWtlIHRoZXNlIGxvb3BzIHdo
aWNoIHN3aXRjaCBvbiBTaWduYXR1cmUgaWYgdGhlcmUgYXJlIG1hbnkgYXJndW1lbnRzIG9uIHRo
ZSBzdGFjay4gSXQnbGwgb3RoZXJ3aXNlIGJlIGh1Z2UgZm9yIGh1Z2Ugc2lnbmF0dXJlcy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTU0NwogICAgIApAQCAtMjIw
LDEwICsyNTMsOSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAK
ICAgICBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbCh2bSwgaml0LCBpbXBvcnRJbmRleCwgaW1wb3J0
SlNDZWxsR1BSUmVnKTsKIAotICAgIHVpbnQ2NF90IHRoaXNBcmd1bWVudCA9IFZhbHVlVW5kZWZp
bmVkOyAvLyBGSVhNRSB3aGF0IGRvZXMgdGhlIFdlYkFzc2VtYmx5IHNwZWMgc2F5IHRoaXMgc2hv
dWxkIGJlPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDcxCiAg
ICAgaml0LnN0b3JlNjQoaW1wb3J0SlNDZWxsR1BSUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0
KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSkpKTsKICAgICBqaXQuc3RvcmUzMihKSVQ6OlRydXN0ZWRJbW0zMihudW1iZXJPZlBhcmFtZXRl
cnMpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCkpOwot
ICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZEltbTY0KHRoaXNBcmd1bWVudCksIGNhbGxlZUZy
YW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIGppdC5zdG9yZTY0KEpJVDo6VHJ1c3RlZElt
bTY0KFZhbHVlVW5kZWZpbmVkKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAK
ICAgICAvLyBGSVhNRSBUYWlsIGNhbGwgaWYgdGhlIHdhc20gcmV0dXJuIHR5cGUgaXMgdm9pZCBh
bmQgbm8gcmVnaXN0ZXJzIHdlcmUgc3BpbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTQ4OAogCkBAIC0yNDAsNiArMjcyLDggQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIEpJVDo6Q2FsbCBzbG93Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwogICAgIGRvbmUubGluaygmaml0KTsKIAorICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QgZXhjZXB0aW9uQ2hlY2tzOworCiAgICAgc3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5
cGUoKSkgewogICAgIGNhc2UgVm9pZDoKICAgICAgICAgLy8gRGlzY2FyZC4KQEAgLTI0OSw1MyAr
MjgzLDk4IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICAg
ICAgLy8gRm9yIHRoZSBKYXZhU2NyaXB0IGVtYmVkZGluZywgaW1wb3J0cyB3aXRoIHRoZXNlIHR5
cGVzIGluIHRoZWlyIHNpZ25hdHVyZSByZXR1cm4gYXJlIGEgV2ViQXNzZW1ibHkuTW9kdWxlIHZh
bGlkYXRpb24gZXJyb3IuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSTMyOiB7Ci0gICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAg
ICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVx
dWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsK
LSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIo
RlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAg
ICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVy
bywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0g
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29l
cmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJv
cnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAg
ICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJU
b1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwot
ICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
ICAgICBjYXNlIEk2NDogewotICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdU
eXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgSklUOjpKdW1w
IGNoZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChKSVQ6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5t
b3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOwotICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDY0KEZQUkluZm86OnJldHVy
blZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBj
aGVja0pTTnVtYmVyID0gaml0LmJyYW5jaFRlc3Q2NChKSVQ6Ok5vblplcm8sIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWJv
cnRXaXRoUmVhc29uKEFISXNOb3RKU051bWJlcik7IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRoZSB2
YWx1ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0LCBpbnN0ZWFkIG9mIGFib3J0aW5nLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNrSlNJ
bnQzMi5saW5rKCZqaXQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBIYW5kbGVkIGFib3ZlLgorICAgIH0KKyAgICBjYXNlIEkzMjogeworICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xv
d1BhdGg7CisKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKSk7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycykpOwogICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQpOworICAgICAgICBk
b25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwor
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgZXhjZXB0
aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlvbigpKTsKKworICAgICAgICBp
bnQzMl90ICgqY29udmVydFRvSTMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gaW50MzJfdCB7IAorICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjKTsKKyAgICAgICAgICAgIHJldHVybiB2LnRvSW50MzIoZXhlYyk7CisgICAgICAgIH07
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9JMzIpOworICAgICAg
ICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIEYzMjogeworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7Cisg
ICAgICAgIGF1dG8gbm90QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0Rv
dWJsZSA9IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50
MzIKKyAgICAgICAgaml0LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zs
b2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIGlzRG91YmxlLmxpbmso
JmppdCk7CiAgICAgICAgIGppdC5tb3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIp
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGppdC5t
b3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOwogICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgSklUOjpKdW1wIGNo
ZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChKSVQ6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIEpJVDo6SnVt
cCBjaGVja0pTTnVtYmVyID0gaml0LmJyYW5jaFRlc3Q2NChKSVQ6Ok5vblplcm8sIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQu
YWJvcnRXaXRoUmVhc29uKEFISXNOb3RKU051bWJlcik7IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRo
ZSB2YWx1ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0LCBpbnN0ZWFkIG9mIGFib3J0aW5nLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNr
SlNJbnQzMi5saW5rKCZqaXQpOwotICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaml0
LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQpOworICAgICAg
ICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmpp
dCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBl
eGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkpOworCisgICAg
ICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZmxvYXQgeyAKKyAgICAgICAgICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYudG9OdW1i
ZXIoZXhlYykpOworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwg
Y29udmVydFRvRjMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBGNjQ6IHsKKyAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNo
SWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cyk7CisgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVl
UmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7Cisg
ICAgICAgIC8vIFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisK
KyAgICAgICAgaXNEb3VibGUubGluaygmaml0KTsKICAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAg
ICAgIGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pT
SW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hl
Y2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgaml0LmFib3J0
V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2VyY2Ugd2hlbiB0aGUgdmFs
dWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9ydGluZy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAgICAgICBjaGVja0pTSW50
MzIubGluaygmaml0KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGppdC5jb252
ZXJ0SW50NjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOwotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsoJmppdCk7CisgICAgICAgIGRv
bmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIG5vdEFOdW1iZXIubGluaygmaml0KTsK
KyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGV4Y2Vw
dGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKSk7CisKKyAgICAgICAg
ZG91YmxlICgqY29udmVydFRvRjY0KShFeGVjU3RhdGUqLCBKU1ZhbHVlKSA9IFtdIChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdikgLT4gZG91YmxlIHsgCisgICAgICAgICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIH07
CisgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GNjQpOworICAgICAg
ICB9KTsKKworICAgICAgICBkb25lLmxpbmsoJmppdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICB9CkBAIC0zMDMsMTMgKzM4MiwzNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHdhc21Ub0pzKFZNCiAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJl
dCgpOwogCisgICAgaWYgKCFleGNlcHRpb25DaGVja3MuZW1wdHkoKSkgeworICAgICAgICBleGNl
cHRpb25DaGVja3MubGluaygmaml0KTsKKyAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGF1dG8g
Y2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7
CisKKyAgICAgICAgdm9pZCAoKmRvVW53aW5kaW5nKShFeGVjU3RhdGUqKSA9IFtdIChFeGVjU3Rh
dGUqIGV4ZWMpIC0+IHZvaWQgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAg
ICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0t
PmNhbGxGcmFtZUZvckNhdGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBqaXQuYWRkTGlua1Rh
c2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoY2FsbCwgZG9VbndpbmRpbmcpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKHZtLT5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgY2FsbFJldHVybkxvY2F0aW9uKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFy
Q2FsbChzbG93Q2FsbCkpOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbihwYXRj
aEJ1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spKTsKICAgICBDb2RlTG9jYXRpb25OZWFy
Q2FsbCBob3RQYXRoT3RoZXIgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENh
bGwpOwogICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucyhjYWxsUmV0dXJuTG9jYXRp
b24sIGhvdFBhdGhCZWdpbiwgaG90UGF0aE90aGVyKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpCiAg
ICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uID0gU2lnbmF0dXJlSW5mb3JtYXRpb246Omdl
dCh2bSwgc2lnbmF0dXJlSW5kZXgpLT50b1N0cmluZygpOworI2Vsc2UKKyAgICBTdHJpbmcgc2ln
bmF0dXJlRGVzY3JpcHRpb247CisjZW5kaWYKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1wb3J0
SW5kZXgsIHNpZ25hdHVyZURlc2NyaXB0aW9uLmFzY2lpKCkuZGF0YSgpKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCShy
ZXZpc2lvbiAyMTAyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rp
b25QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDcgKzMyNyw3IEBAIGF1dG8gRnVuY3Rp
b25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb250
ZXh0OjplbXB0eUV4cHJlc3Npb24pCiAgICAgICAgICAgICBtX2V4cHJlc3Npb25TdGFjay5hcHBl
bmQocmVzdWx0KTsKIAotICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAKICAgICBjYXNlIENhbGxJbmRpcmVjdDogewo=
</data>
<flag name="review"
          id="320266"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299725</attachid>
            <date>2017-01-25 12:19:16 -0800</date>
            <delta_ts>2017-01-25 17:16:06 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>25543</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTExNTcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTAxLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRl
c3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFsdWUuanM6IEFkZGVkLgorICAgICAgICAoaW1w
b3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QudGVzdHMueC5hc3NlcnQuZXEpOgorICAgICAg
ICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNz
ZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QudGVzdHMuTWF0aC5mcm91bmQpOgor
ICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQu
YXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUubGV0LnR5cGUub2YuUmVmbGVjdC5v
d25LZXlzKToKKyAgICAgICAgKHRlc3QuMSk6CisgICAgICAgIChhc3NlcnQudHJ1dGh5KToKKyAg
ICAgICAgKGFzc2VydC50aHJvd3MpOgorCiAyMDE3LTAxLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgQXRvbWljcy5zdG9yZSBzaG91bGQgcmV0dXJuIHRoZSBp
bnQtY29udmVydGVkIHZhbHVlIGFjY29yZGluZyB0byB0b0ludGVnZXIKSW5kZXg6IEpTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0
dXJuLXZhbHVlLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3Rz
L2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFsdWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxODQgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNl
OworCisgICAgY29uc3QgdGVzdHMgPSB7CisgICAgICAgIGkzMjogWworICAgICAgICAgICAgWzIw
LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwKV0sCisgICAgICAgICAgICBbMjAuODg4LCAoeCkgPT4g
YXNzZXJ0LmVxKHgsIDIwLjg4OCB8IDApXSwKKyAgICAgICAgICAgIFtNYXRoLlBJLCAoeCkgPT4g
YXNzZXJ0LmVxKHgsIE1hdGguUEkgfCAwKV0sCisgICAgICAgICAgICBbe3ZhbHVlT2YoKSB7IGFz
c2VydC50cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyNTsgfSB9LCAoeCkg
PT4geyBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4LCAyNSk7IGNhbGxlZCA9IGZh
bHNlOyB9XSwKKyAgICAgICAgICAgIFtOYU4sICh4KSA9PiBhc3NlcnQuZXEoeCwgTmFOIHwgMCld
LAorICAgICAgICAgICAgWy0wLjAsICh4KSA9PiBhc3NlcnQuZXEoMS94LCBJbmZpbml0eSldLAor
ICAgICAgICAgICAgW3VuZGVmaW5lZCwgKHgpID0+IGFzc2VydC5lcSh4LCB1bmRlZmluZWQgfCAw
KV0sCisgICAgICAgICAgICBbbnVsbCwgKHgpID0+IGFzc2VydC5lcSh4LCBudWxsIHwgMCldLAor
ICAgICAgICAgICAgW051bWJlci5NQVhfU0FGRV9JTlRFR0VSLCAoeCkgPT4gYXNzZXJ0LmVxKHgs
IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHwgMCldLAorICAgICAgICAgICAgWzIqKjMyIC0gMSwg
KHgpID0+IGFzc2VydC5lcSh4LCAoMioqMzIgLSAxKSB8IDApXSwKKyAgICAgICAgICAgIFsyKioz
MiAtIDEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgKDIqKjMyIC0gMTAwMCkgfCAwKV0sCisgICAg
ICAgICAgICBbLTEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgLTEwMDApXSwKKyAgICAgICAgXSwK
KyAgICAgICAgZjMyOiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjAp
XSwKKyAgICAgICAgICAgIFsyMC44ODgsICh4KSA9PiBhc3NlcnQuZXEoeCwgTWF0aC5mcm91bmQo
MjAuODg4KSldLAorICAgICAgICAgICAgW01hdGguUEksICh4KSA9PiBhc3NlcnQuZXEoeCwgTWF0
aC5mcm91bmQoTWF0aC5QSSkpXSwKKyAgICAgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRy
dXRoeSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1LjgyOyB9IH0sICh4KSA9PiB7
IGFzc2VydC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKDI1LjgyKSk7
IGNhbGxlZCA9IGZhbHNlOyB9XSwKKyAgICAgICAgICAgIFtOYU4sICh4KSA9PiBhc3NlcnQudHJ1
dGh5KGlzTmFOKHgpKV0sCisgICAgICAgICAgICBbLTAuMCwgKHgpID0+IGFzc2VydC5lcSgxL3gs
IC1JbmZpbml0eSldLAorICAgICAgICAgICAgW3VuZGVmaW5lZCwgKHgpID0+IGFzc2VydC50cnV0
aHkoaXNOYU4oeCkpXSwKKyAgICAgICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDAp
XSwKKyAgICAgICAgICAgIFtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgKHgpID0+IGFzc2VydC5l
cSh4LCBNYXRoLmZyb3VuZChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpXSwKKyAgICAgICAgICAg
IFstMTAwMCwgKHgpID0+IGFzc2VydC5lcSh4LCAtMTAwMCldLAorICAgICAgICBdLAorICAgICAg
ICBmNjQ6IFsKKyAgICAgICAgICAgIFsyMCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMCldLAorICAg
ICAgICAgICAgWzIqKjI0LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIqKjI0KV0sCisgICAgICAgICAg
ICBbMioqNTIsICh4KSA9PiBhc3NlcnQuZXEoeCwgMioqNTIpXSwKKyAgICAgICAgICAgIFsyMC44
ODg4ODg4LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwLjg4ODg4ODgpXSwKKyAgICAgICAgICAgIFtN
YXRoLlBJLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguUEkpXSwKKyAgICAgICAgICAgIFt7dmFs
dWVPZigpIHsgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1
LjgyOyB9IH0sICh4KSA9PiB7IGFzc2VydC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIDI1
LjgyKTsgY2FsbGVkID0gZmFsc2U7IH1dLAorICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2Vy
dC50cnV0aHkoaXNOYU4oeCkpXSwKKyAgICAgICAgICAgIFstMC4wLCAoeCkgPT4gYXNzZXJ0LmVx
KDEveCwgLUluZmluaXR5KV0sCisgICAgICAgICAgICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0
LnRydXRoeShpc05hTih4KSldLAorICAgICAgICAgICAgW251bGwsICh4KSA9PiBhc3NlcnQuZXEo
eCwgMCldLAorICAgICAgICAgICAgW051bWJlci5NQVhfU0FGRV9JTlRFR0VSLCAoeCkgPT4gYXNz
ZXJ0LmVxKHgsIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKV0sCisgICAgICAgICAgICBbLTEwMDAs
ICh4KSA9PiBhc3NlcnQuZXEoeCwgLTEwMDApXSwKKyAgICAgICAgXQorICAgIH07CisKKyAgICBm
b3IgKGxldCB0eXBlIG9mIFJlZmxlY3Qub3duS2V5cyh0ZXN0cykpIHsKKyAgICAgICAgY29uc3Qg
YnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMi
LCB7IHBhcmFtczogW10sIHJldDogdHlwZX0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6
IHR5cGV9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAg
ICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKTsK
KworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworCisgICAg
ICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHNbdHlwZV0pIHsKKyAgICAgICAgICAgIGNvbnN0IGZ1
bmMgPSAoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RbMF07CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIHtpbXA6IHtmdW5jfX0pOworICAgICAgICAgICAgY29uc3QgcmV0ID0gaW5z
dGFuY2UuZXhwb3J0cy5mb28oKTsKKyAgICAgICAgICAgIHRlc3RbMV0ocmV0KTsKKyAgICAgICAg
fQorICAgIH0KK30KKworeworICAgIGxldCB0eXBlcyA9IFsiaTMyIiwgImYzMiIsICJmNjQiXTsK
KyAgICBmb3IgKGxldCB0eXBlIG9mIHR5cGVzKSB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBu
ZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAuSW1w
b3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJhbXM6
IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiB0eXBlfSkKKyAg
ICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hh
YmxlKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKTsKKworCisg
ICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICAgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgICAgICBsZXQg
ZXJyb3IgPSBudWxsOworICAgICAgICBjb25zdCBmdW5jID0gKCkgPT4geworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB2YWx1ZU9mKCkgeworICAgICAgICAgICAgICAgICAg
ICBlcnJvciA9IG5ldyBFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtm
dW5jfX0pOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAg
ICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgaW5zdGFuY2UuZXhwb3J0cy5mb28oKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcShlLCBlcnJvcik7CisgICAgICAgICAgICAgICAgdGhyZXcg
PSB0cnVlOworICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworICAgICAgICB9CisgICAgfQorfQorCit7
CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMi
LCB7IHBhcmFtczogW10sIHJldDogImk2NCJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIn0pCisgICAgICAgICAgICAgICAg
LkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAgICAgLlJldHVy
bigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAgICBjb25zdCBi
aW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiAyMDsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6
IHtmdW5jfX0pOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmZvbygpLCBUeXBlRXJyb3IsICJp
NjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQg
ZnVuY3Rpb24iKTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxk
ZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbImk2NCJdLCByZXQ6ICJ2b2lk
In0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10s
IHJldDogInZvaWQifSkKKyAgICAgICAgICAgICAgICAgLkk2NENvbnN0KDIwKQorICAgICAgICAg
ICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiAyMDsKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmdW5jfX0pOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLmZvbygpLCBUeXBlRXJyb3IsICJpNjQgbm90IGFsbG93ZWQgYXMg
cmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKTsKKyAgICB9
Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTE1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NSBAQAorMjAxNy0wMS0yNSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAg
ICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGNvZXJjZSByZXR1cm4gdmFsdWVzIGZyb20gaW1wb3J0
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDgw
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTc2MDMxOD4KKworICAgICAgICBSZXZpZXdlZCBi
eSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyBwcm9wZXIgY29lcmNp
b24gZm9yIGFsbCBwb3NzaWJsZQorICAgICAgICBKU1ZhbHVlIHJldHVybiB0eXBlcyBmcm9tIGFu
IGltcG9ydGVkIGZ1bmN0aW9uLgorICAgICAgICAKKyAgICAgICAgSXQgYWxzbyBhZGRzIHRoZSBz
cGVjLWNvbXBsaWFudCBjb2RlIHRvIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICB3aGVuIGNh
bGxpbmcgYW4gaW1wb3J0IHRoYXQgaGFzIGFuIGk2NCBwYXJhbWV0ZXIgb3IgcmV0dXJuCisgICAg
ICAgIHZhbHVlLgorCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEp1bXBJZkV4Y2VwdGlvbik6CisgICAgICAgICog
aml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
Ojp3YXNtVG9Kcyk6CisKIDIwMTctMDEtMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgY29sbGVjdE1hdGNoaW5nRWxlbWVudHNJbkZsYXRUcmVlIHNob3VsZCBu
b3QgZmluZCBlbGVtZW50cyBpbnNpZGUgYW4gdXNlciBhZ2VudCBzaGFkb3cgdHJlZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjExMTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDExIEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpjYWxsRXhjZXB0aW9uRnV6eigKICAgICB9CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVt
cCBBc3NlbWJseUhlbHBlcnM6OmVtaXRKdW1wSWZFeGNlcHRpb24oKQoreworICAgIHJldHVybiBl
bWl0RXhjZXB0aW9uQ2hlY2soTm9ybWFsRXhjZXB0aW9uQ2hlY2spOworfQorCiBBc3NlbWJseUhl
bHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2soRXhjZXB0aW9u
Q2hlY2tLaW5kIGtpbmQsIEV4Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKICAgICBjYWxsRXhj
ZXB0aW9uRnV6eigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyMTExNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg1LDYgKzExODUsNyBAQCBw
dWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSnVtcCBlbWl0RXhjZXB0aW9uQ2hlY2soCiAg
ICAgICAgIEV4Y2VwdGlvbkNoZWNrS2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRp
b25KdW1wV2lkdGggPSBOb3JtYWxKdW1wV2lkdGgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEp1
bXAgZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKCk7CisgICAgSnVtcCBlbWl0SnVtcElm
RXhjZXB0aW9uKCk7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCiAgICAgc3RhdGlj
IHZvaWQgZW1pdENvdW50KE1hY3JvQXNzZW1ibGVyJiBqaXQsIEFic3RyYWN0U2FtcGxpbmdDb3Vu
dGVyJiBjb3VudGVyLCBpbnQzMl90IGluY3JlbWVudCA9IDEpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMTEx
NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk3Niw2ICs5NzYsNyBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFk
ZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoY2FsbGVl
Q29kZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAKICAgICAgICAgICAgIHBhdGNocG9pbnQt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAgICAgICAgICAgaml0
LmNhbGwocGFyYW1zW3JldHVyblR5cGUgPT0gVm9pZCA/IDAgOiAxXS5ncHIoKSk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMTExNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE1ICsyOCwxOSBA
QAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJz
LmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKKyNpbmNsdWRlICJKSVRFeGNlcHRpb25z
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0
YW5jZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJOYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCisjaW5jbHVk
ZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNt
IHsKIAotdHlwZWRlZiBBc3NlbWJseUhlbHBlcnMgSklUOwordHlwZWRlZiBDQ2FsbEhlbHBlcnMg
SklUOwogCiBzdGF0aWMgdm9pZCBtYXRlcmlhbGl6ZUltcG9ydEpTQ2VsbChWTSogdm0sIEpJVCYg
aml0LCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgR1BSUmVnIHJlc3VsdCkKIHsKQEAgLTYxLDYgKzY1
LDU1IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBqaXQu
c3RvcmU2NChKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSk7IC8vIEZJWE1FIFN0b3AgdXNpbmcgMCBhcyBjb2RlQmxvY2tz
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCiAgICAgaml0
LnN0b3JlUHRyKEpJVDo6VHJ1c3RlZEltbVB0cih2bS0+d2ViQXNzZW1ibHlUb0pTQ2FsbGVlLmdl
dCgpKSwgSklUOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CiAKKwor
ICAgIHsKKyAgICAgICAgYm9vbCBoYXNCYWRJNjRVc2UgPSBmYWxzZTsKKyAgICAgICAgaGFzQmFk
STY0VXNlIHw9IHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpID09IEk2NDsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBhcmdOdW0gPSAwOyBhcmdOdW0gPCBhcmdDb3VudCAmJiAhaGFzQmFkSTY0VXNlOyAr
K2FyZ051bSkgeworICAgICAgICAgICAgVHlwZSBhcmdUeXBlID0gc2lnbmF0dXJlLT5hcmd1bWVu
dChhcmdOdW0pOworICAgICAgICAgICAgc3dpdGNoIChhcmdUeXBlKSB7CisgICAgICAgICAgICBj
YXNlIFZvaWQ6CisgICAgICAgICAgICBjYXNlIEZ1bmM6CisgICAgICAgICAgICBjYXNlIEFueWZ1
bmM6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
ICAgICAgICAgY2FzZSBJNjQ6IHsKKyAgICAgICAgICAgICAgICBoYXNCYWRJNjRVc2UgPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKGhhc0JhZEk2NFVzZSkgeworICAgICAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgIGppdC5q
dW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICAgICAgICAgIHZvaWQgKCp0aHJvd0JhZEk2
NCkoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKKyAgICAgICAg
ICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0p
OworICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0t
PnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8qIGVycm9yID0gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsICp2bSwgZ2xv
YmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBBU0NJ
SUxpdGVyYWwoImk2NCBub3QgYWxsb3dlZCBhcyByZXR1cm4gdHlwZSBvciBhcmd1bWVudCB0byBh
biBpbXBvcnRlZCBmdW5jdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgICAgIEFTU0VS
VCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dCYWRJNjQpOworICAgICAgICAgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXZWJBc3NlbWJseS0+SmF2YVNjcmlw
dCBpbnZhbGlkIGk2NCB1c2UgaW4gaW1wb3J0WyVpXSIsIGltcG9ydEluZGV4KSk7CisgICAgICAg
IH0KKyAgICB9CisKICAgICAvLyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBKUyBjYWxsaW5nIGNv
bnZlbnRpb24gc2F2ZXMgYXQgbGVhc3QgYWxsIHRoZSB3YXNtIGNhbGxlZSBzYXZlZC4gV2UgdGhl
cmVmb3JlIGRvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBtb3JlIHJlZ2lzdGVycyBzaW5j
ZSB0aGUgd2FzbSBjYWxsZWUgYWxyZWFkeSB0b29rIGNhcmUgb2YgdGhpcy4KICAgICBSZWdpc3Rl
clNldCBtaXNzaW5nQ2FsbGVlU2F2ZXMgPSB3YXNtQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwog
ICAgIG1pc3NpbmdDYWxsZWVTYXZlcy5leGNsdWRlKGpzQ0MubV9jYWxsZWVTYXZlUmVnaXN0ZXJz
KTsKQEAgLTc0LDI2ICsxMjcsNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21U
b0pzKFZNCiAgICAgY29uc3QgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBudW1iZXJPZkJ5dGVzRm9yQ2FsbCk7CiAg
ICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrT2Zmc2V0KSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBKSVQ6OkFkZHJlc3Mg
Y2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ051bSA9IDA7IGFyZ051bSA8
IGFyZ0NvdW50OyArK2FyZ051bSkgewotICAgICAgICBUeXBlIGFyZ1R5cGUgPSBzaWduYXR1cmUt
PmFyZ3VtZW50KGFyZ051bSk7Ci0gICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgewotICAgICAgICBj
YXNlIFZvaWQ6Ci0gICAgICAgIGNhc2UgRnVuYzoKLSAgICAgICAgY2FzZSBBbnlmdW5jOgotICAg
ICAgICBjYXNlIEk2NDogewotICAgICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgdGhlIGNv
cnJlY3QgYmVoYXZpb3IgaGVyZS4gSSBzdXNwZWN0IHdlIHdhbnQgc3VjaCBhIHN0dWIgdG8gdGhy
b3cgYW4gZXhjZXB0aW9uIGltbWVkaWF0ZWx5LgotICAgICAgICAgICAgLy8gaWYgY2FsbGVkLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1OTkxCi0gICAgICAgICAg
ICBqaXQuYnJlYWtwb2ludCgpOwotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5IGltcG9ydFslaV0gc3R1YiBmb3Igc2lnbmF0
dXJlICVpIiwgaW1wb3J0SW5kZXgsIHNpZ25hdHVyZUluZGV4KSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBJMzI6Ci0gICAgICAgIGNhc2UgRjMyOgotICAgICAgICBjYXNlIEY2NDoKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQogCiAgICAgLy8gRklYTUUgbWFrZSB0
aGVzZSBsb29wcyB3aGljaCBzd2l0Y2ggb24gU2lnbmF0dXJlIGlmIHRoZXJlIGFyZSBtYW55IGFy
Z3VtZW50cyBvbiB0aGUgc3RhY2suIEl0J2xsIG90aGVyd2lzZSBiZSBodWdlIGZvciBodWdlIHNp
Z25hdHVyZXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1NDcK
ICAgICAKQEAgLTIyMCwxMCArMjUzLDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB3
YXNtVG9KcyhWTQogCiAgICAgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwodm0sIGppdCwgaW1wb3J0
SW5kZXgsIGltcG9ydEpTQ2VsbEdQUlJlZyk7CiAKLSAgICB1aW50NjRfdCB0aGlzQXJndW1lbnQg
PSBWYWx1ZVVuZGVmaW5lZDsgLy8gRklYTUUgd2hhdCBkb2VzIHRoZSBXZWJBc3NlbWJseSBzcGVj
IHNheSB0aGlzIHNob3VsZCBiZT8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTQ3MQogICAgIGppdC5zdG9yZTY0KGltcG9ydEpTQ2VsbEdQUlJlZywgY2FsbGVlRnJh
bWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpKSk7CiAgICAgaml0LnN0b3JlMzIoSklUOjpUcnVzdGVkSW1tMzIobnVt
YmVyT2ZQYXJhbWV0ZXJzKSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxv
YWRPZmZzZXQpKTsKLSAgICBqaXQuc3RvcmU2NChKSVQ6OlRydXN0ZWRJbW02NCh0aGlzQXJndW1l
bnQpLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBqaXQuc3RvcmU2NChK
SVQ6OlRydXN0ZWRJbW02NChWYWx1ZVVuZGVmaW5lZCksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQo
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSkpOwogCiAgICAgLy8gRklYTUUgVGFpbCBjYWxsIGlmIHRoZSB3YXNtIHJldHVybiB0
eXBlIGlzIHZvaWQgYW5kIG5vIHJlZ2lzdGVycyB3ZXJlIHNwaWxsZWQuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODgKIApAQCAtMjQwLDYgKzI3Miw4IEBAIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBKSVQ6OkNhbGwgc2xv
d0NhbGwgPSBqaXQubmVhckNhbGwoKTsKICAgICBkb25lLmxpbmsoJmppdCk7CiAKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkNoZWNrczsKKwogICAgIHN3aXRjaCAoc2lnbmF0
dXJlLT5yZXR1cm5UeXBlKCkpIHsKICAgICBjYXNlIFZvaWQ6CiAgICAgICAgIC8vIERpc2NhcmQu
CkBAIC0yNDksNTMgKzI4Myw5OCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21U
b0pzKFZNCiAgICAgICAgIC8vIEZvciB0aGUgSmF2YVNjcmlwdCBlbWJlZGRpbmcsIGltcG9ydHMg
d2l0aCB0aGVzZSB0eXBlcyBpbiB0aGVpciBzaWduYXR1cmUgcmV0dXJuIGFyZSBhIFdlYkFzc2Vt
Ymx5Lk1vZHVsZSB2YWxpZGF0aW9uIGVycm9yLgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEkzMjogewotICAgICAgICBqaXQu
bW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChK
SVQ6OkFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMik7Ci0gICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBqaXQudHJ1bmNhdGVE
b3VibGVUb0ludDMyKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTTnVtYmVyID0gaml0LmJyYW5jaFRlc3Q2
NChKSVQ6Ok5vblplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUjIpOwotICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFISXNOb3RKU051bWJlcik7
IC8vIEZJWE1FIENvZXJjZSB3aGVuIHRoZSB2YWx1ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0LCBp
bnN0ZWFkIG9mIGFib3J0aW5nLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NDgwCi0gICAgICAgIGNoZWNrSlNJbnQzMi5saW5rKCZqaXQpOwotICAgICAgICBqaXQu
emVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQpOwotICAgICAgICBi
cmVhazsKLSAgICB9CiAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAg
ICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1
YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwot
ICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9JbnQ2NChG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAg
ICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25aZXJv
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBDb2Vy
Y2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBhYm9y
dGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAotICAg
ICAgICBjaGVja0pTSW50MzIubGluaygmaml0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gSGFuZGxlZCBhYm92ZS4KKyAgICB9CisgICAgY2FzZSBJMzI6IHsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOworICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IHNsb3dQYXRoOworCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNo
SWZOb3ROdW1iZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVy
cykpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1
ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsK
ICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygmaml0
KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgc2xvd1BhdGgu
bGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7Cisg
ICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24oKSk7
CisKKyAgICAgICAgaW50MzJfdCAoKmNvbnZlcnRUb0kzMikoRXhlY1N0YXRlKiwgSlNWYWx1ZSkg
PSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGludDMyX3QgeyAKKyAgICAgICAg
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gdi50b0ludDMyKGV4ZWMp
OworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRv
STMyKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBGMzI6IHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBkb25lOworICAgICAgICBhdXRvIG5vdEFOdW1iZXIgPSBqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAg
ICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJhbmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90SGF2ZVRhZ1JlZ2lzdGVycyk7CisgICAgICAgIC8v
IFdlJ3JlIGFuIGludDMyCisgICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuY29u
dmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpOworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBp
c0RvdWJsZS5saW5rKCZqaXQpOwogICAgICAgICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChU
YWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFk
ZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwog
ICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUklu
Zm86OnJldHVyblZhbHVlRlBSKTsKICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KEZQ
UkluZm86OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAg
IEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJhbmNoNjQoSklUOjpBYm92ZU9yRXF1YWws
IEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAg
ICAgICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFuY2hUZXN0NjQoSklUOjpOb25a
ZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsK
LSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNOdW1iZXIpOyAvLyBGSVhNRSBD
b2VyY2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4cGVjdCwgaW5zdGVhZCBvZiBh
Ym9ydGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTQ4MAot
ICAgICAgICBjaGVja0pTSW50MzIubGluaygmaml0KTsKLSAgICAgICAgaml0Lnplcm9FeHRlbmQz
MlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0gICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0Zsb2F0KEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygm
aml0KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90QU51
bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwo
KTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2VwdGlv
bigpKTsKKworICAgICAgICBmbG9hdCAoKmNvbnZlcnRUb0YzMikoRXhlY1N0YXRlKiwgSlNWYWx1
ZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGZsb2F0IHsgCisgICAgICAg
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2LnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtU
YXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIGNvbnZlcnRUb0YzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUu
bGluaygmaml0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRjY0OiB7CisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVy
ID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhh
dmVUYWdSZWdpc3RlcnMpOworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90
SW50MzIoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpOworICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4
dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGpp
dC5qdW1wKCkpOworCisgICAgICAgIGlzRG91YmxlLmxpbmsoJmppdCk7CiAgICAgICAgIGppdC5t
b3ZlKEpJVDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjIpOworICAgICAgICBqaXQuYWRkNjQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAgIGppdC5tb3ZlNjRUb0RvdWJsZShHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBKSVQ6
Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVPckVxdWFsLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAg
SklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6Tm9uWmVybywg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklYTUUgQ29lcmNl
IHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQgb2YgYWJvcnRp
bmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0ODAKLSAgICAg
ICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0
cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAg
ICAgICBqaXQuY29udmVydEludDY0VG9Eb3VibGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQ
UkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKCZqaXQp
OworICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBub3RBTnVtYmVy
LmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9uKCkp
OworCisgICAgICAgIGRvdWJsZSAoKmNvbnZlcnRUb0Y2NCkoRXhlY1N0YXRlKiwgSlNWYWx1ZSkg
PSBbXSAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYpIC0+IGRvdWJsZSB7IAorICAgICAgICAg
ICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGV4ZWMp
OworICAgICAgICB9OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgY29udmVydFRv
RjY0KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZG9uZS5saW5rKCZqaXQpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgfQpAQCAtMzAzLDEzICszODIsMzYgQEAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiB3YXNtVG9KcyhWTQogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwogICAgIGppdC5yZXQoKTsKIAorICAgIGlmICghZXhjZXB0aW9uQ2hlY2tzLmVtcHR5KCkpIHsK
KyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5jb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcigpOworCisgICAgICAgIHZvaWQgKCpkb1Vud2luZGluZykoRXhlY1N0YXRlKikg
PSBbXSAoRXhlY1N0YXRlKiBleGVjKSAtPiB2b2lkIHsKKyAgICAgICAgICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAg
IEFTU0VSVCghIXZtLT5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIH07CisKKyAgICAgICAg
aml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGRvVW53aW5kaW5nKTsKKyAgICAgICAgfSk7CisgICAg
fQorCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cih2bS0+Z2V0Q1RJ
U3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgIENvZGVMb2NhdGlvbkxhYmVsIGNhbGxSZXR1cm5Mb2NhdGlvbihwYXRjaEJ1ZmZlci5s
b2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQ
YXRoQmVnaW4ocGF0Y2hCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSk7CiAgICAgQ29k
ZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5l
YXJDYWxsKGZhc3RDYWxsKTsKICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoY2Fs
bFJldHVybkxvY2F0aW9uLCBob3RQYXRoQmVnaW4sIGhvdFBhdGhPdGhlcik7CisjaWYgIWRlZmlu
ZWQoTkRFQlVHKQogICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbiA9IFNpZ25hdHVyZUlu
Zm9ybWF0aW9uOjpnZXQodm0sIHNpZ25hdHVyZUluZGV4KS0+dG9TdHJpbmcoKTsKKyNlbHNlCisg
ICAgU3RyaW5nIHNpZ25hdHVyZURlc2NyaXB0aW9uOworI2VuZGlmCiAgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiV2ViQXNzZW1ibHktPkphdmFTY3JpcHQgaW1wb3J0WyVp
XSAlcyIsIGltcG9ydEluZGV4LCBzaWduYXR1cmVEZXNjcmlwdGlvbi5hc2NpaSgpLmRhdGEoKSkp
OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299775</attachid>
            <date>2017-01-25 17:16:06 -0800</date>
            <delta_ts>2017-01-25 18:39:59 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>27317</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTExNTcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTAxLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTogY29lcmNlIHJldHVybiB2YWx1ZXMg
ZnJvbSBpbXBvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjU0ODAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI5NzYwMzE4PgorCisgICAgICAg
IFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRl
c3RzL2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFsdWUuanM6IEFkZGVkLgorICAgICAgICAoaW1w
b3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QudGVzdHMueC5hc3NlcnQuZXEpOgorICAgICAg
ICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNz
ZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QudGVzdHMuTWF0aC5mcm91bmQpOgor
ICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQu
YXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUubGV0LnR5cGUub2YuUmVmbGVjdC5v
d25LZXlzKToKKyAgICAgICAgKHRlc3QuMSk6CisgICAgICAgIChhc3NlcnQudHJ1dGh5KToKKyAg
ICAgICAgKGFzc2VydC50aHJvd3MpOgorCiAyMDE3LTAxLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgQXRvbWljcy5zdG9yZSBzaG91bGQgcmV0dXJuIHRoZSBp
bnQtY29udmVydGVkIHZhbHVlIGFjY29yZGluZyB0byB0b0ludGVnZXIKSW5kZXg6IEpTVGVzdHMv
d2FzbS9mdW5jdGlvbi10ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0dXJuLXZhbHVlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9mdW5jdGlvbi1pbXBvcnQtcmV0
dXJuLXZhbHVlLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3Rz
L2Z1bmN0aW9uLWltcG9ydC1yZXR1cm4tdmFsdWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNDcgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNl
OworCisgICAgY29uc3QgdGVzdHMgPSB7CisgICAgICAgIGkzMjogWworICAgICAgICAgICAgWzIw
LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwKV0sCisgICAgICAgICAgICBbMjAuODg4LCAoeCkgPT4g
YXNzZXJ0LmVxKHgsIDIwLjg4OCB8IDApXSwKKyAgICAgICAgICAgIFtNYXRoLlBJLCAoeCkgPT4g
YXNzZXJ0LmVxKHgsIE1hdGguUEkgfCAwKV0sCisgICAgICAgICAgICBbe3ZhbHVlT2YoKSB7IGFz
c2VydC50cnV0aHkoIWNhbGxlZCk7IGNhbGxlZCA9IHRydWU7IHJldHVybiAyNTsgfSB9LCAoeCkg
PT4geyBhc3NlcnQudHJ1dGh5KGNhbGxlZCk7IGFzc2VydC5lcSh4LCAyNSk7IGNhbGxlZCA9IGZh
bHNlOyB9XSwKKyAgICAgICAgICAgIFtOYU4sICh4KSA9PiBhc3NlcnQuZXEoeCwgTmFOIHwgMCld
LAorICAgICAgICAgICAgWy0wLjAsICh4KSA9PiBhc3NlcnQuZXEoMS94LCBJbmZpbml0eSldLAor
ICAgICAgICAgICAgW3VuZGVmaW5lZCwgKHgpID0+IGFzc2VydC5lcSh4LCB1bmRlZmluZWQgfCAw
KV0sCisgICAgICAgICAgICBbbnVsbCwgKHgpID0+IGFzc2VydC5lcSh4LCBudWxsIHwgMCldLAor
ICAgICAgICAgICAgW051bWJlci5NQVhfU0FGRV9JTlRFR0VSLCAoeCkgPT4gYXNzZXJ0LmVxKHgs
IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHwgMCldLAorICAgICAgICAgICAgWzIqKjMyIC0gMSwg
KHgpID0+IGFzc2VydC5lcSh4LCAoMioqMzIgLSAxKSB8IDApXSwKKyAgICAgICAgICAgIFsyKioz
MiAtIDEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgKDIqKjMyIC0gMTAwMCkgfCAwKV0sCisgICAg
ICAgICAgICBbLTEwMDAsICh4KSA9PiBhc3NlcnQuZXEoeCwgLTEwMDApXSwKKyAgICAgICAgXSwK
KyAgICAgICAgZjMyOiBbCisgICAgICAgICAgICBbMjAsICh4KSA9PiBhc3NlcnQuZXEoeCwgMjAp
XSwKKyAgICAgICAgICAgIFsyMC44ODgsICh4KSA9PiBhc3NlcnQuZXEoeCwgTWF0aC5mcm91bmQo
MjAuODg4KSldLAorICAgICAgICAgICAgW01hdGguUEksICh4KSA9PiBhc3NlcnQuZXEoeCwgTWF0
aC5mcm91bmQoTWF0aC5QSSkpXSwKKyAgICAgICAgICAgIFt7dmFsdWVPZigpIHsgYXNzZXJ0LnRy
dXRoeSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1LjgyOyB9IH0sICh4KSA9PiB7
IGFzc2VydC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIE1hdGguZnJvdW5kKDI1LjgyKSk7
IGNhbGxlZCA9IGZhbHNlOyB9XSwKKyAgICAgICAgICAgIFtOYU4sICh4KSA9PiBhc3NlcnQudHJ1
dGh5KGlzTmFOKHgpKV0sCisgICAgICAgICAgICBbLTAuMCwgKHgpID0+IGFzc2VydC5lcSgxL3gs
IC1JbmZpbml0eSldLAorICAgICAgICAgICAgW3VuZGVmaW5lZCwgKHgpID0+IGFzc2VydC50cnV0
aHkoaXNOYU4oeCkpXSwKKyAgICAgICAgICAgIFtudWxsLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDAp
XSwKKyAgICAgICAgICAgIFtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgKHgpID0+IGFzc2VydC5l
cSh4LCBNYXRoLmZyb3VuZChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpXSwKKyAgICAgICAgICAg
IFstMTAwMCwgKHgpID0+IGFzc2VydC5lcSh4LCAtMTAwMCldLAorICAgICAgICBdLAorICAgICAg
ICBmNjQ6IFsKKyAgICAgICAgICAgIFsyMCwgKHgpID0+IGFzc2VydC5lcSh4LCAyMCldLAorICAg
ICAgICAgICAgWzIqKjI0LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIqKjI0KV0sCisgICAgICAgICAg
ICBbMioqNTIsICh4KSA9PiBhc3NlcnQuZXEoeCwgMioqNTIpXSwKKyAgICAgICAgICAgIFsyMC44
ODg4ODg4LCAoeCkgPT4gYXNzZXJ0LmVxKHgsIDIwLjg4ODg4ODgpXSwKKyAgICAgICAgICAgIFtN
YXRoLlBJLCAoeCkgPT4gYXNzZXJ0LmVxKHgsIE1hdGguUEkpXSwKKyAgICAgICAgICAgIFt7dmFs
dWVPZigpIHsgYXNzZXJ0LnRydXRoeSghY2FsbGVkKTsgY2FsbGVkID0gdHJ1ZTsgcmV0dXJuIDI1
LjgyOyB9IH0sICh4KSA9PiB7IGFzc2VydC50cnV0aHkoY2FsbGVkKTsgYXNzZXJ0LmVxKHgsIDI1
LjgyKTsgY2FsbGVkID0gZmFsc2U7IH1dLAorICAgICAgICAgICAgW05hTiwgKHgpID0+IGFzc2Vy
dC50cnV0aHkoaXNOYU4oeCkpXSwKKyAgICAgICAgICAgIFstMC4wLCAoeCkgPT4gYXNzZXJ0LmVx
KDEveCwgLUluZmluaXR5KV0sCisgICAgICAgICAgICBbdW5kZWZpbmVkLCAoeCkgPT4gYXNzZXJ0
LnRydXRoeShpc05hTih4KSldLAorICAgICAgICAgICAgW251bGwsICh4KSA9PiBhc3NlcnQuZXEo
eCwgMCldLAorICAgICAgICAgICAgW051bWJlci5NQVhfU0FGRV9JTlRFR0VSLCAoeCkgPT4gYXNz
ZXJ0LmVxKHgsIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKV0sCisgICAgICAgICAgICBbLTEwMDAs
ICh4KSA9PiBhc3NlcnQuZXEoeCwgLTEwMDApXSwKKyAgICAgICAgXQorICAgIH07CisKKyAgICBm
b3IgKGxldCB0eXBlIG9mIFJlZmxlY3Qub3duS2V5cyh0ZXN0cykpIHsKKyAgICAgICAgY29uc3Qg
YnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMi
LCB7IHBhcmFtczogW10sIHJldDogdHlwZX0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6
IHR5cGV9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAgICAg
ICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKTsK
KworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAg
ICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworCisgICAg
ICAgIGZvciAobGV0IHRlc3Qgb2YgdGVzdHNbdHlwZV0pIHsKKyAgICAgICAgICAgIGNvbnN0IGZ1
bmMgPSAoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RbMF07CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIHtpbXA6IHtmdW5jfX0pOworICAgICAgICAgICAgY29uc3QgcmV0ID0gaW5z
dGFuY2UuZXhwb3J0cy5mb28oKTsKKyAgICAgICAgICAgIHRlc3RbMV0ocmV0KTsKKyAgICAgICAg
fQorICAgIH0KK30KKworeworICAgIGxldCB0eXBlcyA9IFsiaTMyIiwgImYzMiIsICJmNjQiXTsK
KyAgICBmb3IgKGxldCB0eXBlIG9mIHR5cGVzKSB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBu
ZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAuSW1w
b3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmdW5jIiwgeyBwYXJhbXM6
IFtdLCByZXQ6IHR5cGV9KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbXSwgcmV0OiB0eXBlfSkKKyAg
ICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLlVucmVhY2hh
YmxlKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKTsKKworCisg
ICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICAgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgICAgICBsZXQg
ZXJyb3IgPSBudWxsOworICAgICAgICBjb25zdCBmdW5jID0gKCkgPT4geworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB2YWx1ZU9mKCkgeworICAgICAgICAgICAgICAgICAg
ICBlcnJvciA9IG5ldyBFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICBj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtm
dW5jfX0pOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICAg
ICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgaW5zdGFuY2UuZXhwb3J0cy5mb28oKTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICAgICAgICAgIGFzc2VydC5lcShlLCBlcnJvcik7CisgICAgICAgICAgICAgICAgdGhyZXcg
PSB0cnVlOworICAgICAgICAgICAgICAgIGVycm9yID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGFzc2VydC50cnV0aHkodGhyZXcpOworICAgICAgICB9CisgICAgfQorfQorCit7
CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImZ1bmMi
LCB7IHBhcmFtczogW10sIHJldDogImk2NCJ9KQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6ICJ2b2lkIn0pCisgICAgICAgICAgICAgICAg
LkNhbGwoMCkKKyAgICAgICAgICAgICAgICAuRHJvcCgpCisgICAgICAgICAgICAgICAgLlJldHVy
bigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAgICBjb25zdCBi
aW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3
IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiAyMDsKKyAg
ICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6
IHtmdW5jfX0pOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAg
YXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmZvbygpLCBUeXBlRXJyb3IsICJp
NjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQg
ZnVuY3Rpb24iKTsKKyAgICB9Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxk
ZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgLkZ1bmN0aW9uKCJpbXAiLCAiZnVuYyIsIHsgcGFyYW1zOiBbImk2NCJdLCByZXQ6ICJ2b2lk
In0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAu
RXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10s
IHJldDogInZvaWQifSkKKyAgICAgICAgICAgICAgICAgLkk2NENvbnN0KDIwKQorICAgICAgICAg
ICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs
ZShiaW4pOworICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiAyMDsKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmdW5jfX0pOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9
PiBpbnN0YW5jZS5leHBvcnRzLmZvbygpLCBUeXBlRXJyb3IsICJpNjQgbm90IGFsbG93ZWQgYXMg
cmV0dXJuIHR5cGUgb3IgYXJndW1lbnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKTsKKyAgICB9
Cit9CisKK3sKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlw
ZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJpbXAi
LCAiZnVuYyIsIHsgcGFyYW1zOiBbImk2NCJdLCByZXQ6ICJ2b2lkIn0pCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogW10sIHJldDogInZvaWQifSkKKyAg
ICAgICAgICAgICAgICAgLkk2NENvbnN0KDIwKQorICAgICAgICAgICAgICAgIC5DYWxsKDApCisg
ICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVu
ZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGxldCBj
YWxsZWQgPSBmYWxzZTsKKyAgICBjb25zdCBmdW5jID0gKCkgPT4geworICAgICAgICBjYWxsZWQg
PSB0cnVlOworICAgIH0KKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUsIHtpbXA6IHtmdW5jfX0pOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAw
OyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmZv
bygpLCBUeXBlRXJyb3IsICJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1l
bnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKTsKKyAgICAgICAgYXNzZXJ0LmVxKGNhbGxlZCwg
ZmFsc2UpOworICAgIH0KK30KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigp
CisgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAg
ICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgIC5FbmQo
KQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6
IFsiaTY0Il0sIHJldDogInZvaWQifSkKKyAgICAgICAgICAgICAgICAgLkk2NENvbnN0KDIwKQor
ICAgICAgICAgICAgICAgIC5DYWxsKDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBidWls
ZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1vZHVsZShiaW4pOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgdmFsdWUg
PSB7CisgICAgICAgIHZhbHVlT2YoKSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgfTsKKyAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0
YW5jZShtb2R1bGUpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICAg
ICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnN0YW5jZS5leHBvcnRzLmZvbyh2YWx1ZSksIEVycm9y
LCAiV2ViQXNzZW1ibHkgZnVuY3Rpb24gd2l0aCBhbiBpNjQgYXJndW1lbnQgY2FuJ3QgYmUgY2Fs
bGVkIGZyb20gSmF2YVNjcmlwdCIpOworICAgICAgICBhc3NlcnQuZXEoY2FsbGVkLCBmYWxzZSk7
CisgICAgfQorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTExNTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjUgQEAKKzIwMTctMDEtMjUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViQXNzZW1ibHkgSlMgQVBJOiBjb2VyY2UgcmV0dXJuIHZhbHVlcyBmcm9t
IGltcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTQ4MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjk3NjAzMTg+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgcHJvcGVy
IGNvZXJjaW9uIGZvciBhbGwgcG9zc2libGUKKyAgICAgICAgSlNWYWx1ZSByZXR1cm4gdHlwZXMg
ZnJvbSBhbiBpbXBvcnRlZCBmdW5jdGlvbi4KKyAgICAgICAgCisgICAgICAgIEl0IGFsc28gYWRk
cyB0aGUgc3BlYy1jb21wbGlhbnQgY29kZSB0byB0aHJvdyBhbiBleGNlcHRpb24KKyAgICAgICAg
d2hlbiBjYWxsaW5nIGFuIGltcG9ydCB0aGF0IGhhcyBhbiBpNjQgcGFyYW1ldGVyIG9yIHJldHVy
bgorICAgICAgICB2YWx1ZS4KKworICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRKdW1wSWZFeGNlcHRpb24pOgorICAg
ICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvSnMpOgorCiAyMDE3LTAxLTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIGNvbGxlY3RNYXRjaGluZ0VsZW1lbnRzSW5GbGF0VHJlZSBz
aG91bGQgbm90IGZpbmQgZWxlbWVudHMgaW5zaWRlIGFuIHVzZXIgYWdlbnQgc2hhZG93IHRyZWUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHJldmlzaW9uIDIxMTE1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwxMSBAQCB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAgICAgfQogfQogCitBc3NlbWJseUhlbHBl
cnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0SnVtcElmRXhjZXB0aW9uKCkKK3sKKyAgICBy
ZXR1cm4gZW1pdEV4Y2VwdGlvbkNoZWNrKE5vcm1hbEV4Y2VwdGlvbkNoZWNrKTsKK30KKwogQXNz
ZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKEV4
Y2VwdGlvbkNoZWNrS2luZCBraW5kLCBFeGNlcHRpb25KdW1wV2lkdGggd2lkdGgpCiB7CiAgICAg
Y2FsbEV4Y2VwdGlvbkZ1enooKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjExMTU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4NSw2ICsxMTg1
LDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEp1bXAgZW1pdEV4Y2VwdGlvbkNo
ZWNrKAogICAgICAgICBFeGNlcHRpb25DaGVja0tpbmQgPSBOb3JtYWxFeGNlcHRpb25DaGVjaywg
RXhjZXB0aW9uSnVtcFdpZHRoID0gTm9ybWFsSnVtcFdpZHRoKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKdW1wIGVtaXROb25QYXRjaGFibGVFeGNlcHRpb25DaGVjaygpOworICAgIEp1bXAgZW1p
dEp1bXBJZkV4Y2VwdGlvbigpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQogICAg
IHN0YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBs
aW5nQ291bnRlciYgY291bnRlciwgaW50MzJfdCBpbmNyZW1lbnQgPSAxKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMjExMTU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzYsNiArOTc2LDcgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGNhbGxlZUNvZGUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogCiAgICAgICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dN
YWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAg
ICAgIGppdC5jYWxsKHBhcmFtc1tyZXR1cm5UeXBlID09IFZvaWQgPyAwIDogMV0uZ3ByKCkpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjExMTU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNSAr
MjgsMTkgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkFzc2VtYmx5
SGVscGVycy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRnJhbWVUcmFjZXJzLmgiCisjaW5jbHVkZSAiSklURXhj
ZXB0aW9ucy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgor
I2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgV2FzbSB7CiAKLXR5cGVkZWYgQXNzZW1ibHlIZWxwZXJzIEpJVDsKK3R5cGVkZWYgQ0NhbGxI
ZWxwZXJzIEpJVDsKIAogc3RhdGljIHZvaWQgbWF0ZXJpYWxpemVJbXBvcnRKU0NlbGwoVk0qIHZt
LCBKSVQmIGppdCwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEdQUlJlZyByZXN1bHQpCiB7CkBAIC02
MSw2ICs2NSw1NSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAg
ICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tMzIoMCksIEpJVDo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOyAvLyBGSVhNRSBTdG9wIHVzaW5nIDAgYXMgY29k
ZUJsb2Nrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTMyMQog
ICAgIGppdC5zdG9yZVB0cihKSVQ6OlRydXN0ZWRJbW1QdHIodm0tPndlYkFzc2VtYmx5VG9KU0Nh
bGxlZS5nZXQoKSksIEpJVDo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkp
OwogCisKKyAgICB7CisgICAgICAgIGJvb2wgaGFzQmFkSTY0VXNlID0gZmFsc2U7CisgICAgICAg
IGhhc0JhZEk2NFVzZSB8PSBzaWduYXR1cmUtPnJldHVyblR5cGUoKSA9PSBJNjQ7CisgICAgICAg
IGZvciAodW5zaWduZWQgYXJnTnVtID0gMDsgYXJnTnVtIDwgYXJnQ291bnQgJiYgIWhhc0JhZEk2
NFVzZTsgKythcmdOdW0pIHsKKyAgICAgICAgICAgIFR5cGUgYXJnVHlwZSA9IHNpZ25hdHVyZS0+
YXJndW1lbnQoYXJnTnVtKTsKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgY2FzZSBGdW5jOgorICAgICAgICAgICAgY2Fz
ZSBBbnlmdW5jOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisKKyAgICAgICAgICAgIGNhc2UgSTY0OiB7CisgICAgICAgICAgICAgICAgaGFzQmFkSTY0VXNl
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChoYXNCYWRJNjRVc2UpIHsKKyAgICAgICAgICAgIGppdC5j
b3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAg
ICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAg
ICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgICAgICAgICB2b2lkICgqdGhy
b3dCYWRJNjQpKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7Cisg
ICAgICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKKyAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHZtLT50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOworICAgICAg
ICAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCAq
dm0sIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUo
KSwgQVNDSUlMaXRlcmFsKCJpNjQgbm90IGFsbG93ZWQgYXMgcmV0dXJuIHR5cGUgb3IgYXJndW1l
bnQgdG8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQp
OworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93QmFkSTY0KTsKKyAgICAg
ICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiV2ViQXNzZW1ibHktPkph
dmFTY3JpcHQgaW52YWxpZCBpNjQgdXNlIGluIGltcG9ydFslaV0iLCBpbXBvcnRJbmRleCkpOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gSGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgSlMgY2Fs
bGluZyBjb252ZW50aW9uIHNhdmVzIGF0IGxlYXN0IGFsbCB0aGUgd2FzbSBjYWxsZWUgc2F2ZWQu
IFdlIHRoZXJlZm9yZSBkb24ndCBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgbW9yZSByZWdpc3Rl
cnMgc2luY2UgdGhlIHdhc20gY2FsbGVlIGFscmVhZHkgdG9vayBjYXJlIG9mIHRoaXMuCiAgICAg
UmVnaXN0ZXJTZXQgbWlzc2luZ0NhbGxlZVNhdmVzID0gd2FzbUNDLm1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsKICAgICBtaXNzaW5nQ2FsbGVlU2F2ZXMuZXhjbHVkZShqc0NDLm1fY2FsbGVlU2F2ZVJl
Z2lzdGVycyk7CkBAIC03NCwyNiArMTI3LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB3YXNtVG9KcyhWTQogICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNrT2Zmc2V0ID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZCeXRlc0ZvckNh
bGwpOwogICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGFja09m
ZnNldCksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgSklUOjpB
ZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBhcmdOdW0gPSAwOyBh
cmdOdW0gPCBhcmdDb3VudDsgKythcmdOdW0pIHsKLSAgICAgICAgVHlwZSBhcmdUeXBlID0gc2ln
bmF0dXJlLT5hcmd1bWVudChhcmdOdW0pOwotICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUpIHsKLSAg
ICAgICAgY2FzZSBWb2lkOgotICAgICAgICBjYXNlIEZ1bmM6Ci0gICAgICAgIGNhc2UgQW55ZnVu
YzoKLSAgICAgICAgY2FzZSBJNjQ6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IHRoZSBjb3JyZWN0IGJlaGF2aW9yIGhlcmUuIEkgc3VzcGVjdCB3ZSB3YW50IHN1Y2ggYSBzdHVi
IHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgIC8vIGlmIGNh
bGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTk5MQotICAg
ICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgICAgICAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJXZWJBc3NlbWJseSBpbXBvcnRbJWldIHN0dWIgZm9y
IHNpZ25hdHVyZSAlaSIsIGltcG9ydEluZGV4LCBzaWduYXR1cmVJbmRleCkpOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgSTMyOgotICAgICAgICBjYXNlIEYzMjoKLSAgICAgICAgY2FzZSBGNjQ6
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgIH0KIAogICAgIC8vIEZJWE1F
IG1ha2UgdGhlc2UgbG9vcHMgd2hpY2ggc3dpdGNoIG9uIFNpZ25hdHVyZSBpZiB0aGVyZSBhcmUg
bWFueSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLiBJdCdsbCBvdGhlcndpc2UgYmUgaHVnZSBmb3Ig
aHVnZSBzaWduYXR1cmVzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY1NTQ3CiAgICAgCkBAIC0yMjAsMTAgKzI1Myw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgd2FzbVRvSnMoVk0KIAogICAgIG1hdGVyaWFsaXplSW1wb3J0SlNDZWxsKHZtLCBqaXQs
IGltcG9ydEluZGV4LCBpbXBvcnRKU0NlbGxHUFJSZWcpOwogCi0gICAgdWludDY0X3QgdGhpc0Fy
Z3VtZW50ID0gVmFsdWVVbmRlZmluZWQ7IC8vIEZJWE1FIHdoYXQgZG9lcyB0aGUgV2ViQXNzZW1i
bHkgc3BlYyBzYXkgdGhpcyBzaG91bGQgYmU/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU0NzEKICAgICBqaXQuc3RvcmU2NChpbXBvcnRKU0NlbGxHUFJSZWcsIGNh
bGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIGppdC5zdG9yZTMyKEpJVDo6VHJ1c3RlZElt
bTMyKG51bWJlck9mUGFyYW1ldGVycyksIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBQYXlsb2FkT2Zmc2V0KSk7Ci0gICAgaml0LnN0b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQodGhp
c0FyZ3VtZW50KSwgY2FsbGVlRnJhbWUud2l0aE9mZnNldChDYWxsRnJhbWVTbG90Ojp0aGlzQXJn
dW1lbnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgaml0LnN0
b3JlNjQoSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkpKTsKIAogICAgIC8vIEZJWE1FIFRhaWwgY2FsbCBpZiB0aGUgd2FzbSBy
ZXR1cm4gdHlwZSBpcyB2b2lkIGFuZCBubyByZWdpc3RlcnMgd2VyZSBzcGlsbGVkLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDg4CiAKQEAgLTI0MCw2ICsyNzIs
OCBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHdhc21Ub0pzKFZNCiAgICAgSklUOjpD
YWxsIHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7CiAgICAgZG9uZS5saW5rKCZqaXQpOwogCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25DaGVja3M7CisKICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS0+cmV0dXJuVHlwZSgpKSB7CiAgICAgY2FzZSBWb2lkOgogICAgICAgICAvLyBE
aXNjYXJkLgpAQCAtMjQ5LDUzICsyODMsOTggQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB3YXNtVG9KcyhWTQogICAgICAgICAvLyBGb3IgdGhlIEphdmFTY3JpcHQgZW1iZWRkaW5nLCBp
bXBvcnRzIHdpdGggdGhlc2UgdHlwZXMgaW4gdGhlaXIgc2lnbmF0dXJlIHJldHVybiBhcmUgYSBX
ZWJBc3NlbWJseS5Nb2R1bGUgdmFsaWRhdGlvbiBlcnJvci4KICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJMzI6IHsKLSAgICAg
ICAgaml0Lm1vdmUoSklUOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7Ci0gICAgICAgIEpJVDo6SnVtcCBjaGVja0pTSW50MzIgPSBqaXQuYnJh
bmNoNjQoSklUOjpBYm92ZU9yRXF1YWwsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgaml0LnRy
dW5jYXRlRG91YmxlVG9JbnQzMihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU051bWJlciA9IGppdC5icmFu
Y2hUZXN0NjQoSklUOjpOb25aZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSElzTm90SlNO
dW1iZXIpOyAvLyBGSVhNRSBDb2VyY2Ugd2hlbiB0aGUgdmFsdWVzIGFyZW4ndCB3aGF0IHdlIGV4
cGVjdCwgaW5zdGVhZCBvZiBhYm9ydGluZy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2NTQ4MAotICAgICAgICBjaGVja0pTSW50MzIubGluaygmaml0KTsKLSAgICAg
ICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGNoZWNrSlNOdW1iZXIubGluaygmaml0KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGNhc2UgSTY0OiB7Ci0gICAgICAgIGppdC5tb3ZlKEpJ
VDo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIp
OwotICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJv
dmVPckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIyKTsKLSAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRv
SW50NjQoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
LSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJVDo6
Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
Mik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8gRklY
TUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3RlYWQg
b2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU0
ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIEhhbmRsZWQgYWJvdmUuCisgICAgfQorICAgIGNhc2UgSTMy
OiB7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKworICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0
LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdS
ZWdpc3RlcnMpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMy
KEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RIYXZlVGFnUmVnaXN0
ZXJzKSk7CiAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBjaGVja0pTTnVtYmVyLmxp
bmsoJmppdCk7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgIHNs
b3dQYXRoLmxpbmsoJmppdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBhdXRvIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0
aW9uKCkpOworCisgICAgICAgIGludDMyX3QgKCpjb252ZXJ0VG9JMzIpKEV4ZWNTdGF0ZSosIEpT
VmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBpbnQzMl90IHsgCisg
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIHYudG9JbnQz
MihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNv
bnZlcnRUb0kzMik7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgRjMyOiB7CisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElm
Tm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMp
OworICAgICAgICBhdXRvIGlzRG91YmxlID0gaml0LmJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJl
Z3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOworICAg
ICAgICAvLyBXZSdyZSBhbiBpbnQzMgorICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
aml0LmNvbnZlcnRJbnQ2NFRvRmxvYXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86
OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAg
ICAgICAgaXNEb3VibGUubGluaygmaml0KTsKICAgICAgICAgaml0Lm1vdmUoSklUOjpUcnVzdGVk
SW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAg
IGppdC5hZGQ2NChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKICAgICAgICAgaml0Lm1vdmU2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CiAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9G
bG9hdChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwot
ICAgICAgICBKSVQ6Okp1bXAgY2hlY2tKU0ludDMyID0gaml0LmJyYW5jaDY0KEpJVDo6QWJvdmVP
ckVxdWFsLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIy
KTsKLSAgICAgICAgSklUOjpKdW1wIGNoZWNrSlNOdW1iZXIgPSBqaXQuYnJhbmNoVGVzdDY0KEpJ
VDo6Tm9uWmVybywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSMik7Ci0gICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJc05vdEpTTnVtYmVyKTsgLy8g
RklYTUUgQ29lcmNlIHdoZW4gdGhlIHZhbHVlcyBhcmVuJ3Qgd2hhdCB3ZSBleHBlY3QsIGluc3Rl
YWQgb2YgYWJvcnRpbmcuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU0ODAKLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC56ZXJv
RXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwotICAgICAgICBqaXQuY29udmVydEludDY0VG9GbG9hdChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOwotICAgICAgICBjaGVja0pTTnVtYmVy
LmxpbmsoJmppdCk7CisgICAgICAgIGRvbmUuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAg
IG5vdEFOdW1iZXIubGluaygmaml0KTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGF1dG8gY2FsbCA9IGpp
dC5jYWxsKCk7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZF
eGNlcHRpb24oKSk7CisKKyAgICAgICAgZmxvYXQgKCpjb252ZXJ0VG9GMzIpKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBmbG9hdCB7IAor
ICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odi50b051bWJlcihleGVjKSk7CisgICAgICAgIH07CisgICAgICAgIGppdC5h
ZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjYWxsLCBjb252ZXJ0VG9GMzIpOworICAgICAgICB9KTsKKworICAgICAg
ICBkb25lLmxpbmsoJmppdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEY2NDog
eworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIGF1dG8gbm90
QU51bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
RG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgYXV0byBpc0RvdWJsZSA9IGppdC5icmFu
Y2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgRG9Ob3RI
YXZlVGFnUmVnaXN0ZXJzKTsKKyAgICAgICAgLy8gV2UncmUgYW4gaW50MzIKKyAgICAgICAgaml0
LnNpZ25FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBkb25lLmFw
cGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICBpc0RvdWJsZS5saW5rKCZqaXQpOwogICAgICAg
ICBqaXQubW92ZShKSVQ6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnJldHVyblZhbHVlR1BS
MiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBqaXQubW92ZTY0VG9Eb3VibGUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAg
ICAgSklUOjpKdW1wIGNoZWNrSlNJbnQzMiA9IGppdC5icmFuY2g2NChKSVQ6OkFib3ZlT3JFcXVh
bCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0g
ICAgICAgIEpJVDo6SnVtcCBjaGVja0pTTnVtYmVyID0gaml0LmJyYW5jaFRlc3Q2NChKSVQ6Ok5v
blplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIp
OwotICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFISXNOb3RKU051bWJlcik7IC8vIEZJWE1F
IENvZXJjZSB3aGVuIHRoZSB2YWx1ZXMgYXJlbid0IHdoYXQgd2UgZXhwZWN0LCBpbnN0ZWFkIG9m
IGFib3J0aW5nLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NDgw
Ci0gICAgICAgIGNoZWNrSlNJbnQzMi5saW5rKCZqaXQpOwotICAgICAgICBqaXQuemVyb0V4dGVu
ZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLSAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIGNoZWNrSlNOdW1iZXIubGlu
aygmaml0KTsKKyAgICAgICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90
QU51bWJlci5saW5rKCZqaXQpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNh
bGwoKTsKKyAgICAgICAgZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqaXQuZW1pdEp1bXBJZkV4Y2Vw
dGlvbigpKTsKKworICAgICAgICBkb3VibGUgKCpjb252ZXJ0VG9GNjQpKEV4ZWNTdGF0ZSosIEpT
VmFsdWUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2KSAtPiBkb3VibGUgeyAKKyAg
ICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gdi50b051bWJl
cihleGVjKTsKKyAgICAgICAgfTsKKyAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIGNv
bnZlcnRUb0Y2NCk7CisgICAgICAgIH0pOworCisgICAgICAgIGRvbmUubGluaygmaml0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KQEAgLTMwMywxMyArMzgyLDM2IEBAIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgd2FzbVRvSnMoVk0KICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAKKyAgICBpZiAoIWV4Y2VwdGlvbkNoZWNrcy5lbXB0
eSgpKSB7CisgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5saW5rKCZqaXQpOworICAgICAgICBqaXQu
Y29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgICAg
ICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgaml0Lmp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgICAgICB2b2lkICgqZG9VbndpbmRpbmcpKEV4ZWNT
dGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgLT4gdm9pZCB7CisgICAgICAgICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYyk7CisgICAg
ICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAgICB9OworCisg
ICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAg
ICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBkb1Vud2luZGluZyk7CisgICAgICAgIH0p
OworICAgIH0KKwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9U
SFVOS19JRCk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0t
PmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsUmV0dXJuTG9jYXRpb24ocGF0Y2hC
dWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSk7CiAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgaG90UGF0aEJlZ2luKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjaykpOwog
ICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlciA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCk7CiAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRp
b25zKGNhbGxSZXR1cm5Mb2NhdGlvbiwgaG90UGF0aEJlZ2luLCBob3RQYXRoT3RoZXIpOworI2lm
ICFkZWZpbmVkKE5ERUJVRykKICAgICBTdHJpbmcgc2lnbmF0dXJlRGVzY3JpcHRpb24gPSBTaWdu
YXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHZtLCBzaWduYXR1cmVJbmRleCktPnRvU3RyaW5nKCk7Cisj
ZWxzZQorICAgIFN0cmluZyBzaWduYXR1cmVEZXNjcmlwdGlvbjsKKyNlbmRpZgogICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIldlYkFzc2VtYmx5LT5KYXZhU2NyaXB0IGlt
cG9ydFslaV0gJXMiLCBpbXBvcnRJbmRleCwgc2lnbmF0dXJlRGVzY3JpcHRpb24uYXNjaWkoKS5k
YXRhKCkpKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>