<?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>38408</bug_id>
          
          <creation_ts>2010-04-30 15:47:27 -0700</creation_ts>
          <short_desc>[ES6] Add support for rest parameters</short_desc>
          <delta_ts>2015-11-19 18:38:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://wiki.ecmascript.org/doku.php?id=harmony:rest_parameters</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>80559</blocked>
    
    <blocked>151454</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Erik Arvidsson">arv</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>m.goleb+bugzilla</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>219631</commentid>
    <comment_count>0</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2010-04-30 15:47:27 -0700</bug_when>
    <thetext>Rest parameters (aka var args aka rest args) are one of the agreed features for the next version of ECMAScript (Harmony)

function f(a, ...b) {
  assertTrue(b instanceof Array);
  return b.length;
}

assertEquals(0, f());
assertEquals(0, f(1));
assertEquals(1, f(1, 2));
assertEquals(3, f(1, 2, 3, 4));

Rest parameters is one of the carrots towards getting rid of &quot;arguments&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219738</commentid>
    <comment_count>1</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-01 12:08:46 -0700</bug_when>
    <thetext>We&apos;ll hold off on this until there&apos;s less flux in the spec.

I believe strict mode has more value than this as well.

Otoh, anything that avoids using the arguments object == win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124933</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-09-10 10:17:28 -0700</bug_when>
    <thetext>*** Bug 147041 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1139844</commentid>
    <comment_count>3</comment_count>
      <attachid>264908</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-05 17:38:25 -0800</bug_when>
    <thetext>Created attachment 264908
WIP

it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140035</commentid>
    <comment_count>4</comment_count>
      <attachid>264950</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-06 12:24:44 -0800</bug_when>
    <thetext>Created attachment 264950
WIP

Change op_create_rest_parameter to op_fill_rest_parameter_array so we can let normal array allocation profiling kick in with op_new_array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140109</commentid>
    <comment_count>5</comment_count>
      <attachid>264980</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-06 16:51:28 -0800</bug_when>
    <thetext>Created attachment 264980
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142699</commentid>
    <comment_count>6</comment_count>
      <attachid>265714</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-17 15:53:45 -0800</bug_when>
    <thetext>Created attachment 265714
WIP

Almost done.
I need some more tests, specifically syntax tests.
I want to write a few more optimizations to have us
only do a C call when we have more things to fill than
the argument length.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142745</commentid>
    <comment_count>7</comment_count>
      <attachid>265726</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-17 18:29:22 -0800</bug_when>
    <thetext>Created attachment 265726
WIP

almost done.
I just have to fix a default parameter bug before landing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143124</commentid>
    <comment_count>8</comment_count>
      <attachid>265823</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-18 18:33:32 -0800</bug_when>
    <thetext>Created attachment 265823
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143125</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-18 18:37:05 -0800</bug_when>
    <thetext>Attachment 265823 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5362:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5363:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5364:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5365:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5366:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 5 in 47 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143280</commentid>
    <comment_count>10</comment_count>
      <attachid>265823</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-11-19 06:11:53 -0800</bug_when>
    <thetext>Comment on attachment 265823
patch

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

Great!

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        that the op_fill_rest_parameter_array opcode does not have a result.

OK, so, op_fill_rest_parameter_array&apos;s def becomes 0 :)

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:319
&gt; +    if (needsArguments &amp;&amp; !codeBlock-&gt;isStrictMode() &amp;&amp; !parameters.hasDefaultParameterValues() &amp;&amp; !m_restParameter) {

Is the functionality (aliasing parameters variables &lt;=&gt; arguments&apos; elements) disabled when using rest parameters?
If so, adding a comment with spec URL is good for readers :)

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5365
&gt; +    m_jit.setupArgument(1, [&amp;] (GPRReg destGPR) { m_jit.move(arrayGPR, destGPR); });

Is this `arrayGPR` safe? Is there any case that `arrayGPR` aliases an argument register that is already filled (and broken)?

&gt; Source/JavaScriptCore/parser/Parser.cpp:712
&gt; +        declareRestOrNormalParameter(name, duplicateIdentifier);

Nice clean up.

&gt; Source/JavaScriptCore/parser/Parser.cpp:1537
&gt; +            failIfTrue(match(COMMA), &quot;Rest parameter should be the last parameter in a function declaration&quot;); // Let&apos;s have a good error message for this common case.

Nice for good syntax error message :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143339</commentid>
    <comment_count>11</comment_count>
      <attachid>265823</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-19 10:42:32 -0800</bug_when>
    <thetext>Comment on attachment 265823
patch

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

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:319
&gt;&gt; +    if (needsArguments &amp;&amp; !codeBlock-&gt;isStrictMode() &amp;&amp; !parameters.hasDefaultParameterValues() &amp;&amp; !m_restParameter) {
&gt; 
&gt; Is the functionality (aliasing parameters variables &lt;=&gt; arguments&apos; elements) disabled when using rest parameters?
&gt; If so, adding a comment with spec URL is good for readers :)

It is disabled. It&apos;s a good idea to add a link to the spec, I&apos;ll do that.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5365
&gt;&gt; +    m_jit.setupArgument(1, [&amp;] (GPRReg destGPR) { m_jit.move(arrayGPR, destGPR); });
&gt; 
&gt; Is this `arrayGPR` safe? Is there any case that `arrayGPR` aliases an argument register that is already filled (and broken)?

I didn&apos;t consider this. It seems like you&apos;re right and that this might not be safe.
I&apos;ll just go ahead and use our callOperation(...) mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143349</commentid>
    <comment_count>12</comment_count>
      <attachid>265823</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-19 11:16:30 -0800</bug_when>
    <thetext>Comment on attachment 265823
patch

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

I&apos;ll say r- since we don&apos;t think the call operation is correct. But please consider just using an inline loop.

&gt; Source/JavaScriptCore/bytecode/BytecodeList.json:132
&gt; +            { &quot;name&quot; : &quot;op_fill_rest_parameter_array&quot;, &quot;length&quot;: 3 }

&quot;op_fill_rest_parameter_array&quot; is a bit long for readability in bytecode dumps.

How about op_copy_rest? I believe that &quot;rest&quot; is a term of art for parameters now, and not ambiguous with other stuff in the language.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5369
&gt; +    silentSpillAllRegisters(argumentsLengthGPR);
&gt; +    // Arguments: 0:exec, 1:JSCell* array, 2:arguments start, 3:number of arguments to skip, 4:number of arguments or size_t max.
&gt; +    m_jit.setupArgument(4, [&amp;] (GPRReg destGPR) { m_jit.move(argumentsLengthGPR, destGPR); });
&gt; +    m_jit.setupArgument(3, [&amp;] (GPRReg destGPR) { m_jit.move(TrustedImm32(node-&gt;numberOfArgumentsToSkip()), destGPR); });
&gt; +    m_jit.setupArgument(2, [&amp;] (GPRReg destGPR) { emitGetArgumentStart(node-&gt;origin.semantic, destGPR); });
&gt; +    m_jit.setupArgument(1, [&amp;] (GPRReg destGPR) { m_jit.move(arrayGPR, destGPR); });
&gt; +    m_jit.setupArgument(0, [&amp;] (GPRReg destGPR) { m_jit.move(GPRInfo::callFrameRegister, destGPR); });
&gt; +    appendCall(operationFillRestParameterArray);
&gt; +    silentFillAllRegisters(argumentsLengthGPR);
&gt; +    m_jit.exceptionCheck();

As far as I can tell, rest parameter copying is not dynamic and should never fail. Can we just compile this into an inline loop with no slow path?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:3567
&gt; +            m_out.operation(operationFillRestParameterArray), m_callFrame, lowCell(m_node-&gt;child1()),

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143352</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-19 11:17:50 -0800</bug_when>
    <thetext>To elaborate on the &quot;inline loop&quot; suggestion: If you emitted DFG nodes for looping over arguments and storing into the array, then, in the common case, object allocation sinking would totally eliminate the overhead of allocating an array and copying into it. This is a very powerful optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143353</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-19 11:18:26 -0800</bug_when>
    <thetext>... But even if the allocation could not be eliminated, copying one or two arguments inline in the common case will be faster than making a function call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143362</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-19 11:53:56 -0800</bug_when>
    <thetext>Thinking about this more, we&apos;ll probably get the most bang for our buck if we notice an inline rest call, since it exposes a constant number of parameters.

So, let&apos;s land this feature with the callOperation fixed, and then land an optimization in the DFG byte code parser to notice an inline rest call and turn it into an allocation of a fixed-sized array with individual direct stores to the array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143372</commentid>
    <comment_count>16</comment_count>
      <attachid>265880</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-19 12:07:19 -0800</bug_when>
    <thetext>Created attachment 265880
patch

with callOperation inside DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143374</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-19 12:09:43 -0800</bug_when>
    <thetext>oops I forgot to rename.
I&apos;m renaming to op_copy_rest byte code instruction and CopyRest DFG node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143384</commentid>
    <comment_count>18</comment_count>
      <attachid>265883</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-19 12:26:29 -0800</bug_when>
    <thetext>Created attachment 265883
patch

renaming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143404</commentid>
    <comment_count>19</comment_count>
      <attachid>265891</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-19 13:08:29 -0800</bug_when>
    <thetext>Created attachment 265891
patch

build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143405</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-19 13:17:28 -0800</bug_when>
    <thetext>Attachment 265891 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:3637:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 1 in 47 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143489</commentid>
    <comment_count>21</comment_count>
      <attachid>265891</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-19 16:05:00 -0800</bug_when>
    <thetext>Comment on attachment 265891
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143499</commentid>
    <comment_count>22</comment_count>
      <attachid>265891</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-19 16:47:09 -0800</bug_when>
    <thetext>Comment on attachment 265891
patch

Rejecting attachment 265891 from commit-queue.

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

Last 500 characters of output:
ng file Source/JavaScriptCore/tests/stress/rest-parameter-basics.js
patching file Source/JavaScriptCore/tests/stress/rest-parameter-inlined.js
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/js/parser-syntax-check-expected.txt
patching file LayoutTests/js/script-tests/parser-syntax-check.js

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

Full output: http://webkit-queues.webkit.org/results/451991</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1143532</commentid>
    <comment_count>23</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-11-19 18:38:14 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/192671</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264908</attachid>
            <date>2015-11-05 17:38:25 -0800</date>
            <delta_ts>2015-11-06 12:24:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>32838</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw4IEBACiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSIsICJs
ZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90
b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2xvYWRfYXJyb3dmdW5jdGlvbl90aGlzIiwgImxlbmd0aCIgOiAyIH0KKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2xvYWRfYXJyb3dmdW5jdGlvbl90aGlzIiwgImxlbmd0aCIgOiAyIH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfcmVzdF9wYXJhbWV0ZXIiLCAibGVu
Z3RoIjogMyB9CiAgICAgICAgIF0KICAgICB9LAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxOTIwNjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoCiAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKICAgICBjYXNlIG9wX2Ny
ZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgogICAgIGNhc2Ugb3BfY3JlYXRlX291dF9vZl9iYW5kX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0X3BhcmFtZXRlcjoKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgIGNhc2Ugb3BfbG9hZF9hcnJvd2Z1bmN0
aW9uX3RoaXM6CkBAIC0zNzMsNyArMzc0LDggQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2Rl
T2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgogICAgIGNhc2Ugb3BfZGVsX2J5
X3ZhbDoKICAgICBjYXNlIG9wX3Vuc2lnbmVkOgotICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1l
bnRzOiB7CisgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6IAorICAgIGNhc2Ugb3BfY3Jl
YXRlX3Jlc3RfcGFyYW1ldGVyOiB7CiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsMTQgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdF9wYXJhbWV0ZXI6IHsKKyAgICAgICAgICAgIGlu
dCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY3JlYXRlX3Jlc3RfcGFyYW1ldGVyIik7CisgICAg
ICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOworICAg
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50T2Zmc2V0ID0gYml0d2lzZV9jYXN0PHNpemVfdD4oKCsr
aXQpLT51LnBvaW50ZXIpOworICAgICAgICAgICAgb3V0LnByaW50ZigiQXJndW1lbnRzT2Zmc2V0
OiAlenUiLCBhcmd1bWVudE9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytp
dCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MCw2ICs3MCw5IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZSgKICAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJndW1lbnRzKQogICAgICAgICBpbml0aWFs
aXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyksIG1fYXJndW1l
bnRzUmVnaXN0ZXIpOwogCisgICAgaWYgKG1fcmVzdFBhcmFtZXRlcikKKyAgICAgICAgbV9yZXN0
UGFyYW1ldGVyLT5lbWl0KCp0aGlzKTsKKwogICAgIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGds
b2JhbFNjb3BlOwpAQCAtMjE4LDcgKzIyMSwxMCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIC8vIElmIHdlIGRvIGhhdmUgZGVmYXVsdCBwYXJhbWV0
ZXJzLCB0aGV5IHdpbGwgYmUgYWxsb2NhdGVkIGluIGEgc2VwYXJhdGUgc2NvcGUuCiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewogICAgICAg
ICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKLSAgICAgICAgICAg
IGlmIChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCisgICAgICAgICAgICBpZiAocGF0dGVybi0+
aXNSZXN0UGFyYW1ldGVyKCkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9y
ZXN0UGFyYW1ldGVyKTsKKyAgICAgICAgICAgICAgICBtX3Jlc3RQYXJhbWV0ZXIgPSBzdGF0aWNf
Y2FzdDxSZXN0UGFyYW1ldGVyTm9kZSo+KHBhdHRlcm4pOworICAgICAgICAgICAgfSBlbHNlIGlm
IChwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhib3VuZFBhcmFtZXRl
clByb3BlcnRpZXMpOwogICAgICAgICB9CkBAIC0zMDcsNyArMzEzLDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVy
LT5yZWYoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG5lZWRzQXJndW1lbnRzICYmICFjb2RlQmxv
Y2stPmlzU3RyaWN0TW9kZSgpICYmICFwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1
ZXMoKSkgeworICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSAmJiAhcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgJiYgIW1fcmVz
dFBhcmFtZXRlcikgewogICAgICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFt
ZXRlciBieSBuYW1lLCB0aGVuIHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQog
ICAgICAgICAvLyB1c2UgRGlyZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2Ug
bGlmdCBhbGwgb2Ygb3VyIGFyZ3VtZW50cyBpbnRvIHRoZQogICAgICAgICAvLyBhY3RpdmF0aW9u
LgpAQCAtMzU3LDcgKzM2Myw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKICAgICAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMp
OwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXIt
PmluZGV4KCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghcGFyYW1ldGVycy5oYXNEZWZh
dWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsKKyAgICB9IGVsc2UgaWYgKCFwYXJhbWV0ZXJzLmhhc0Rl
ZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSAmJiAhbV9yZXN0UGFyYW1ldGVyKSB7CiAgICAgICAgIC8v
IENyZWF0ZSB0aGUgZm9ybWFsIHBhcmFtZXRlcnMgdGhlIG5vcm1hbCB3YXkuIEFueSBvZiB0aGVt
IGNvdWxkIGJlIGNhcHR1cmVkLCBvciBub3QuIElmCiAgICAgICAgIC8vIGNhcHR1cmVkLCBsaWZ0
IHRoZW0gaW50byB0aGUgc2NvcGUuIFdlIGNhbiBub3QgZG8gdGhpcyBpZiB3ZSBoYXZlIGRlZmF1
bHQgcGFyYW1ldGVyIGV4cHJlc3Npb25zCiAgICAgICAgIC8vIGJlY2F1c2Ugd2hlbiBkZWZhdWx0
IHBhcmFtZXRlciBleHByZXNzaW9ucyBleGlzdCwgdGhleSBiZWxvbmcgaW4gdGhlaXIgb3duIGxl
eGljYWwgZW52aXJvbm1lbnQKQEAgLTM4OSw3ICszOTUsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5l
ZWRzQXJndW1lbnRzICYmIChjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpIHx8IHBhcmFtZXRlcnMu
aGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSkgeworICAgIGlmIChuZWVkc0FyZ3VtZW50cyAm
JiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSB8fCBwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJh
bWV0ZXJWYWx1ZXMoKSB8fCAhIW1fcmVzdFBhcmFtZXRlcikpIHsKICAgICAgICAgLy8gQWxsb2Nh
dGUgYW4gb3V0LW9mLWJhbmRzIGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgIGVtaXRPcGNvZGUo
b3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKQEAgLTc2NCw3ICs3NzAsNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplRGVmYXVsCiAgICAgICAgIC8vIElm
IHdlIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLCB3ZSBoYW5kbGUgdGhpcyBjYXNlIGFi
b3ZlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7
IGkrKykgewogICAgICAgICAgICAgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuID0g
cGFyYW1ldGVycy5hdChpKS5maXJzdDsKLSAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5k
aW5nTm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSAm
JiAhcGF0dGVybi0+aXNSZXN0UGFyYW1ldGVyKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSArIGkpKTsKICAgICAgICAgICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUo
KnRoaXMsIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKICAgICAgICAgICAgIH0KQEAgLTM4MDcsNCAr
MzgxMywxMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5DCiAgICAg
fQogfQogCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc3RQYXJhbWV0ZXIo
UmVnaXN0ZXJJRCogcmVzdWx0LCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCkKK3sKKyAgICBl
bWl0T3Bjb2RlKG9wX2NyZWF0ZV9yZXN0X3BhcmFtZXRlcik7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc3VsdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG51bVBh
cmFtZXRlcnNUb1NraXApOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwMiw2ICs2MDIsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdEl0ZXJhdG9yTmV4dChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGl0ZXJhdG9y
LCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSk7CiAgICAgICAgIHZvaWQgZW1p
dEl0ZXJhdG9yQ2xvc2UoUmVnaXN0ZXJJRCogaXRlcmF0b3IsIGNvbnN0IFRocm93YWJsZUV4cHJl
c3Npb25EYXRhKiBub2RlKTsKIAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzdFBhcmFtZXRl
cihSZWdpc3RlcklEKiByZXN1bHQsIHNpemVfdCBudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKwogICAg
ICAgICBib29sIGVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKGNvbnN0IFZhcmlhYmxlJik7
CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4g
ZW1pdHRlZC4KQEAgLTgzMiw2ICs4MzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW51
bSBGdW5jdGlvblZhcmlhYmxlVHlwZSA6IHVpbnQ4X3QgeyBOb3JtYWxGdW5jdGlvblZhcmlhYmxl
LCBHbG9iYWxGdW5jdGlvblZhcmlhYmxlIH07CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8RnVu
Y3Rpb25NZXRhZGF0YU5vZGUqLCBGdW5jdGlvblZhcmlhYmxlVHlwZT4+IG1fZnVuY3Rpb25zVG9J
bml0aWFsaXplOwogICAgICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cyB7IGZh
bHNlIH07CisgICAgICAgIFJlc3RQYXJhbWV0ZXJOb2RlKiBtX3Jlc3RQYXJhbWV0ZXIgeyBudWxs
cHRyIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwog
ICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzg4LDcgKzMzODgsMzUgQEAg
dm9pZCBCaW5kaW5nTm9kZTo6Y29sbGVjdEJvdW5kSWRlbnRpZmllcgogewogICAgIGlkZW50aWZp
ZXJzLmFwcGVuZChtX2JvdW5kUHJvcGVydHkpOwogfQotICAgIAorCit2b2lkIFJlc3RQYXJhbWV0
ZXJOb2RlOjpjb2xsZWN0Qm91bmRJZGVudGlmaWVycyhWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50
aWZpZXJzKSBjb25zdAoreworICAgIGlkZW50aWZpZXJzLmFwcGVuZChtX25hbWUpOworfQordm9p
ZCBSZXN0UGFyYW1ldGVyTm9kZTo6YmluZFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCopIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KK3Zv
aWQgUmVzdFBhcmFtZXRlck5vZGU6OnRvU3RyaW5nKFN0cmluZ0J1aWxkZXImKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9Cit2b2lkIFJlc3RQYXJhbWV0ZXJO
b2RlOjplbWl0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCit7CisgICAgLy8gRklYTUU6
IHR5cGUgcHJvZmlsZXIgc3VwcG9ydC4KKworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52
YXJpYWJsZShtX25hbWUpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgp
KSB7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UmVzdFBhcmFtZXRlcihsb2NhbCwgbV9udW1QYXJh
bWV0ZXJzVG9Ta2lwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBl
eHByZXNzaW9uIGluZm8gYW5kIGFsbCB0aGF0IGphenouCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlc3RQYXJhbWV0ZXJBcnJheSA9IGdlbmVyYXRvci5lbWl0UmVzdFBhcmFtZXRlcihnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIG1fbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUobnVsbHB0ciwgdmFy
KTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIHZhciwgcmVzdFBh
cmFtZXRlckFycmF5LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90
Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb24pOworfQorCiBSZWdp
c3RlcklEKiBTcHJlYWRFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCopCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY2Myw2ICsxNjYzLDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCiAgICAgICAgICAgICAgICAgbm9k
ZS0+dHlwZWRBcnJheVR5cGUoKSkpOwogICAgICAgICBicmVhazsKKworICAgIC8vIEZJWE1FOiBs
ZXRzIGhvb2sgaW50byBzb21lIHByb2ZpbGluZyBzbyB3ZSBoYXZlIGEgcmVhbCBpbmRleGluZyB0
eXBlLgorICAgIGNhc2UgTmV3UmVzdFBhcmFtZXRlckFycmF5OgorICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldCgKKyAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVkKSk7CisgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMyMiw2ICszMzIyLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X25ld19yZWdleHApOwogICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9jcmVhdGVfcmVzdF9w
YXJhbWV0ZXI6IHsKKyAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
YWRkVG9HcmFwaChOZXdSZXN0UGFyYW1ldGVyQXJyYXksIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5wb2ludGVyKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRlX3Jl
c3RfcGFyYW1ldGVyKTsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIC8vID09PSBC
aXR3aXNlIG9wZXJhdGlvbnMgPT09CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5
LDYgKzIxOSw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAg
ICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfZ2V0X3Bh
cmVudF9zY29wZToKICAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Rf
cGFyYW1ldGVyOgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNh
c2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4Myw2ICs5ODMsMTMgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47
CiAgICAgfQogCisgICAgY2FzZSBOZXdSZXN0UGFyYW1ldGVyQXJyYXk6IHsKKyAgICAgICAgcmVh
ZChTdGFjayk7CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUo
SGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhc2UgTmV3
T2JqZWN0OgogICAgIGNhc2UgTmV3UmVnZXhwOgogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTky
MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDAsNiArMjQwLDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgog
ICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgY2FzZSBOZXdSZXN0UGFyYW1ldGVyQXJyYXk6
CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAgY2Fz
ZSBNYWtlUm9wZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwNyw2ICsxNDA3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgICAgICBjYXNlIENyZWF0ZURpcmVj
dEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6CisgICAgICAg
IGNhc2UgTmV3UmVzdFBhcmFtZXRlckFycmF5OiAvLyBGSVhNRTogbWFrZSBzdXJlIHRoaXMgaXMg
Y29ycmVjdC4KICAgICAgICAgY2FzZSBKdW1wOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAg
ICAgY2FzZSBUYWlsQ2FsbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjE1OCw3ICsyMTU4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7
CiAgICAgICAgIG1fbWlzYy5lcG9jaCA9IGVwb2NoLnRvVW5zaWduZWQoKTsKICAgICB9Ci0gICAg
CisKKyAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wKCkgPT0gTmV3UmVzdFBhcmFtZXRlckFycmF5KTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxzaXplX3Q+KG1fb3BJbmZvKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBDaGls
ZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5MjA2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICBtYWNybyhOZXdBcnJheUJ1ZmZlciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTmV3
VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oTmV3UmVzdFBhcmFtZXRlckFy
cmF5LCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlv
biBzaW5raW5nLiAqL1wKICAgICBtYWNybyhQaGFudG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgs
MjQgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVOZXdS
ZXN0UGFyYW1ldGVyQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlciogYXJndW1lbnRTdGFy
dCwgc2l6ZV90IG51bVBhcmFtc1RvU2tpcCwgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgLy8gRklYTUU6IG5vdCBzdXJlIHdoYXQgdG8g
ZG8gdy8gSW5kZXhpbmdNb2RlIGhlcmUuCisgICAgLy8gRklYTUU6IGNoZWNrIGZvciBvb20gZXJy
b3JzLgorICAgIFN0cnVjdHVyZSogYXJyYXlTdHJ1Y3R1cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihB
cnJheVdpdGhVbmRlY2lkZWQpOworICAgIGlmIChudW1iZXJPZkFyZ3VtZW50cyA8PSBudW1QYXJh
bXNUb1NraXApCisgICAgICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGUodm0sIGFycmF5U3RydWN0
dXJlLCAwKTsKKworICAgIHNpemVfdCBhcnJheVNpemUgPSBudW1iZXJPZkFyZ3VtZW50cyAtIG51
bVBhcmFtc1RvU2tpcDsKKyAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5OjpjcmVhdGUodm0s
IGFycmF5U3RydWN0dXJlLCBhcnJheVNpemUpOworICAgIHJlc3VsdC0+YnV0dGVyZmx5KCk7IC8v
IEVuc3VyZSB0aGF0IHRoZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNwYWNlLgorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspCisgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgaSwgYXJndW1lbnRTdGFydFtpICsgbnVtUGFyYW1zVG9Ta2lwXS5qc1Zh
bHVlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uT2JqZWN0SXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0
ZVNjb3BlZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1l
bnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgSlNMZXhpY2FsRW52
aXJvbm1lbnQqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRB
cmd1bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSosIEpTRnVuY3Rp
b24qLCBpbnQzMl90IGFyZ3VtZW50Q291bnQpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3Rl
ciogYXJndW1lbnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSk7CitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlTmV3UmVzdFBhcmFtZXRlckFycmF5
KEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCBzaXplX3QgYXJndW1lbnRzT2Zm
c2V0LCBzaXplX3QgYXJndW1lbnRzQ291bnQpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTky
MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MSw3ICs0NzEsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgICAgIGNhc2UgTmV3QXJy
YXlXaXRoU2l6ZToKLSAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjogeworICAgICAgICBjYXNl
IE5ld0FycmF5QnVmZmVyOiAKKyAgICAgICAgY2FzZSBOZXdSZXN0UGFyYW1ldGVyQXJyYXk6IHsK
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYg
KzIzNSw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBj
YXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKICAgICBjYXNlIE5ld0Fy
cmF5QnVmZmVyOgorICAgIGNhc2UgTmV3UmVzdFBhcmFtZXRlckFycmF5OgogICAgIGNhc2UgTmV3
UmVnZXhwOgogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0NSw2ICs0NDQ1LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29t
cGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIGNhc2UgTmV3UmVzdFBhcmFtZXRlckFycmF5OiB7CisgICAgICAgIGNvbXBpbGVOZXdSZXN0
UGFyYW1ldGVyQXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2Ug
TmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5
MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MjE2LDYgKzUyMTYsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1Jlc3RQYXJhbWV0ZXJBcnJheShO
b2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IE5ld1Jlc3RQYXJhbWV0ZXJB
cnJheSk7CisKKyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisg
ICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMsIDE6YXJndW1lbnRzIHN0YXJ0LCAyOm51bWJlciBvZiBh
cmd1bWVudHMgdG8gc2tpcCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIG9yIHNpemVfdCBtYXguCisg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudCgzLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IGVtaXRHZXRM
ZW5ndGgobm9kZS0+b3JpZ2luLnNlbWFudGljLCBkZXN0R1BSKTsgfSk7CisgICAgbV9qaXQuc2V0
dXBBcmd1bWVudCgyLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSwgZGVzdEdQUik7IH0pOworICAg
IG1faml0LnNldHVwQXJndW1lbnQoMSwgWyZdIChHUFJSZWcgZGVzdEdQUikgeyBlbWl0R2V0QXJn
dW1lbnRTdGFydChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGRlc3RHUFIpOyB9KTsKKyAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZGVzdEdQUik7IH0pOworCisgICAgYXBwZW5kQ2FsbFNl
dFJlc3VsdChvcGVyYXRpb25DcmVhdGVOZXdSZXN0UGFyYW1ldGVyQXJyYXksIHJlc3VsdEdQUik7
CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+d2F0Y2hwb2ludFNl
dCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM3LDYgKzIyMzcsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRl
Q2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOZXdSZXN0UGFyYW1ldGVy
QXJyYXkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBi
b29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9y
TnVsbChOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFy
cmllckluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkyMDY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw2ICsyOTQsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgY2FzZSBOZXdBcnJheToKICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6
ZToKICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgICAgICAgICBjYXNlIE5l
d1Jlc3RQYXJhbWV0ZXJBcnJheToKICAgICAgICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheToKICAg
ICAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgogICAgICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5l
d09iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDExICsxMTEsMTUgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lz
dGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5p
bmRleGluZ1R5cGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIGNhc2UgTmV3UmVzdFBhcmFtZXRlckFycmF5OgorICAgICAgICAgICAgICAgICAgICBy
ZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoVW5kZWNpZGVkKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUobm9kZS0+dHlwZWRBcnJh
eVR5cGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICBjYXNlIFRvU3RyaW5nOgogICAgICAgICAgICAgICAgIGNh
c2UgQ2FsbFN0cmluZ0NvbnN0cnVjdG9yOgogICAgICAgICAgICAgICAgICAgICByZWdpc3RlclN0
cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5z
dHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAg
ICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHd0ZiB0aGlzIGlzLgogICAgICAgICBjYXNlIE5ld0Fy
cmF5OgogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAgICAgICAgIGNhc2UgTmV3QXJy
YXlCdWZmZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxOTIw
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMSw2ICsyMTEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKICAgICAgICAgREVG
SU5FX09QKG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Y3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cykKKyAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0
ZV9yZXN0X3BhcmFtZXRlcikKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3RkeikKICAgICAg
ICAgREVGSU5FX09QKG9wX2RlYnVnKQogICAgICAgICBERUZJTkVfT1Aob3BfZGVsX2J5X2lkKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNiArNDkxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRlX3Njb3Bl
ZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9v
dXRfb2ZfYmFuZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2NyZWF0ZV9yZXN0X3BhcmFtZXRlcihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfY2hlY2tfdGR6KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9kZWJ1ZyhJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9u
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlz
aW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOTAsNiArMTM5MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfb3V0X29mX2JhbmRfYXJnCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3Jlc3RfcGFyYW1ldGVyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9jcmVhdGVfcmVzdF9wYXJhbWV0ZXIpOworICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTY3NSw2ICsxNjc1LDEyIEBAIF9sbGludF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoK
ICAgICBzdG9yZWIgMSwgQmFzaWNCbG9ja0xvY2F0aW9uOjptX2hhc0V4ZWN1dGVkW3QwXQogICAg
IGRpc3BhdGNoKDIpCiAKK19sbGludF9vcF9jcmVhdGVfcmVzdF9wYXJhbWV0ZXI6CisgICAgdHJh
Y2VFeGVjdXRpb24oKQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NyZWF0ZV9yZXN0X3Bh
cmFtZXRlcikKKyAgICBkaXNwYXRjaCgzKQorCisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3
ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBU
aGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhl
ciBKSVQuIFdlIGFzc2VydAogIyBhcyBtdWNoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDYsNiArODQ2
LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQmluZGlu
Z05vZGUoYm91bmRQcm9wZXJ0eSwgc3RhcnQsIGVuZCwgY29udGV4dCk7CiAgICAgfQogCisgICAg
UmVzdFBhcmFtZXRlck5vZGUqIGNyZWF0ZVJlc3RQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCisgICAgeworICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBSZXN0UGFyYW1ldGVyTm9kZShuYW1lLCBudW1QYXJhbWV0ZXJz
VG9Ta2lwKTsKKyAgICB9CisKICAgICB2b2lkIHNldEVuZE9mZnNldChOb2RlKiBub2RlLCBpbnQg
b2Zmc2V0KQogICAgIHsKICAgICAgICAgbm9kZS0+c2V0RW5kT2Zmc2V0KG9mZnNldCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAko
cmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29u
c3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjQsNiArMTAyNCwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgLCBtX2JpbmRpbmdDb250ZXh0KGNvbnRleHQpCiAgICAgewogICAg
IH0KKworICAgIGlubGluZSBSZXN0UGFyYW1ldGVyTm9kZTo6UmVzdFBhcmFtZXRlck5vZGUoY29u
c3QgSWRlbnRpZmllciYgbmFtZSwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCisgICAgICAg
IDogRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAg
ICAgICAgLCBtX251bVBhcmFtZXRlcnNUb1NraXAobnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAgICB7
CisgICAgfQogICAgIAogICAgIGlubGluZSBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGU6OkRl
c3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqIGJpbmRpbmdzLCBFeHByZXNzaW9uTm9kZSogaW5p
dGlhbGl6ZXIpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NzIsNiAr
MTk3Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgdG9TdHJpbmco
U3RyaW5nQnVpbGRlciYpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5k
aW5nTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1Jlc3RQYXJhbWV0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXREaXJlY3RCaW5kaW5nKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCosIEV4cHJlc3Npb25Ob2RlKikgeyByZXR1cm4gMDsgfQogICAgICAgICAKICAgICBwcm90
ZWN0ZWQ6CkBAIC0yMDUyLDYgKzIwNTMsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFz
c2lnbm1lbnRDb250ZXh0IG1fYmluZGluZ0NvbnRleHQ7CiAgICAgfTsKIAorICAgIGNsYXNzIFJl
c3RQYXJhbWV0ZXJOb2RlIDogcHVibGljIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSB7CisgICAg
cHVibGljOgorICAgICAgICBSZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyJiBib3Vu
ZFByb3BlcnR5LCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKKyAgICAgICAgYm9vbCBp
c1Jlc3RQYXJhbWV0ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAg
ICAgdm9pZCBlbWl0KEJ5dGVjb2RlR2VuZXJhdG9yJik7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICB2aXJ0dWFsIHZvaWQgY29sbGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZpZXI+
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBiaW5kVmFsdWUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1
YWwgdm9pZCB0b1N0cmluZyhTdHJpbmdCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgbV9uYW1lOworICAgICAgICBzaXplX3QgbV9udW1QYXJhbWV0
ZXJzVG9Ta2lwOworICAgIH07CisKICAgICBjbGFzcyBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRGVzdHJ1
Y3R1cmluZ0Fzc2lnbm1lbnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlc3RydWN0dXJp
bmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzcsMTMgKzE1
MzcsMjcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgIGNv
bnRleHQuYXBwZW5kUGFyYW1ldGVyKGxpc3QsIHBhcmFtZXRlciwgZGVmYXVsdFZhbHVlKTsKICAg
ICBwYXJhbWV0ZXJDb3VudCsrOwogICAgIHdoaWxlIChjb25zdW1lKENPTU1BKSkgewotICAgICAg
ICBwYXJhbWV0ZXIgPSBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0
dXJlVG9QYXJhbWV0ZXJzLCBFeHBvcnRUeXBlOjpOb3RFeHBvcnRlZCwgJmR1cGxpY2F0ZVBhcmFt
ZXRlciwgJmhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuKTsKKyAgICAgICAgYm9vbCBpc1Jlc3RQYXJh
bWV0ZXIgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1hdGNoKERPVERPVERPVCkpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBsZXRzIG1ha2Ugc3VyZSBzeW50YXggaXMgY29ycmVjdCBhbmQgd2UgdGhy
b3cgZXJyb3JzLgorICAgICAgICAgICAgLy8gaS5lLCBub3QgY2FsbGVkIGluc2lkZSBzZXR0ZXJz
LCBldGMuCisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKElERU5U
KSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhN
RTogdGhyb3cgZXJyb3IuCisgICAgICAgICAgICBkZWNsYXJlQm91bmRQYXJhbWV0ZXIobV90b2tl
bi5tX2RhdGEuaWRlbnQpOyAvLyBGSVhNRTogYmV0dGVyIGFic3RyYWN0aW9uIGhlcmUuCisgICAg
ICAgICAgICBwYXJhbWV0ZXIgPSBjb250ZXh0LmNyZWF0ZVJlc3RQYXJhbWV0ZXIoKm1fdG9rZW4u
bV9kYXRhLmlkZW50LCBwYXJhbWV0ZXJDb3VudCk7CisgICAgICAgICAgICBuZXh0KCk7CisgICAg
ICAgICAgICBpc1Jlc3RQYXJhbWV0ZXIgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1
Y3R1cmVUb1BhcmFtZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCAmZHVwbGljYXRlUGFy
YW1ldGVyLCAmaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOwogICAgICAgICBmYWlsSWZGYWxzZShw
YXJhbWV0ZXIsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVyIHBhdHRlcm4iKTsKICAgICAgICAgZGVm
YXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250
ZXh0KTsKICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgZmFpbEZyb21EdXBsaWNh
dGUoKTsKICAgICAgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIobGlzdCwgcGFyYW1ldGVyLCBk
ZWZhdWx0VmFsdWUpOwogICAgICAgICBwYXJhbWV0ZXJDb3VudCsrOworICAgICAgICBpZiAoaXNS
ZXN0UGFyYW1ldGVyKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwogI3VuZGVmIGZhaWxGcm9tRHVwbGljYXRlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkV4cHIsIENsYXNzRXhwciwgU3Vw
ZXJFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAgICAgICAgIE5ld0V4cHIs
IFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCiAgICAgICAgIENvbmRp
dGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVvZkV4cHIsIE5ld1RhcmdldEV4cHIsCi0g
ICAgICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZXN0cnVjdHVyaW5n
LAorICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1
cmluZywgUmVzdFBhcmFtZXRlciwKICAgICAgICAgQXJyYXlEZXN0cnVjdHVyaW5nLCBPYmplY3RE
ZXN0cnVjdHVyaW5nLCBTb3VyY2VFbGVtZW50c1Jlc3VsdCwKICAgICAgICAgRnVuY3Rpb25Cb2R5
UmVzdWx0LCBTcHJlYWRFeHByLCBBcmd1bWVudHNSZXN1bHQsCiAgICAgICAgIFByb3BlcnR5TGlz
dFJlc3VsdCwgQXJndW1lbnRzTGlzdFJlc3VsdCwgRWxlbWVudHNMaXN0UmVzdWx0LApAQCAtMTM5
LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIGludCBEZXN0cnVjdHVyaW5nUGF0dGVy
bjsKICAgICB0eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJuIEFycmF5UGF0dGVybjsKICAgICB0
eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJuIE9iamVjdFBhdHRlcm47CisgICAgdHlwZWRlZiBE
ZXN0cnVjdHVyaW5nUGF0dGVybiBSZXN0UGF0dGVybjsKIAogICAgIHN0YXRpYyBjb25zdCBib29s
IENyZWF0ZXNBU1QgPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBOZWVkc0ZyZWVWYXJp
YWJsZUluZm8gPSBmYWxzZTsKQEAgLTM1Niw2ICszNTcsMTAgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIEJpbmRpbmdEZXN0cnVjdHVyaW5nOwogICAgIH0KKyAgICBSZXN0UGF0dGVy
biBjcmVhdGVSZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImLCBzaXplX3QpCisgICAgeyAK
KyAgICAgICAgcmV0dXJuIFJlc3RQYXJhbWV0ZXI7CisgICAgfQogCiAgICAgYm9vbCBpc0JpbmRp
bmdOb2RlKERlc3RydWN0dXJpbmdQYXR0ZXJuIHBhdHRlcm4pCiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZp
c2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTQsNCArNjk0LDI1IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIFJFVFVSTihyZXNvbHZlZFNjb3BlKTsK
IH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9yZXN0X3BhcmFtZXRlcikKK3sK
KyAgICBCRUdJTigpOworICAgIC8vIGZ1bmN0aW9uIGZvbyhhLCBiLCAuLi5jKQorICAgIC8vIGZv
bygxMCwgMjAsIDMwKQorICAgIHNpemVfdCBudW1QYXJhbXNUb1NraXAgPSBiaXR3aXNlX2Nhc3Q8
c2l6ZV90PihwY1syXS51LnBvaW50ZXIpOworICAgIHNpemVfdCBudW1Bcmd1bWVudHNUb0Z1bmN0
aW9uID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIC8vIEZJWE1FOiBub3Qgc3VyZSB3aGF0
IHRvIGRvIHcvIEluZGV4aW5nTW9kZSBoZXJlLgorICAgIC8vIEZJWE1FOiBjaGVjayBmb3Igb29t
IGVycm9ycy4KKyAgICBTdHJ1Y3R1cmUqIGFycmF5U3RydWN0dXJlID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oQXJyYXlXaXRoVW5kZWNpZGVkKTsKKyAgICBpZiAobnVtQXJndW1lbnRzVG9GdW5jdGlvbiA8
PSBudW1QYXJhbXNUb1NraXApCisgICAgICAgIFJFVFVSTihKU0FycmF5OjpjcmVhdGUodm0sIGFy
cmF5U3RydWN0dXJlLCAwKSk7CisKKyAgICBzaXplX3QgYXJyYXlTaXplID0gbnVtQXJndW1lbnRz
VG9GdW5jdGlvbiAtIG51bVBhcmFtc1RvU2tpcDsKKyAgICBKU0FycmF5KiByZXN1bHQgPSBKU0Fy
cmF5OjpjcmVhdGUodm0sIGFycmF5U3RydWN0dXJlLCBhcnJheVNpemUpOworICAgIHJlc3VsdC0+
YnV0dGVyZmx5KCk7IC8vIEVuc3VyZSB0aGF0IHRoZSBiYWNraW5nIHN0b3JlIGlzIGluIHRvLXNw
YWNlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspCisgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
aSArIG51bVBhcmFtc1RvU2tpcCkpOworICAgIFJFVFVSTihyZXN1bHQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDYgKzI5
Miw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHJvZmlsZV8KIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwogU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpOwogU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3RfcGFyYW1ldGVyKTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264950</attachid>
            <date>2015-11-06 12:24:44 -0800</date>
            <delta_ts>2015-11-06 16:51:28 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>32343</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw4IEBACiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSIsICJs
ZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90
b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2xvYWRfYXJyb3dmdW5jdGlvbl90aGlzIiwgImxlbmd0aCIgOiAyIH0KKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2xvYWRfYXJyb3dmdW5jdGlvbl90aGlzIiwgImxlbmd0aCIgOiAyIH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5Iiwg
Imxlbmd0aCI6IDMgfQogICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMTky
MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVj
b2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfamVxX251bGw6CiAgICAgY2FzZSBvcF9qbmVxX251bGw6
CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBvcF9pbmM6IHsKKyAgICBjYXNlIG9wX2luYzog
CisgICAgY2FzZSBvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5OiB7CiAgICAgICAgIGZ1bmN0
b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDYsNiArMjQ3LDcgQEAgdm9pZCBj
b21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAg
c3dpdGNoIChvcGNvZGVJRCkgewogICAgIC8vIFRoZXNlIGRvbid0IGRlZmluZSBhbnl0aGluZy4K
KyAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6CiAgICAgY2FzZSBvcF9wdXRf
dG9fc2NvcGU6CiAgICAgY2FzZSBvcF9lbmQ6CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2Fs
bDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgxLDYgKzc4MSwxNCBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIHNpemVfdCBhcmd1bWVudE9mZnNldCA9IGJpdHdpc2VfY2FzdDxzaXplX3Q+KCgr
K2l0KS0+dS5wb2ludGVyKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNl
dDogJXp1IiwgYXJndW1lbnRPZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNiArNzAsOSBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGUoCiAgICAgaWYgKG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cykKICAgICAgICAgaW5pdGlh
bGl6ZVZhcmlhYmxlKHZhcmlhYmxlKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpLCBtX2FyZ3Vt
ZW50c1JlZ2lzdGVyKTsKIAorICAgIGlmIChtX3Jlc3RQYXJhbWV0ZXIpCisgICAgICAgIG1fcmVz
dFBhcmFtZXRlci0+ZW1pdCgqdGhpcyk7CisKICAgICB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiB0ZW1wID0gbmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBn
bG9iYWxTY29wZTsKQEAgLTIxOCw3ICsyMjEsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAvLyBJZiB3ZSBkbyBoYXZlIGRlZmF1bHQgcGFyYW1l
dGVycywgdGhleSB3aWxsIGJlIGFsbG9jYXRlZCBpbiBhIHNlcGFyYXRlIHNjb3BlLgogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7Ci0gICAgICAgICAg
ICBpZiAocGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAgICAgICAgaWYgKHBhdHRlcm4t
PmlzUmVzdFBhcmFtZXRlcigpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
cmVzdFBhcmFtZXRlcik7CisgICAgICAgICAgICAgICAgbV9yZXN0UGFyYW1ldGVyID0gc3RhdGlj
X2Nhc3Q8UmVzdFBhcmFtZXRlck5vZGUqPihwYXR0ZXJuKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAocGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgcGF0dGVybi0+Y29sbGVjdEJvdW5kSWRlbnRpZmllcnMoYm91bmRQYXJhbWV0
ZXJQcm9wZXJ0aWVzKTsKICAgICAgICAgfQpAQCAtMzA3LDcgKzMxMyw3IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgbV9hcmd1bWVudHNSZWdpc3Rl
ci0+cmVmKCk7CiAgICAgfQogICAgIAotICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSAmJiAhcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzKCkpIHsKKyAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RN
b2RlKCkgJiYgIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpICYmICFtX3Jl
c3RQYXJhbWV0ZXIpIHsKICAgICAgICAgLy8gSWYgd2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJh
bWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2UgU2NvcGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UK
ICAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3VtZW50cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdl
IGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMgaW50byB0aGUKICAgICAgICAgLy8gYWN0aXZhdGlv
bi4KQEAgLTM1Nyw3ICszNjMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRz
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVy
LT5pbmRleCgpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXBhcmFtZXRlcnMuaGFzRGVm
YXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgfSBlbHNlIGlmICghcGFyYW1ldGVycy5oYXNE
ZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgJiYgIW1fcmVzdFBhcmFtZXRlcikgewogICAgICAgICAv
LyBDcmVhdGUgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhl
bSBjb3VsZCBiZSBjYXB0dXJlZCwgb3Igbm90LiBJZgogICAgICAgICAvLyBjYXB0dXJlZCwgbGlm
dCB0aGVtIGludG8gdGhlIHNjb3BlLiBXZSBjYW4gbm90IGRvIHRoaXMgaWYgd2UgaGF2ZSBkZWZh
dWx0IHBhcmFtZXRlciBleHByZXNzaW9ucwogICAgICAgICAvLyBiZWNhdXNlIHdoZW4gZGVmYXVs
dCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMgZXhpc3QsIHRoZXkgYmVsb25nIGluIHRoZWlyIG93biBs
ZXhpY2FsIGVudmlyb25tZW50CkBAIC0zODksNyArMzk1LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChu
ZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSB8fCBwYXJhbWV0ZXJz
Lmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkpIHsKKyAgICBpZiAobmVlZHNBcmd1bWVudHMg
JiYgKGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgfHwgcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFy
YW1ldGVyVmFsdWVzKCkgfHwgISFtX3Jlc3RQYXJhbWV0ZXIpKSB7CiAgICAgICAgIC8vIEFsbG9j
YXRlIGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBlbWl0T3Bjb2Rl
KG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwogICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobV9hcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CkBAIC03NjQsNyArNzcwLDcg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bAogICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgd2UgaGFuZGxlIHRoaXMgY2FzZSBh
Ym92ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgp
OyBpKyspIHsKICAgICAgICAgICAgIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybiA9
IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmlu
ZGluZ05vZGUoKSkgeworICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkg
JiYgIXBhdHRlcm4tPmlzUmVzdFBhcmFtZXRlcigpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHBhcmFtZXRlclZhbHVlID0gJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEgKyBpKSk7CiAgICAgICAgICAgICAgICAgcGF0dGVybi0+YmluZFZhbHVl
KCp0aGlzLCBwYXJhbWV0ZXJWYWx1ZS5nZXQoKSk7CiAgICAgICAgICAgICB9CkBAIC0zODA3LDQg
KzM4MTMsMTUgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW52YWxpZGF0ZUZvckluQwogICAg
IH0KIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVy
KFJlZ2lzdGVySUQqIHJlc3VsdCwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCit7CisgICAg
ZW1pdE5ld0FycmF5KHJlc3VsdCwgbnVsbHB0ciwgMCk7CisKKyAgICBlbWl0T3Bjb2RlKG9wX2Zp
bGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXN1
bHQtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0ZXJzVG9T
a2lwKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDIs
NiArNjAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJdGVy
YXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgY29uc3QgVGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogICAgICAgICB2b2lkIGVtaXRJdGVyYXRvckNs
b3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc3RQYXJhbWV0ZXIoUmVnaXN0ZXJJ
RCogcmVzdWx0LCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKICAgICAgICAgYm9vbCBl
bWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZChjb25zdCBWYXJpYWJsZSYpOwogCiAgICAgICAg
IC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVuIGVtaXR0ZWQuCkBA
IC04MzIsNiArODM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gRnVuY3Rpb25W
YXJpYWJsZVR5cGUgOiB1aW50OF90IHsgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSwgR2xvYmFsRnVu
Y3Rpb25WYXJpYWJsZSB9OwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiwgRnVuY3Rpb25WYXJpYWJsZVR5cGU+PiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZTsK
ICAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9OworICAg
ICAgICBSZXN0UGFyYW1ldGVyTm9kZSogbV9yZXN0UGFyYW1ldGVyIHsgbnVsbHB0ciB9OwogICAg
ICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9u
IDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4OCw3ICszMzg4LDM1IEBAIHZvaWQgQmluZGlu
Z05vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXIKIHsKICAgICBpZGVudGlmaWVycy5hcHBlbmQo
bV9ib3VuZFByb3BlcnR5KTsKIH0KLSAgICAKKwordm9pZCBSZXN0UGFyYW1ldGVyTm9kZTo6Y29s
bGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycykgY29u
c3QKK3sKKyAgICBpZGVudGlmaWVycy5hcHBlbmQobV9uYW1lKTsKK30KK3ZvaWQgUmVzdFBhcmFt
ZXRlck5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKSBjb25z
dAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9Cit2b2lkIFJlc3RQYXJh
bWV0ZXJOb2RlOjp0b1N0cmluZyhTdHJpbmdCdWlsZGVyJikgY29uc3QKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQordm9pZCBSZXN0UGFyYW1ldGVyTm9kZTo6ZW1pdChC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIC8vIEZJWE1FOiB0eXBlIHByb2Zp
bGVyIHN1cHBvcnQuCisKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9u
YW1lKTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAgICAg
ICBnZW5lcmF0b3IuZW1pdFJlc3RQYXJhbWV0ZXIobG9jYWwsIG1fbnVtUGFyYW1ldGVyc1RvU2tp
cCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogZXhwcmVzc2lvbiBp
bmZvIGFuZCBhbGwgdGhhdCBqYXp6LgorICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN0UGFyYW1l
dGVyQXJyYXkgPSBnZW5lcmF0b3IuZW1pdFJlc3RQYXJhbWV0ZXIoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBtX251bVBhcmFtZXRlcnNUb1NraXApOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBz
Y29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHJlc3RQYXJhbWV0ZXJBcnJh
eS5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9O
b3RUaHJvd0lmTm90Rm91bmQsIEluaXRpYWxpemF0aW9uKTsKK30KKwogUmVnaXN0ZXJJRCogU3By
ZWFkRXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
NjMsNiArMTY2MywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT50eXBlZEFycmF5U3RydWN0dXJlKAogICAgICAgICAgICAgICAgIG5vZGUtPnR5cGVkQXJy
YXlUeXBlKCkpKTsKICAgICAgICAgYnJlYWs7CisKKyAgICAvLyBGSVhNRTogbGV0cyBob29rIGlu
dG8gc29tZSBwcm9maWxpbmcgc28gd2UgaGF2ZSBhIHJlYWwgaW5kZXhpbmcgdHlwZS4KKyAgICBj
YXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CisgICAgICAgIC8vZm9yTm9kZShub2RlKS5zZXQo
CisgICAgICAgIC8vICAgIG1fZ3JhcGgsCisgICAgICAgIC8vICAgIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+cmVnRXhwU3RydWN0dXJlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzIyLDYgKzMzMjIsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3
X3JlZ2V4cCk7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0
ZXJfYXJyYXk6IHsKKyAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAg
ICAgYWRkVG9HcmFwaChGaWxsUmVzdFBhcmFtZXRlckFycmF5LCBPcEluZm8oY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUucG9pbnRlciksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2ZpbGxfcmVz
dF9wYXJhbWV0ZXJfYXJyYXkpOworICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgLy8g
PT09IEJpdHdpc2Ugb3BlcmF0aW9ucyA9PT0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTksNiArMjE5LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9n
ZXRfcGFyZW50X3Njb3BlOgogICAgIGNhc2Ugb3BfY2F0Y2g6CisgICAgY2FzZSBvcF9maWxsX3Jl
c3RfcGFyYW1ldGVyX2FycmF5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4Myw2ICs5
ODMsMTEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OiB7Cisg
ICAgICAgIHJlYWQoU3RhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBO
ZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAx
OTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNCw2ICsyMjQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6
CiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJy
YXk6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2Nyw2ICsxMzY3LDExIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0
ZXJBcnJheTogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhh
dCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTU4LDcgKzIxNTgsMTMgQEAgc3RydWN0IE5vZGUgewogICAg
IHsKICAgICAgICAgbV9taXNjLmVwb2NoID0gZXBvY2gudG9VbnNpZ25lZCgpOwogICAgIH0KLSAg
ICAKKworICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpCisgICAgeworICAgICAg
ICBBU1NFUlQob3AoKSA9PSBGaWxsUmVzdFBhcmFtZXRlckFycmF5KTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxzaXplX3Q+KG1fb3BJbmZvKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBD
aGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5
MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhOZXdBcnJheUJ1ZmZlciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8o
TmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oRmlsbFJlc3RQYXJhbWV0
ZXJBcnJheSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBTdXBwb3J0IGZvciBh
bGxvY2F0aW9uIHNpbmtpbmcuICovXAogICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4
LDYgKzgxOCwxOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0
ZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFycmF5QXND
ZWxsLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgc2l6ZV90IG51bVBhcmFtc1RvU2tpcCwgc2l6
ZV90IG51bWJlck9mQXJndW1lbnRzKQoreworICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpT
QXJyYXkqPihhcnJheUFzQ2VsbCk7CisgICAgaWYgKG51bWJlck9mQXJndW1lbnRzIDw9IG51bVBh
cmFtc1RvU2tpcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGFycmF5U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzIC0gbnVtUGFyYW1zVG9Ta2lwOworICAgIGFycmF5LT5zZXRMZW5ndGgo
ZXhlYywgYXJyYXlTaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5U2l6ZTsg
aSsrKQorICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgYXJndW1lbnRTdGFy
dFtpICsgbnVtUGFyYW1zVG9Ta2lwXS5qc1ZhbHVlKCkpOworfQorCiBzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAko
cmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlU2NvcGVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBh
cmd1bWVudFN0YXJ0LCBpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBKU0xleGlj
YWxFbnZpcm9ubWVudCopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNs
b25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKiwgSlNG
dW5jdGlvbiosIGludDMyX3QgYXJndW1lbnRDb3VudCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJl
Z2lzdGVyKiBhcmd1bWVudFN0YXJ0LCBpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVl
KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVGaWxsUmVzdFBhcmFtZXRlckFy
cmF5KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCBzaXplX3Qg
YXJndW1lbnRzT2Zmc2V0LCBzaXplX3QgYXJndW1lbnRzQ291bnQpOwogZG91YmxlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw2ICs2NzYsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgRXhpdE9L
OgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICBjYXNlIEZpbGxSZXN0UGFyYW1l
dGVyQXJyYXk6IC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyBpcyBvay4KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2Ug
aXQgb25seSBwcmV0ZW5kcyB0byBwcm9kdWNlIGEgdmFsdWUuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTkyMDY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNSw2ICsyMzUsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAg
ICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6
IC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyBpcyBvay4KICAgICBjYXNlIE5ld1JlZ2V4cDoKICAg
ICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NDUsNiArNDQ0NSwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVDcmVhdGVD
bG9uZWRBcmd1bWVudHMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEZp
bGxSZXN0UGFyYW1ldGVyQXJyYXk6IHsKKyAgICAgICAgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVy
QXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgTmV3RnVuY3Rp
b246CiAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjE2LDYgKzUyMTYsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoTm9kZSogbm9k
ZSkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBGaWxsUmVzdFBhcmFtZXRlckFycmF5KTsK
KworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFycmF5KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBHUFJSZWcgYXJyYXlHUFIgPSBhcnJheS5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisKKyAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3Vt
ZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6bnVtYmVyIG9mIGFy
Z3VtZW50cyBvciBzaXplX3QgbWF4LgorICAgIG1faml0LnNldHVwQXJndW1lbnQoNCwgWyZdIChH
UFJSZWcgZGVzdEdQUikgeyBlbWl0R2V0TGVuZ3RoKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgZGVz
dEdQUik7IH0pOworICAgIG1faml0LnNldHVwQXJndW1lbnQoMywgWyZdIChHUFJSZWcgZGVzdEdQ
UikgeyBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKSksIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDIsIFsmXSAoR1BS
UmVnIGRlc3RHUFIpIHsgZW1pdEdldEFyZ3VtZW50U3RhcnQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBkZXN0R1BSKTsgfSk7CisgICAgbV9qaXQuc2V0dXBBcmd1bWVudCgxLCBbJl0gKEdQUlJlZyBk
ZXN0R1BSKSB7IG1faml0Lm1vdmUoYXJyYXlHUFIsIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZGVzdEdQUik7IH0pOworCisgICAgYXBwZW5kQ2FsbChvcGVy
YXRpb25DcmVhdGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KTsKKyAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOyAvLyBGSVhNRTogQ2FuIHRoaXMgZXZlbiB0aHJvdz8KKworICAgIG5vUmVzdWx0KG5v
ZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUoTm9kZSog
bm9kZSkKIHsKICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT53YXRjaHBvaW50U2V0KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMzcsNiArMjIzNyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
Q3JlYXRlU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9u
ZWRBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJy
YXkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29s
IGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVs
bChOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkyMDY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRFcG9jaChtX25vZGUtPmVwb2NoKCkpOwogICAg
ICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheToKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoaXMgaXMgb2suCisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIC8vIEZvciBub2RlcyB0aGF0IGFyZW4ndCBndWFyYW50ZWVkIHRvIGFsbG9jYXRl
LCB3ZSBzYXkgdGhhdCB0aGVpciByZXR1cm4gdmFsdWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDExICsx
MTEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAg
ICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
RHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjYXNl
IE5ld1R5cGVkQXJyYXk6CiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3RydWN0dXJlKG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlT
dHJ1Y3R1cmUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBjYXNlIFRvU3Ry
aW5nOgogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFN0cmluZ0NvbnN0cnVjdG9yOgogICAgICAg
ICAgICAgICAgICAgICByZWdpc3RlclN0cnVjdHVyZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDYgKzk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBmaWd1cmUgb3V0IHd0ZiB0aGlz
IGlzLgogICAgICAgICBjYXNlIE5ld0FycmF5OgogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNp
emU6CiAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfZGlyZWN0
X2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRz
KQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cykKKyAg
ICAgICAgREVGSU5FX09QKG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpCiAgICAgICAgIERF
RklORV9PUChvcF9jaGVja190ZHopCiAgICAgICAgIERFRklORV9PUChvcF9kZWJ1ZykKICAgICAg
ICAgREVGSU5FX09QKG9wX2RlbF9ieV9pZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDkxLDYgKzQ5MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jaGVja190ZHooSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9kZWxfYnlfaWQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5MCw2
ICsxMzkwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmcKICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9maWxsX3Jlc3Rf
cGFyYW1ldGVyX2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KTsKKyAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE2NzUsNiArMTY3
NSwxMiBAQCBfbGxpbnRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CiAgICAgc3RvcmViIDEsIEJh
c2ljQmxvY2tMb2NhdGlvbjo6bV9oYXNFeGVjdXRlZFt0MF0KICAgICBkaXNwYXRjaCgyKQogCitf
bGxpbnRfb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheToKKyAgICB0cmFjZUV4ZWN1dGlvbigp
CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSkK
KyAgICBkaXNwYXRjaCgzKQorCisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGlu
ayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNv
ZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdl
IGFzc2VydAogIyBhcyBtdWNoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmgJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDYsNiArODQ2LDExIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQmluZGluZ05vZGUoYm91
bmRQcm9wZXJ0eSwgc3RhcnQsIGVuZCwgY29udGV4dCk7CiAgICAgfQogCisgICAgUmVzdFBhcmFt
ZXRlck5vZGUqIGNyZWF0ZVJlc3RQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgc2l6
ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBSZXN0UGFyYW1ldGVyTm9kZShuYW1lLCBudW1QYXJhbWV0ZXJzVG9Ta2lwKTsK
KyAgICB9CisKICAgICB2b2lkIHNldEVuZE9mZnNldChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQog
ICAgIHsKICAgICAgICAgbm9kZS0+c2V0RW5kT2Zmc2V0KG9mZnNldCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24g
MTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjQsNiArMTAyNCwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLCBtX2JpbmRpbmdDb250ZXh0KGNvbnRleHQpCiAgICAgewogICAgIH0KKworICAg
IGlubGluZSBSZXN0UGFyYW1ldGVyTm9kZTo6UmVzdFBhcmFtZXRlck5vZGUoY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCisgICAgICAgIDogRGVzdHJ1
Y3R1cmluZ1BhdHRlcm5Ob2RlKCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBt
X251bVBhcmFtZXRlcnNUb1NraXAobnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAgICB7CisgICAgfQog
ICAgIAogICAgIGlubGluZSBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGU6OkRlc3RydWN0dXJp
bmdBc3NpZ25tZW50Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBEZXN0cnVj
dHVyaW5nUGF0dGVybk5vZGUqIGJpbmRpbmdzLCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIp
CiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NzIsNiArMTk3Miw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgdG9TdHJpbmcoU3RyaW5nQnVp
bGRlciYpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5kaW5nTm9kZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Jlc3RQYXJh
bWV0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXREaXJlY3RCaW5kaW5nKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIEV4
cHJlc3Npb25Ob2RlKikgeyByZXR1cm4gMDsgfQogICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CkBA
IC0yMDUyLDYgKzIwNTMsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFzc2lnbm1lbnRD
b250ZXh0IG1fYmluZGluZ0NvbnRleHQ7CiAgICAgfTsKIAorICAgIGNsYXNzIFJlc3RQYXJhbWV0
ZXJOb2RlIDogcHVibGljIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSB7CisgICAgcHVibGljOgor
ICAgICAgICBSZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyJiBib3VuZFByb3BlcnR5
LCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKKyAgICAgICAgYm9vbCBpc1Jlc3RQYXJh
bWV0ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdm9pZCBl
bWl0KEJ5dGVjb2RlR2VuZXJhdG9yJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFs
IHZvaWQgY29sbGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZpZXI+JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCBiaW5kVmFsdWUoQnl0ZWNvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0
b1N0cmluZyhTdHJpbmdCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgbV9uYW1lOworICAgICAgICBzaXplX3QgbV9udW1QYXJhbWV0ZXJzVG9Ta2lw
OworICAgIH07CisKICAgICBjbGFzcyBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRGVzdHJ1Y3R1cmluZ0Fz
c2lnbm1lbnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlc3RydWN0dXJpbmdQYXR0ZXJu
Tm9kZSosIEV4cHJlc3Npb25Ob2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzcsMTMgKzE1MzcsMjcgQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcgogICAgIGNvbnRleHQuYXBw
ZW5kUGFyYW1ldGVyKGxpc3QsIHBhcmFtZXRlciwgZGVmYXVsdFZhbHVlKTsKICAgICBwYXJhbWV0
ZXJDb3VudCsrOwogICAgIHdoaWxlIChjb25zdW1lKENPTU1BKSkgewotICAgICAgICBwYXJhbWV0
ZXIgPSBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0dXJlVG9QYXJh
bWV0ZXJzLCBFeHBvcnRUeXBlOjpOb3RFeHBvcnRlZCwgJmR1cGxpY2F0ZVBhcmFtZXRlciwgJmhh
c0Rlc3RydWN0dXJpbmdQYXR0ZXJuKTsKKyAgICAgICAgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIgPSBm
YWxzZTsKKyAgICAgICAgaWYgKG1hdGNoKERPVERPVERPVCkpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBsZXRzIG1ha2Ugc3VyZSBzeW50YXggaXMgY29ycmVjdCBhbmQgd2UgdGhyb3cgZXJyb3Jz
LgorICAgICAgICAgICAgLy8gaS5lLCBub3QgY2FsbGVkIGluc2lkZSBzZXR0ZXJzLCBldGMuCisg
ICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKElERU5UKSkKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogdGhyb3cg
ZXJyb3IuCisgICAgICAgICAgICBkZWNsYXJlQm91bmRQYXJhbWV0ZXIobV90b2tlbi5tX2RhdGEu
aWRlbnQpOyAvLyBGSVhNRTogYmV0dGVyIGFic3RyYWN0aW9uIGhlcmUuCisgICAgICAgICAgICBw
YXJhbWV0ZXIgPSBjb250ZXh0LmNyZWF0ZVJlc3RQYXJhbWV0ZXIoKm1fdG9rZW4ubV9kYXRhLmlk
ZW50LCBwYXJhbWV0ZXJDb3VudCk7CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBp
c1Jlc3RQYXJhbWV0ZXIgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhcmFt
ZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1Bh
cmFtZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCAmZHVwbGljYXRlUGFyYW1ldGVyLCAm
aGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOwogICAgICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIs
ICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVyIHBhdHRlcm4iKTsKICAgICAgICAgZGVmYXVsdFZhbHVl
ID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKICAg
ICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgZmFpbEZyb21EdXBsaWNhdGUoKTsKICAg
ICAgICAgY29udGV4dC5hcHBlbmRQYXJhbWV0ZXIobGlzdCwgcGFyYW1ldGVyLCBkZWZhdWx0VmFs
dWUpOwogICAgICAgICBwYXJhbWV0ZXJDb3VudCsrOworICAgICAgICBpZiAoaXNSZXN0UGFyYW1l
dGVyKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogI3VuZGVm
IGZhaWxGcm9tRHVwbGljYXRlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5
bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcg
QEAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkV4cHIsIENsYXNzRXhwciwgU3VwZXJFeHByLCBC
cmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAgICAgICAgIE5ld0V4cHIsIFByZUV4cHIs
IFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCiAgICAgICAgIENvbmRpdGlvbmFsRXhw
ciwgQXNzaWdubWVudEV4cHIsIFR5cGVvZkV4cHIsIE5ld1RhcmdldEV4cHIsCi0gICAgICAgIERl
bGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZXN0cnVjdHVyaW5nLAorICAgICAg
ICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1cmluZywgUmVz
dFBhcmFtZXRlciwKICAgICAgICAgQXJyYXlEZXN0cnVjdHVyaW5nLCBPYmplY3REZXN0cnVjdHVy
aW5nLCBTb3VyY2VFbGVtZW50c1Jlc3VsdCwKICAgICAgICAgRnVuY3Rpb25Cb2R5UmVzdWx0LCBT
cHJlYWRFeHByLCBBcmd1bWVudHNSZXN1bHQsCiAgICAgICAgIFByb3BlcnR5TGlzdFJlc3VsdCwg
QXJndW1lbnRzTGlzdFJlc3VsdCwgRWxlbWVudHNMaXN0UmVzdWx0LApAQCAtMTM5LDYgKzEzOSw3
IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIGludCBEZXN0cnVjdHVyaW5nUGF0dGVybjsKICAgICB0
eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJuIEFycmF5UGF0dGVybjsKICAgICB0eXBlZGVmIERl
c3RydWN0dXJpbmdQYXR0ZXJuIE9iamVjdFBhdHRlcm47CisgICAgdHlwZWRlZiBEZXN0cnVjdHVy
aW5nUGF0dGVybiBSZXN0UGF0dGVybjsKIAogICAgIHN0YXRpYyBjb25zdCBib29sIENyZWF0ZXNB
U1QgPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBOZWVkc0ZyZWVWYXJpYWJsZUluZm8g
PSBmYWxzZTsKQEAgLTM1Niw2ICszNTcsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIEJpbmRpbmdEZXN0cnVjdHVyaW5nOwogICAgIH0KKyAgICBSZXN0UGF0dGVybiBjcmVhdGVS
ZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImLCBzaXplX3QpCisgICAgeyAKKyAgICAgICAg
cmV0dXJuIFJlc3RQYXJhbWV0ZXI7CisgICAgfQogCiAgICAgYm9vbCBpc0JpbmRpbmdOb2RlKERl
c3RydWN0dXJpbmdQYXR0ZXJuIHBhdHRlcm4pCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxOTIw
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OTQsNCArNjk0LDIyIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIFJFVFVSTihyZXNvbHZlZFNjb3BlKTsKIH0KIAorU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpCit7CisgICAg
QkVHSU4oKTsKKyAgICAvLyBmdW5jdGlvbiBmb28oYSwgYiwgLi4uYykKKyAgICAvLyBmb28oMTAs
IDIwLCAzMCkKKyAgICBzaXplX3QgbnVtUGFyYW1zVG9Ta2lwID0gYml0d2lzZV9jYXN0PHNpemVf
dD4ocGNbMl0udS5wb2ludGVyKTsKKyAgICBzaXplX3QgbnVtQXJndW1lbnRzVG9GdW5jdGlvbiA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAobnVtQXJndW1lbnRzVG9GdW5jdGlvbiA8
PSBudW1QYXJhbXNUb1NraXApCisgICAgICAgIEVORCgpOworCisgICAgSlNBcnJheSogYXJyYXkg
PSBqc0Nhc3Q8SlNBcnJheSo+KE9QKDEpLmpzVmFsdWUoKSk7CisgICAgc2l6ZV90IGFycmF5U2l6
ZSA9IG51bUFyZ3VtZW50c1RvRnVuY3Rpb24gLSBudW1QYXJhbXNUb1NraXA7CisgICAgYXJyYXkt
PnNldExlbmd0aChleGVjLCBhcnJheVNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJyYXlTaXplOyBpKyspCisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudChpICsgbnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgRU5EKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTIsNiArMjkyLDcgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wcm9m
aWxlXwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZp
cm9ubWVudCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9zY29w
ZSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOworU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264980</attachid>
            <date>2015-11-06 16:51:28 -0800</date>
            <delta_ts>2015-11-17 15:53:45 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>30860</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw4IEBACiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSIsICJs
ZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lIiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90
b19pbmRleF9zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2xvYWRfYXJyb3dmdW5jdGlvbl90aGlzIiwgImxlbmd0aCIgOiAyIH0KKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2xvYWRfYXJyb3dmdW5jdGlvbl90aGlzIiwgImxlbmd0aCIgOiAyIH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5Iiwg
Imxlbmd0aCI6IDMgfQogICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMTky
MDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVj
b2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfamVxX251bGw6CiAgICAgY2FzZSBvcF9qbmVxX251bGw6
CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBvcF9pbmM6IHsKKyAgICBjYXNlIG9wX2luYzog
CisgICAgY2FzZSBvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5OiB7CiAgICAgICAgIGZ1bmN0
b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDYsNiArMjQ3LDcgQEAgdm9pZCBj
b21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAgICAg
c3dpdGNoIChvcGNvZGVJRCkgewogICAgIC8vIFRoZXNlIGRvbid0IGRlZmluZSBhbnl0aGluZy4K
KyAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6CiAgICAgY2FzZSBvcF9wdXRf
dG9fc2NvcGU6CiAgICAgY2FzZSBvcF9lbmQ6CiAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2Fs
bDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgxLDYgKzc4MSwxNCBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMiLCByZWdpc3Rl
ck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiJXMsICIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIHNpemVfdCBhcmd1bWVudE9mZnNldCA9IGJpdHdpc2VfY2FzdDxzaXplX3Q+KCgr
K2l0KS0+dS5wb2ludGVyKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIkFyZ3VtZW50c09mZnNl
dDogJXp1IiwgYXJndW1lbnRPZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNiArNzAsOSBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGUoCiAgICAgaWYgKG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cykKICAgICAgICAgaW5pdGlh
bGl6ZVZhcmlhYmxlKHZhcmlhYmxlKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpLCBtX2FyZ3Vt
ZW50c1JlZ2lzdGVyKTsKIAorICAgIGlmIChtX3Jlc3RQYXJhbWV0ZXIpCisgICAgICAgIG1fcmVz
dFBhcmFtZXRlci0+ZW1pdCgqdGhpcyk7CisKICAgICB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiB0ZW1wID0gbmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBn
bG9iYWxTY29wZTsKQEAgLTIxOCw3ICsyMjEsMTAgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVj
b2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAvLyBJZiB3ZSBkbyBoYXZlIGRlZmF1bHQgcGFyYW1l
dGVycywgdGhleSB3aWxsIGJlIGFsbG9jYXRlZCBpbiBhIHNlcGFyYXRlIHNjb3BlLgogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7Ci0gICAgICAgICAg
ICBpZiAocGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAgICAgICAgaWYgKHBhdHRlcm4t
PmlzUmVzdFBhcmFtZXRlcigpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
cmVzdFBhcmFtZXRlcik7CisgICAgICAgICAgICAgICAgbV9yZXN0UGFyYW1ldGVyID0gc3RhdGlj
X2Nhc3Q8UmVzdFBhcmFtZXRlck5vZGUqPihwYXR0ZXJuKTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAocGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgcGF0dGVybi0+Y29sbGVjdEJvdW5kSWRlbnRpZmllcnMoYm91bmRQYXJhbWV0
ZXJQcm9wZXJ0aWVzKTsKICAgICAgICAgfQpAQCAtMzA3LDcgKzMxMyw3IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgbV9hcmd1bWVudHNSZWdpc3Rl
ci0+cmVmKCk7CiAgICAgfQogICAgIAotICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSAmJiAhcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzKCkpIHsKKyAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RN
b2RlKCkgJiYgIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpICYmICFtX3Jl
c3RQYXJhbWV0ZXIpIHsKICAgICAgICAgLy8gSWYgd2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJh
bWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2UgU2NvcGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UK
ICAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3VtZW50cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdl
IGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMgaW50byB0aGUKICAgICAgICAgLy8gYWN0aXZhdGlv
bi4KQEAgLTM1Nyw3ICszNjMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRz
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1JlZ2lzdGVy
LT5pbmRleCgpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXBhcmFtZXRlcnMuaGFzRGVm
YXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgfSBlbHNlIGlmICghcGFyYW1ldGVycy5oYXNE
ZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgJiYgIW1fcmVzdFBhcmFtZXRlcikgewogICAgICAgICAv
LyBDcmVhdGUgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIHRoZSBub3JtYWwgd2F5LiBBbnkgb2YgdGhl
bSBjb3VsZCBiZSBjYXB0dXJlZCwgb3Igbm90LiBJZgogICAgICAgICAvLyBjYXB0dXJlZCwgbGlm
dCB0aGVtIGludG8gdGhlIHNjb3BlLiBXZSBjYW4gbm90IGRvIHRoaXMgaWYgd2UgaGF2ZSBkZWZh
dWx0IHBhcmFtZXRlciBleHByZXNzaW9ucwogICAgICAgICAvLyBiZWNhdXNlIHdoZW4gZGVmYXVs
dCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMgZXhpc3QsIHRoZXkgYmVsb25nIGluIHRoZWlyIG93biBs
ZXhpY2FsIGVudmlyb25tZW50CkBAIC0zODksNyArMzk1LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChu
ZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSB8fCBwYXJhbWV0ZXJz
Lmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkpIHsKKyAgICBpZiAobmVlZHNBcmd1bWVudHMg
JiYgKGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgfHwgcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFy
YW1ldGVyVmFsdWVzKCkgfHwgISFtX3Jlc3RQYXJhbWV0ZXIpKSB7CiAgICAgICAgIC8vIEFsbG9j
YXRlIGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgogICAgICAgICBlbWl0T3Bjb2Rl
KG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwogICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobV9hcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CkBAIC03NjQsNyArNzcwLDcg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bAogICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgd2UgaGFuZGxlIHRoaXMgY2FzZSBh
Ym92ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgp
OyBpKyspIHsKICAgICAgICAgICAgIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0dGVybiA9
IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmlu
ZGluZ05vZGUoKSkgeworICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkg
JiYgIXBhdHRlcm4tPmlzUmVzdFBhcmFtZXRlcigpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHBhcmFtZXRlclZhbHVlID0gJnJlZ2lzdGVyRm9yKHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDEgKyBpKSk7CiAgICAgICAgICAgICAgICAgcGF0dGVybi0+YmluZFZhbHVl
KCp0aGlzLCBwYXJhbWV0ZXJWYWx1ZS5nZXQoKSk7CiAgICAgICAgICAgICB9CkBAIC0zODA3LDQg
KzM4MTMsMTUgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW52YWxpZGF0ZUZvckluQwogICAg
IH0KIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVy
KFJlZ2lzdGVySUQqIHJlc3VsdCwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCit7CisgICAg
ZW1pdE5ld0FycmF5KHJlc3VsdCwgbnVsbHB0ciwgMCk7CisKKyAgICBlbWl0T3Bjb2RlKG9wX2Zp
bGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXN1
bHQtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0ZXJzVG9T
a2lwKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDIs
NiArNjAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJdGVy
YXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgY29uc3QgVGhy
b3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogICAgICAgICB2b2lkIGVtaXRJdGVyYXRvckNs
b3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc3RQYXJhbWV0ZXIoUmVnaXN0ZXJJ
RCogcmVzdWx0LCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKICAgICAgICAgYm9vbCBl
bWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZChjb25zdCBWYXJpYWJsZSYpOwogCiAgICAgICAg
IC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVuIGVtaXR0ZWQuCkBA
IC04MzIsNiArODM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gRnVuY3Rpb25W
YXJpYWJsZVR5cGUgOiB1aW50OF90IHsgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSwgR2xvYmFsRnVu
Y3Rpb25WYXJpYWJsZSB9OwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEZ1bmN0aW9uTWV0YWRh
dGFOb2RlKiwgRnVuY3Rpb25WYXJpYWJsZVR5cGU+PiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZTsK
ICAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9OworICAg
ICAgICBSZXN0UGFyYW1ldGVyTm9kZSogbV9yZXN0UGFyYW1ldGVyIHsgbnVsbHB0ciB9OwogICAg
ICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9u
IDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4OCw3ICszMzg4LDM1IEBAIHZvaWQgQmluZGlu
Z05vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXIKIHsKICAgICBpZGVudGlmaWVycy5hcHBlbmQo
bV9ib3VuZFByb3BlcnR5KTsKIH0KLSAgICAKKwordm9pZCBSZXN0UGFyYW1ldGVyTm9kZTo6Y29s
bGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycykgY29u
c3QKK3sKKyAgICBpZGVudGlmaWVycy5hcHBlbmQobV9uYW1lKTsKK30KK3ZvaWQgUmVzdFBhcmFt
ZXRlck5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKSBjb25z
dAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9Cit2b2lkIFJlc3RQYXJh
bWV0ZXJOb2RlOjp0b1N0cmluZyhTdHJpbmdCdWlsZGVyJikgY29uc3QKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQordm9pZCBSZXN0UGFyYW1ldGVyTm9kZTo6ZW1pdChC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIC8vIEZJWE1FOiB0eXBlIHByb2Zp
bGVyIHN1cHBvcnQuCisKKyAgICBWYXJpYWJsZSB2YXIgPSBnZW5lcmF0b3IudmFyaWFibGUobV9u
YW1lKTsKKyAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSB2YXIubG9jYWwoKSkgeworICAgICAg
ICBnZW5lcmF0b3IuZW1pdFJlc3RQYXJhbWV0ZXIobG9jYWwsIG1fbnVtUGFyYW1ldGVyc1RvU2tp
cCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogZXhwcmVzc2lvbiBp
bmZvIGFuZCBhbGwgdGhhdCBqYXp6LgorICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN0UGFyYW1l
dGVyQXJyYXkgPSBnZW5lcmF0b3IuZW1pdFJlc3RQYXJhbWV0ZXIoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBtX251bVBhcmFtZXRlcnNUb1NraXApOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBz
Y29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCB2YXIsIHJlc3RQYXJhbWV0ZXJBcnJh
eS5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9O
b3RUaHJvd0lmTm90Rm91bmQsIEluaXRpYWxpemF0aW9uKTsKK30KKwogUmVnaXN0ZXJJRCogU3By
ZWFkRXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
NjMsNiArMTY2MywxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT50eXBlZEFycmF5U3RydWN0dXJlKAogICAgICAgICAgICAgICAgIG5vZGUtPnR5cGVkQXJy
YXlUeXBlKCkpKTsKICAgICAgICAgYnJlYWs7CisKKyAgICAvLyBGSVhNRTogbGV0cyBob29rIGlu
dG8gc29tZSBwcm9maWxpbmcgc28gd2UgaGF2ZSBhIHJlYWwgaW5kZXhpbmcgdHlwZS4KKyAgICBj
YXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CisgICAgICAgIC8vZm9yTm9kZShub2RlKS5zZXQo
CisgICAgICAgIC8vICAgIG1fZ3JhcGgsCisgICAgICAgIC8vICAgIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdU
eXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpKTsKKyAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+cmVnRXhwU3RydWN0dXJlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzIyLDYgKzMzMjIsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3
X3JlZ2V4cCk7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0
ZXJfYXJyYXk6IHsKKyAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAg
ICAgYWRkVG9HcmFwaChGaWxsUmVzdFBhcmFtZXRlckFycmF5LCBPcEluZm8oY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUucG9pbnRlciksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2ZpbGxfcmVz
dF9wYXJhbWV0ZXJfYXJyYXkpOworICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgLy8g
PT09IEJpdHdpc2Ugb3BlcmF0aW9ucyA9PT0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTksNiArMjE5LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9n
ZXRfcGFyZW50X3Njb3BlOgogICAgIGNhc2Ugb3BfY2F0Y2g6CisgICAgY2FzZSBvcF9maWxsX3Jl
c3RfcGFyYW1ldGVyX2FycmF5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4Myw2ICs5
ODMsMTEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OiB7Cisg
ICAgICAgIHJlYWQoU3RhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBO
ZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAx
OTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNCw2ICsyMjQsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6
CiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJy
YXk6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2Nyw2ICsxMzY3LDExIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0
ZXJBcnJheTogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhh
dCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTU4LDcgKzIxNTgsMTMgQEAgc3RydWN0IE5vZGUgewogICAg
IHsKICAgICAgICAgbV9taXNjLmVwb2NoID0gZXBvY2gudG9VbnNpZ25lZCgpOwogICAgIH0KLSAg
ICAKKworICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpCisgICAgeworICAgICAg
ICBBU1NFUlQob3AoKSA9PSBGaWxsUmVzdFBhcmFtZXRlckFycmF5KTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxzaXplX3Q+KG1fb3BJbmZvKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBD
aGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5
MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhOZXdBcnJheUJ1ZmZlciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8o
TmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oRmlsbFJlc3RQYXJhbWV0
ZXJBcnJheSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBTdXBwb3J0IGZvciBh
bGxvY2F0aW9uIHNpbmtpbmcuICovXAogICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4
LDYgKzgxOCwxOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0
ZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFycmF5QXND
ZWxsLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgc2l6ZV90IG51bVBhcmFtc1RvU2tpcCwgc2l6
ZV90IG51bWJlck9mQXJndW1lbnRzKQoreworICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpT
QXJyYXkqPihhcnJheUFzQ2VsbCk7CisgICAgaWYgKG51bWJlck9mQXJndW1lbnRzIDw9IG51bVBh
cmFtc1RvU2tpcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGFycmF5U2l6ZSA9IG51
bWJlck9mQXJndW1lbnRzIC0gbnVtUGFyYW1zVG9Ta2lwOworICAgIGFycmF5LT5zZXRMZW5ndGgo
ZXhlYywgYXJyYXlTaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5U2l6ZTsg
aSsrKQorICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgYXJndW1lbnRTdGFy
dFtpICsgbnVtUGFyYW1zVG9Ta2lwXS5qc1ZhbHVlKCkpOworfQorCiBzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAko
cmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlU2NvcGVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBh
cmd1bWVudFN0YXJ0LCBpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBKU0xleGlj
YWxFbnZpcm9ubWVudCopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNs
b25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKiwgSlNG
dW5jdGlvbiosIGludDMyX3QgYXJndW1lbnRDb3VudCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJl
Z2lzdGVyKiBhcmd1bWVudFN0YXJ0LCBpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVl
KTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVGaWxsUmVzdFBhcmFtZXRlckFy
cmF5KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCBzaXplX3Qg
YXJndW1lbnRzT2Zmc2V0LCBzaXplX3QgYXJndW1lbnRzQ291bnQpOwogZG91YmxlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw2ICs2NzYsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgRXhpdE9L
OgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICBjYXNlIEZpbGxSZXN0UGFyYW1l
dGVyQXJyYXk6IC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyBpcyBvay4KICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2Ug
aXQgb25seSBwcmV0ZW5kcyB0byBwcm9kdWNlIGEgdmFsdWUuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTkyMDY3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNSw2ICsyMzUsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAg
ICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6
IC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyBpcyBvay4KICAgICBjYXNlIE5ld1JlZ2V4cDoKICAg
ICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NDUsNiArNDQ0NSwxMCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVDcmVhdGVD
bG9uZWRBcmd1bWVudHMobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEZp
bGxSZXN0UGFyYW1ldGVyQXJyYXk6IHsKKyAgICAgICAgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVy
QXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgTmV3RnVuY3Rp
b246CiAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjE2LDYgKzUyMTYsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoTm9kZSogbm9k
ZSkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBGaWxsUmVzdFBhcmFtZXRlckFycmF5KTsK
KworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFycmF5KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBHUFJSZWcgYXJyYXlHUFIgPSBhcnJheS5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisKKyAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3Vt
ZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6bnVtYmVyIG9mIGFy
Z3VtZW50cyBvciBzaXplX3QgbWF4LgorICAgIG1faml0LnNldHVwQXJndW1lbnQoNCwgWyZdIChH
UFJSZWcgZGVzdEdQUikgeyBlbWl0R2V0TGVuZ3RoKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgZGVz
dEdQUik7IH0pOworICAgIG1faml0LnNldHVwQXJndW1lbnQoMywgWyZdIChHUFJSZWcgZGVzdEdQ
UikgeyBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKSksIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDIsIFsmXSAoR1BS
UmVnIGRlc3RHUFIpIHsgZW1pdEdldEFyZ3VtZW50U3RhcnQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBkZXN0R1BSKTsgfSk7CisgICAgbV9qaXQuc2V0dXBBcmd1bWVudCgxLCBbJl0gKEdQUlJlZyBk
ZXN0R1BSKSB7IG1faml0Lm1vdmUoYXJyYXlHUFIsIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZGVzdEdQUik7IH0pOworCisgICAgYXBwZW5kQ2FsbChvcGVy
YXRpb25DcmVhdGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KTsKKyAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOyAvLyBGSVhNRTogQ2FuIHRoaXMgZXZlbiB0aHJvdz8KKworICAgIG5vUmVzdWx0KG5v
ZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUoTm9kZSog
bm9kZSkKIHsKICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT53YXRjaHBvaW50U2V0KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMzcsNiArMjIzNyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
Q3JlYXRlU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9u
ZWRBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJy
YXkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29s
IGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVs
bChOb2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkyMDY3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw2ICszMjIsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRFcG9jaChtX25vZGUtPmVwb2NoKCkpOwogICAg
ICAgICAgICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheToKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoaXMgaXMgb2suCisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIC8vIEZvciBub2RlcyB0aGF0IGFyZW4ndCBndWFyYW50ZWVkIHRvIGFsbG9jYXRl
LCB3ZSBzYXkgdGhhdCB0aGVpciByZXR1cm4gdmFsdWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMp
CiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKQorICAg
ICAgICBERUZJTkVfT1Aob3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSkKICAgICAgICAgREVG
SU5FX09QKG9wX2NoZWNrX3RkeikKICAgICAgICAgREVGSU5FX09QKG9wX2RlYnVnKQogICAgICAg
ICBERUZJTkVfT1Aob3BfZGVsX2J5X2lkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OTEsNiArNDkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkoSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkwLDYg
KzEzOTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZwogICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2ZpbGxfcmVzdF9w
YXJhbWV0ZXJfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20JKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTY3NSw2ICsxNjc1
LDEyIEBAIF9sbGludF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKICAgICBzdG9yZWIgMSwgQmFz
aWNCbG9ja0xvY2F0aW9uOjptX2hhc0V4ZWN1dGVkW3QwXQogICAgIGRpc3BhdGNoKDIpCiAKK19s
bGludF9vcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KQor
ICAgIGRpc3BhdGNoKDMpCisKKwogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5r
IGV2ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29k
ZXMgc2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2Ug
YXNzZXJ0CiAjIGFzIG11Y2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0Niw2ICs4NDYsMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaW5kaW5nTm9kZShib3Vu
ZFByb3BlcnR5LCBzdGFydCwgZW5kLCBjb250ZXh0KTsKICAgICB9CiAKKyAgICBSZXN0UGFyYW1l
dGVyTm9kZSogY3JlYXRlUmVzdFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBzaXpl
X3QgbnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgKG1fcGFy
c2VyQXJlbmEpIFJlc3RQYXJhbWV0ZXJOb2RlKG5hbWUsIG51bVBhcmFtZXRlcnNUb1NraXApOwor
ICAgIH0KKwogICAgIHZvaWQgc2V0RW5kT2Zmc2V0KE5vZGUqIG5vZGUsIGludCBvZmZzZXQpCiAg
ICAgewogICAgICAgICBub2RlLT5zZXRFbmRPZmZzZXQob2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAx
OTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAyNCw2ICsxMDI0LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAsIG1fYmluZGluZ0NvbnRleHQoY29udGV4dCkKICAgICB7CiAgICAgfQorCisgICAg
aW5saW5lIFJlc3RQYXJhbWV0ZXJOb2RlOjpSZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAgICAgICAgOiBEZXN0cnVj
dHVyaW5nUGF0dGVybk5vZGUoKQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgICAgICAsIG1f
bnVtUGFyYW1ldGVyc1RvU2tpcChudW1QYXJhbWV0ZXJzVG9Ta2lwKQorICAgIHsKKyAgICB9CiAg
ICAgCiAgICAgaW5saW5lIERlc3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZTo6RGVzdHJ1Y3R1cmlu
Z0Fzc2lnbm1lbnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIERlc3RydWN0
dXJpbmdQYXR0ZXJuTm9kZSogYmluZGluZ3MsIEV4cHJlc3Npb25Ob2RlKiBpbml0aWFsaXplcikK
ICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3Miw2ICsxOTcyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0b1N0cmluZyhTdHJpbmdCdWls
ZGVyJikgY29uc3QgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JpbmRpbmdOb2RlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUmVzdFBhcmFt
ZXRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdERpcmVjdEJpbmRpbmcoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiwgRXhw
cmVzc2lvbk5vZGUqKSB7IHJldHVybiAwOyB9CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKQEAg
LTIwNTIsNiArMjA1MywyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQXNzaWdubWVudENv
bnRleHQgbV9iaW5kaW5nQ29udGV4dDsKICAgICB9OwogCisgICAgY2xhc3MgUmVzdFBhcmFtZXRl
ck5vZGUgOiBwdWJsaWMgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFJlc3RQYXJhbWV0ZXJOb2RlKGNvbnN0IElkZW50aWZpZXImIGJvdW5kUHJvcGVydHks
IHNpemVfdCBudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKworICAgICAgICBib29sIGlzUmVzdFBhcmFt
ZXRlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB2b2lkIGVt
aXQoQnl0ZWNvZGVHZW5lcmF0b3ImKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0Qm91bmRJZGVudGlmaWVycyhWZWN0b3I8SWRlbnRpZmllcj4mKSBjb25zdCBv
dmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRv
U3RyaW5nKFN0cmluZ0J1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKworICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyJiBtX25hbWU7CisgICAgICAgIHNpemVfdCBtX251bVBhcmFtZXRlcnNUb1NraXA7
CisgICAgfTsKKwogICAgIGNsYXNzIERlc3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBEZXN0cnVjdHVyaW5nQXNz
aWdubWVudE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5O
b2RlKiwgRXhwcmVzc2lvbk5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlci5jcHAJKHJldmlzaW9uIDE5MjA2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzNywxMyArMTUzNywyNyBAQCB0
ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyCiAgICAgY29udGV4dC5hcHBl
bmRQYXJhbWV0ZXIobGlzdCwgcGFyYW1ldGVyLCBkZWZhdWx0VmFsdWUpOwogICAgIHBhcmFtZXRl
ckNvdW50Kys7CiAgICAgd2hpbGUgKGNvbnN1bWUoQ09NTUEpKSB7Ci0gICAgICAgIHBhcmFtZXRl
ciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFt
ZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCAmZHVwbGljYXRlUGFyYW1ldGVyLCAmaGFz
RGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOworICAgICAgICBib29sIGlzUmVzdFBhcmFtZXRlciA9IGZh
bHNlOworICAgICAgICBpZiAobWF0Y2goRE9URE9URE9UKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IGxldHMgbWFrZSBzdXJlIHN5bnRheCBpcyBjb3JyZWN0IGFuZCB3ZSB0aHJvdyBlcnJvcnMu
CisgICAgICAgICAgICAvLyBpLmUsIG5vdCBjYWxsZWQgaW5zaWRlIHNldHRlcnMsIGV0Yy4KKyAg
ICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2goSURFTlQpKQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiB0aHJvdyBl
cnJvci4KKyAgICAgICAgICAgIGRlY2xhcmVCb3VuZFBhcmFtZXRlcihtX3Rva2VuLm1fZGF0YS5p
ZGVudCk7IC8vIEZJWE1FOiBiZXR0ZXIgYWJzdHJhY3Rpb24gaGVyZS4KKyAgICAgICAgICAgIHBh
cmFtZXRlciA9IGNvbnRleHQuY3JlYXRlUmVzdFBhcmFtZXRlcigqbV90b2tlbi5tX2RhdGEuaWRl
bnQsIHBhcmFtZXRlckNvdW50KTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGlz
UmVzdFBhcmFtZXRlciA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGFyYW1l
dGVyID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFy
YW1ldGVycywgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZo
YXNEZXN0cnVjdHVyaW5nUGF0dGVybik7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRlciwg
IkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXIgcGF0dGVybiIpOwogICAgICAgICBkZWZhdWx0VmFsdWUg
PSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQpOwogICAg
ICAgICBwcm9wYWdhdGVFcnJvcigpOwogICAgICAgICBmYWlsRnJvbUR1cGxpY2F0ZSgpOwogICAg
ICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJhbWV0ZXIsIGRlZmF1bHRWYWx1
ZSk7CiAgICAgICAgIHBhcmFtZXRlckNvdW50Kys7CisgICAgICAgIGlmIChpc1Jlc3RQYXJhbWV0
ZXIpCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiAjdW5kZWYg
ZmFpbEZyb21EdXBsaWNhdGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAxOTIwNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBA
QCBwdWJsaWM6CiAgICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBTdXBlckV4cHIsIEJy
YWNrZXRFeHByLCBEb3RFeHByLCBDYWxsRXhwciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhwciwg
UG9zdEV4cHIsIFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKICAgICAgICAgQ29uZGl0aW9uYWxFeHBy
LCBBc3NpZ25tZW50RXhwciwgVHlwZW9mRXhwciwgTmV3VGFyZ2V0RXhwciwKLSAgICAgICAgRGVs
ZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhwciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsCisgICAgICAg
IERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZXN0cnVjdHVyaW5nLCBSZXN0
UGFyYW1ldGVyLAogICAgICAgICBBcnJheURlc3RydWN0dXJpbmcsIE9iamVjdERlc3RydWN0dXJp
bmcsIFNvdXJjZUVsZW1lbnRzUmVzdWx0LAogICAgICAgICBGdW5jdGlvbkJvZHlSZXN1bHQsIFNw
cmVhZEV4cHIsIEFyZ3VtZW50c1Jlc3VsdCwKICAgICAgICAgUHJvcGVydHlMaXN0UmVzdWx0LCBB
cmd1bWVudHNMaXN0UmVzdWx0LCBFbGVtZW50c0xpc3RSZXN1bHQsCkBAIC0xMzksNiArMTM5LDcg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgaW50IERlc3RydWN0dXJpbmdQYXR0ZXJuOwogICAgIHR5
cGVkZWYgRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gQXJyYXlQYXR0ZXJuOwogICAgIHR5cGVkZWYgRGVz
dHJ1Y3R1cmluZ1BhdHRlcm4gT2JqZWN0UGF0dGVybjsKKyAgICB0eXBlZGVmIERlc3RydWN0dXJp
bmdQYXR0ZXJuIFJlc3RQYXR0ZXJuOwogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FT
VCA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdCBib29sIE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9
IGZhbHNlOwpAQCAtMzU2LDYgKzM1NywxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gQmluZGluZ0Rlc3RydWN0dXJpbmc7CiAgICAgfQorICAgIFJlc3RQYXR0ZXJuIGNyZWF0ZVJl
c3RQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYsIHNpemVfdCkKKyAgICB7IAorICAgICAgICBy
ZXR1cm4gUmVzdFBhcmFtZXRlcjsKKyAgICB9CiAKICAgICBib29sIGlzQmluZGluZ05vZGUoRGVz
dHJ1Y3R1cmluZ1BhdHRlcm4gcGF0dGVybikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE5MjA2
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5NCw0ICs2OTQsMjIgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgUkVUVVJOKHJlc29sdmVkU2NvcGUpOwogfQogCitTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSkKK3sKKyAgICBC
RUdJTigpOworICAgIC8vIGZ1bmN0aW9uIGZvbyhhLCBiLCAuLi5jKQorICAgIC8vIGZvbygxMCwg
MjAsIDMwKQorICAgIHNpemVfdCBudW1QYXJhbXNUb1NraXAgPSBiaXR3aXNlX2Nhc3Q8c2l6ZV90
PihwY1syXS51LnBvaW50ZXIpOworICAgIHNpemVfdCBudW1Bcmd1bWVudHNUb0Z1bmN0aW9uID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlmIChudW1Bcmd1bWVudHNUb0Z1bmN0aW9uIDw9
IG51bVBhcmFtc1RvU2tpcCkKKyAgICAgICAgRU5EKCk7CisKKyAgICBKU0FycmF5KiBhcnJheSA9
IGpzQ2FzdDxKU0FycmF5Kj4oT1AoMSkuanNWYWx1ZSgpKTsKKyAgICBzaXplX3QgYXJyYXlTaXpl
ID0gbnVtQXJndW1lbnRzVG9GdW5jdGlvbiAtIG51bVBhcmFtc1RvU2tpcDsKKyAgICBhcnJheS0+
c2V0TGVuZ3RoKGV4ZWMsIGFycmF5U2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
cnJheVNpemU7IGkrKykKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkgKyBudW1QYXJhbXNUb1NraXApKTsKKyAgICBFTkQoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTkyMDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5Miw2ICsyOTIsNyBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Byb2Zp
bGVfCiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHVzaF93aXRoX3Njb3Bl
KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOwog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265714</attachid>
            <date>2015-11-17 15:53:45 -0800</date>
            <delta_ts>2015-11-17 18:29:22 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>41646</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw4IEBACiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUiLCAibGVu
Z3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX2luZGV4X3N0cmluZyIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbG9hZF9hcnJvd2Z1
bmN0aW9uX3RoaXMiLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2Fzc2VydCIsICJsZW5ndGgiIDogMyB9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9hc3Nl
cnQiLCAibGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2ZpbGxfcmVz
dF9wYXJhbWV0ZXJfYXJyYXkiLCAibGVuZ3RoIjogMyB9CiAgICAgICAgIF0KICAgICB9LAogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9qZXFfbnVsbDoKICAg
ICBjYXNlIG9wX2puZXFfbnVsbDoKICAgICBjYXNlIG9wX2RlYzoKLSAgICBjYXNlIG9wX2luYzog
eworICAgIGNhc2Ugb3BfaW5jOiAKKyAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJy
YXk6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwg
aW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0
Nyw2ICsyNDgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rp
b24tPnUub3Bjb2RlKTsKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgLy8gVGhlc2UgZG9u
J3QgZGVmaW5lIGFueXRoaW5nLgorICAgIGNhc2Ugb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJh
eToKICAgICBjYXNlIG9wX3B1dF90b19zY29wZToKICAgICBjYXNlIG9wX2VuZDoKICAgICBjYXNl
IG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODEsNiAr
NzgxLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheTog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJmaWxsX3Jlc3RfcGFy
YW1ldGVyX2FycmF5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50T2Zmc2V0ID0gYml0
d2lzZV9jYXN0PHNpemVfdD4oKCsraXQpLT51LnBvaW50ZXIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiQXJndW1lbnRzT2Zmc2V0OiAlenUiLCBhcmd1bWVudE9mZnNldCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE5MjUy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw5IEBAIFBhcnNlckVycm9yIEJ5dGVj
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJndW1l
bnRzKQogICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0ZXIpOwogCisgICAgaWYgKG1fcmVzdFBhcmFt
ZXRlcikKKyAgICAgICAgbV9yZXN0UGFyYW1ldGVyLT5lbWl0KCp0aGlzKTsKKwogICAgIHsKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGdsb2JhbFNjb3BlOwpAQCAtMjIwLDYgKzIyMywxMCBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgICAgICBhdXRvIHBh
dHRlcm4gPSBwYXJhbWV0ZXJzLmF0KGkpLmZpcnN0OwogICAgICAgICAgICAgaWYgKHBhdHRlcm4t
PmlzQmluZGluZ05vZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChwYXR0ZXJuLT5pc1Jlc3RQYXJhbWV0ZXIoKSkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3Jlc3RQYXJhbWV0ZXIpOworICAgICAgICAgICAgICAgIG1fcmVzdFBhcmFt
ZXRlciA9IHN0YXRpY19jYXN0PFJlc3RQYXJhbWV0ZXJOb2RlKj4ocGF0dGVybik7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBwYXR0ZXJuLT5jb2xsZWN0Qm91bmRJZGVudGlmaWVycyhib3Vu
ZFBhcmFtZXRlclByb3BlcnRpZXMpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzA3LDcgKzMxNCw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgbV9h
cmd1bWVudHNSZWdpc3Rlci0+cmVmKCk7CiAgICAgfQogICAgIAotICAgIGlmIChuZWVkc0FyZ3Vt
ZW50cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSAmJiAhcGFyYW1ldGVycy5oYXNEZWZh
dWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsKKyAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgIWNvZGVC
bG9jay0+aXNTdHJpY3RNb2RlKCkgJiYgIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZh
bHVlcygpICYmICFtX3Jlc3RQYXJhbWV0ZXIpIHsKICAgICAgICAgLy8gSWYgd2UgY2FwdHVyZWQg
YW55IGZvcm1hbCBwYXJhbWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2UgU2NvcGVkQXJndW1lbnRz
LiBPdGhlcndpc2Ugd2UKICAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3VtZW50cy4gV2l0aCBTY29w
ZWRBcmd1bWVudHMsIHdlIGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMgaW50byB0aGUKICAgICAg
ICAgLy8gYWN0aXZhdGlvbi4KQEAgLTM1Nyw3ICszNjQsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9k
aXJlY3RfYXJndW1lbnRzKTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2Fy
Z3VtZW50c1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXBh
cmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgfSBlbHNlIGlmICgh
cGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgJiYgIW1fcmVzdFBhcmFtZXRl
cikgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIHRoZSBub3JtYWwg
d2F5LiBBbnkgb2YgdGhlbSBjb3VsZCBiZSBjYXB0dXJlZCwgb3Igbm90LiBJZgogICAgICAgICAv
LyBjYXB0dXJlZCwgbGlmdCB0aGVtIGludG8gdGhlIHNjb3BlLiBXZSBjYW4gbm90IGRvIHRoaXMg
aWYgd2UgaGF2ZSBkZWZhdWx0IHBhcmFtZXRlciBleHByZXNzaW9ucwogICAgICAgICAvLyBiZWNh
dXNlIHdoZW4gZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbnMgZXhpc3QsIHRoZXkgYmVsb25n
IGluIHRoZWlyIG93biBsZXhpY2FsIGVudmlyb25tZW50CkBAIC0zODksNyArMzk2LDcgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSB8fCBwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkpIHsKKyAgICBpZiAo
bmVlZHNBcmd1bWVudHMgJiYgKGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgfHwgcGFyYW1ldGVy
cy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkgfHwgISFtX3Jlc3RQYXJhbWV0ZXIpKSB7CiAg
ICAgICAgIC8vIEFsbG9jYXRlIGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgogICAg
ICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CkBA
IC03NjQsNyArNzcxLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1
bAogICAgICAgICAvLyBJZiB3ZSBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgd2UgaGFu
ZGxlIHRoaXMgY2FzZSBhYm92ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBh
cmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIERlc3RydWN0dXJpbmdQYXR0ZXJu
Tm9kZSogcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAo
IXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSkgeworICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5p
c0JpbmRpbmdOb2RlKCkgJiYgIXBhdHRlcm4tPmlzUmVzdFBhcmFtZXRlcigpKSB7CiAgICAgICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBhcmFtZXRlclZhbHVlID0gJnJlZ2lzdGVyRm9y
KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSk7CiAgICAgICAgICAgICAgICAgcGF0
dGVybi0+YmluZFZhbHVlKCp0aGlzLCBwYXJhbWV0ZXJWYWx1ZS5nZXQoKSk7CiAgICAgICAgICAg
ICB9CkBAIC0zODEzLDQgKzM4MjAsMTUgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW52YWxp
ZGF0ZUZvckluQwogICAgIH0KIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZXN0UGFyYW1ldGVyKFJlZ2lzdGVySUQqIHJlc3VsdCwgc2l6ZV90IG51bVBhcmFtZXRlcnNU
b1NraXApCit7CisgICAgZW1pdE5ld0FycmF5KHJlc3VsdCwgbnVsbHB0ciwgMCk7CisKKyAgICBl
bWl0T3Bjb2RlKG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyZXN1bHQtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChu
dW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OTgsNiArNTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVy
YXRvciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogICAgICAgICB2b2lk
IGVtaXRJdGVyYXRvckNsb3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVF
eHByZXNzaW9uRGF0YSogbm9kZSk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc3RQYXJh
bWV0ZXIoUmVnaXN0ZXJJRCogcmVzdWx0LCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisK
ICAgICAgICAgYm9vbCBlbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZChjb25zdCBWYXJpYWJs
ZSYpOwogCiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBi
ZWVuIGVtaXR0ZWQuCkBAIC04MjgsNiArODMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGVudW0gRnVuY3Rpb25WYXJpYWJsZVR5cGUgOiB1aW50OF90IHsgTm9ybWFsRnVuY3Rpb25WYXJp
YWJsZSwgR2xvYmFsRnVuY3Rpb25WYXJpYWJsZSB9OwogICAgICAgICBWZWN0b3I8c3RkOjpwYWly
PEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgRnVuY3Rpb25WYXJpYWJsZVR5cGU+PiBtX2Z1bmN0aW9u
c1RvSW5pdGlhbGl6ZTsKICAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMg
eyBmYWxzZSB9OworICAgICAgICBSZXN0UGFyYW1ldGVyTm9kZSogbV9yZXN0UGFyYW1ldGVyIHsg
bnVsbHB0ciB9OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdl
czsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1Niw2ICszNDU2LDM2
IEBAIHZvaWQgQXNzaWdubWVudEVsZW1lbnROb2RlOjp0b1N0cmluZyhTdHIKICAgICAgICAgYnVp
bGRlci5hcHBlbmQoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Fzc2lnbm1lbnRUYXJnZXQp
LT5pZGVudGlmaWVyKCkuc3RyaW5nKCkpOwogfQogCisKK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6
OmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMp
IGNvbnN0Cit7CisgICAgaWRlbnRpZmllcnMuYXBwZW5kKG1fbmFtZSk7Cit9Cit2b2lkIFJlc3RQ
YXJhbWV0ZXJOb2RlOjpiaW5kVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKikg
Y29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQordm9pZCBSZXN0
UGFyYW1ldGVyTm9kZTo6dG9TdHJpbmcoU3RyaW5nQnVpbGRlciYpIGNvbnN0Cit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OmVt
aXQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKK3sKKyAgICAvLyBGSVhNRTogdHlwZSBw
cm9maWxlciBzdXBwb3J0LgorCisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxl
KG1fbmFtZSk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKGxvY2FsLCBtX251bVBhcmFtZXRlcnNU
b1NraXApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IGV4cHJlc3Np
b24gaW5mbyBhbmQgYWxsIHRoYXQgamF6ei4KKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdFBh
cmFtZXRlckFycmF5ID0gZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgbV9udW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAg
IGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCByZXN0UGFyYW1ldGVy
QXJyYXkuZ2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6
IERvTm90VGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbik7Cit9CisKKwogUmVnaXN0ZXJJ
RCogU3ByZWFkRXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NjMsNyArMTY2Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCiAgICAgICAgICAgICAgICAgbm9kZS0+dHlw
ZWRBcnJheVR5cGUoKSkpOwogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgY2Fz
ZSBOZXdSZWdleHA6CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgp
KTsKICAgICAgICAgYnJlYWs7CkBAIC0yNTA4LDYgKzI1MDgsMTAgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoK
ICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisKICAgICBjYXNlIENoZWNrOiB7CiAgICAgICAgIC8v
IFNpbXBsaWZ5IG91dCBjaGVja3MgdGhhdCBkb24ndCBhY3R1YWxseSBkbyBjaGVja2luZy4KICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIyLDYgKzMzMjIsMTIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9H
cmFwaChOZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6IHsKKyAgICAgICAgICAg
IG5vdGljZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGaWxsUmVzdFBh
cmFtZXRlckFycmF5LCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUucG9pbnRlciksIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgLy8gPT09IEJpdHdpc2Ugb3BlcmF0aW9ucyA9
PT0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNiArMjE5LDcgQEAgQ2FwYWJp
bGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfY3JlYXRlX2xl
eGljYWxfZW52aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgogICAgIGNh
c2Ugb3BfY2F0Y2g6CisgICAgY2FzZSBvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5OgogICAg
ICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfcHV0X3RvX3Nj
b3BlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4Myw2ICs5ODMsMTEgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
Y2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OiB7CisgICAgICAgIHJlYWQoU3RhY2spOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdS
ZWdleHA6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQs
NyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRT
dGFjazoKICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6CiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50
czoKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM2Nyw2ICsxMzY3LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCisgICAgICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheTogeworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhl
c2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQg
aGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTU4
LDcgKzIxNTgsMTMgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgbV9taXNjLmVwb2No
ID0gZXBvY2gudG9VbnNpZ25lZCgpOwogICAgIH0KLSAgICAKKworICAgIHNpemVfdCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCgpCisgICAgeworICAgICAgICBBU1NFUlQob3AoKSA9PSBGaWxsUmVz
dFBhcmFtZXRlckFycmF5KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxzaXplX3Q+KG1f
b3BJbmZvKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0
KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdBcnJheUJ1
ZmZlciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3Vs
dEpTKSBcCisgICAgbWFjcm8oRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIFwKICAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAog
ICAgIG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4LDYgKzgxOCwxOCBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBKU0NlbGwqIGFycmF5QXNDZWxsLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwg
c2l6ZV90IG51bVBhcmFtc1RvU2tpcCwgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKQoreworICAg
IEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihhcnJheUFzQ2VsbCk7CisgICAgaWYg
KG51bWJlck9mQXJndW1lbnRzIDw9IG51bVBhcmFtc1RvU2tpcCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc2l6ZV90IGFycmF5U2l6ZSA9IG51bWJlck9mQXJndW1lbnRzIC0gbnVtUGFyYW1zVG9T
a2lwOworICAgIGFycmF5LT5zZXRMZW5ndGgoZXhlYywgYXJyYXlTaXplKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKQorICAgICAgICBhcnJheS0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgYXJndW1lbnRTdGFydFtpICsgbnVtUGFyYW1zVG9Ta2lwXS5qc1ZhbHVl
KCkpOworfQorCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2Jq
ZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGlyCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlU2NvcGVkQXJndW1lbnRzKEV4ZWNTdGF0
ZSosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCBpbnQzMl90IGxlbmd0aCwg
SlNGdW5jdGlvbiogY2FsbGVlLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0
YXRlKiwgSW5saW5lQ2FsbEZyYW1lKiwgSlNGdW5jdGlvbiosIGludDMyX3QgYXJndW1lbnRDb3Vu
dCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCBpbnQzMl90
IGxlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25GaWxsUmVzdFBhcmFtZXRlckFycmF5KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiBh
cmd1bWVudFN0YXJ0LCBzaXplX3QgYXJndW1lbnRzT2Zmc2V0LCBzaXplX3QgYXJndW1lbnRzQ291
bnQpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBp
bnQzMl90KSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmpl
Y3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRF
Uk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY3Niw2ICs2NzYsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
CiAgICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAg
ICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IG9ubHkgcHJl
dGVuZHMgdG8gcHJvZHVjZSBhIHZhbHVlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIs
NiArMzIyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAg
IGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bDoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJB
cnJheToKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQzLDYgKzQ0NDMsMTAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxl
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAg
Y2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OiB7CisgICAgICAgIGNvbXBpbGVGaWxsUmVzdFBh
cmFtZXRlckFycmF5KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIE5l
d0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3QXJyb3dGdW5jdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxOTI1
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIxNiw2ICs1MjE2LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KE5v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gRmlsbFJlc3RQYXJhbWV0ZXJB
cnJheSk7CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcnJheSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgR1BSUmVnIGFycmF5R1BSID0gYXJyYXkuZ3ByKCk7CisKKyAgICBmbHVzaFJl
Z2lzdGVycygpOworCisgICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMsIDE6SlNDZWxsKiBhcnJheSwg
Mjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwLCA0Om51bWJl
ciBvZiBhcmd1bWVudHMgb3Igc2l6ZV90IG1heC4KKyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDQs
IFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgZW1pdEdldExlbmd0aChub2RlLT5vcmlnaW4uc2VtYW50
aWMsIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDMsIFsmXSAoR1BSUmVn
IGRlc3RHUFIpIHsgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCkpLCBkZXN0R1BSKTsgfSk7CisgICAgbV9qaXQuc2V0dXBBcmd1bWVudCgyLCBb
Jl0gKEdQUlJlZyBkZXN0R1BSKSB7IGVtaXRHZXRBcmd1bWVudFN0YXJ0KG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgZGVzdEdQUik7IH0pOworICAgIG1faml0LnNldHVwQXJndW1lbnQoMSwgWyZdIChH
UFJSZWcgZGVzdEdQUikgeyBtX2ppdC5tb3ZlKGFycmF5R1BSLCBkZXN0R1BSKTsgfSk7CisgICAg
bV9qaXQuc2V0dXBBcmd1bWVudCgwLCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGRlc3RHUFIpOyB9KTsKKworICAgIGFwcGVuZENh
bGwob3BlcmF0aW9uRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSk7CisgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsgLy8gRklYTUU6IENhbiB0aGlzIGV2ZW4gdGhyb3c/CisKKyAgICBub1Jlc3VsdChu
b2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5vZGUq
IG5vZGUpCiB7CiAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+d2F0Y2hwb2ludFNldCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjM3LDYgKzIyMzcsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xv
bmVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVGaWxsUmVzdFBhcmFtZXRlckFy
cmF5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKik7CiAgICAgYm9v
bCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51
bGwoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJp
ZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MjUyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNiArMzIyLDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgbV9ub2RlLT5waGkoKS0+c2V0RXBvY2gobV9ub2RlLT5lcG9jaCgpKTsKICAg
ICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IG1ha2Ugc3VyZSB0aGlzIGlzIG9rLgorICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICAvLyBGb3Igbm9kZXMgdGhhdCBhcmVuJ3QgZ3VhcmFudGVlZCB0byBhbGxvY2F0
ZSwgd2Ugc2F5IHRoYXQgdGhlaXIgcmV0dXJuIHZhbHVlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTI1MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMCw2ICsyMTAsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogCiAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJCeUlkOgogICAgIGNhc2UgUHV0R2V0dGVy
QnlWYWw6CiAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDoKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1l
dGVyQXJyYXk6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiw4IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhaX0pJVE9wZXJhdGlv
bl9FR0MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKICAg
ICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FSlosIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBp
bnQ2NCwgaW50MzIpKSBcCiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRVNKc3MsIGZ1bmN0aW9u
VHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklUT3Bl
cmF0aW9uX0VDUlNTLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnRQ
dHIsIGludDY0LCBpbnQzMikpCisgICAgICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAxOkpTQ2Vs
bCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBhcmd1bWVudHMgdG8gc2tp
cCwgNDpudW1iZXIgb2YgYXJndW1lbnRzIG9yIHNpemVfdCBtYXguCiAgICAgCiBjbGFzcyBJbnRy
aW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1vblZhbHVlcyB7CiBwdWJsaWM6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxOCw2ICs5MTgsOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKICAgICAgICAgICAgIGNvbXBpbGVDaGVja1dh
dGNoZG9nVGltZXIoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbGxSZXN0
UGFyYW1ldGVyQXJyYXk6CisgICAgICAgICAgICBjb21waWxlRmlsbFJlc3RQYXJhbWV0ZXJBcnJh
eSgpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAg
ICAgICAgIGNhc2UgTG9vcEhpbnQ6CkBAIC0zNTA4LDYgKzM1MTEsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CisKKyAgICB2b2lkIGNv
bXBpbGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KCkKKyAgICB7CisgICAgICAgIC8vIEFyZ3VtZW50
czogMDpleGVjLCAxOkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBv
ZiBhcmd1bWVudHMgdG8gc2tpcCwgNDpudW1iZXIgb2YgYXJndW1lbnRzIG9yIHNpemVfdCBtYXgu
CisgICAgICAgIC8vIEZJWE1FOiB0aGVyZSBhcmUgc29tZSBpbnN0YW5jZXMgd2hlcmUgdGhlIG51
bWJlciBvZiBnZXRBcmd1bWVudHNMZW5ndGggaXMgY29uc3RhbnQsIGFuZCB0aGUgbnVtYmVyIG9m
IGFyZ3VtZW50cworICAgICAgICAvLyB0byBza2lwIGlzIGFsc28gY29uc3RhbnQuIFdlIGNhbiBk
byBzb21lIG1hdGggb24gdGhvc2UgY29uc3RhbnRzIGFuZCBzZWUgaWYgY2FsbGluZyBvcGVyYXRp
b25DcmVhdGVGaWxsUmVzdFBhcmFtZXRlckFycmF5CisgICAgICAgIC8vIHdvdWxkIGp1c3QgYmUg
YSBub29wIGFuZCB3ZSBjYW4gc2tpcCBjb21waWxpbmcgaXQuCisgICAgICAgIHZtQ2FsbCgKKyAg
ICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GaWxsUmVzdFBhcmFtZXRlckFycmF5
KSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBn
ZXRBcmd1bWVudHNTdGFydCgpLCBtX291dC5jb25zdEludDY0KG1fbm9kZS0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKSksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlKTsKKyAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlTmV3T2JqZWN0KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw2ICsyMTEsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfZGly
ZWN0X2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9zY29wZWRfYXJndW1l
bnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cykK
KyAgICAgICAgREVGSU5FX09QKG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpCiAgICAgICAg
IERFRklORV9PUChvcF9jaGVja190ZHopCiAgICAgICAgIERFRklORV9PUChvcF9hc3NlcnQpCiAg
ICAgICAgIERFRklORV9PUChvcF9kZWJ1ZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDkxLDYgKzQ5MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRfb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jaGVja190ZHooSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydChJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsx
Mzk5LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmcKICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9maWxsX3Jlc3RfcGFy
YW1ldGVyX2FycmF5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTky
NTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxOSw2ICsyMTksNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9u
X0VWbSkoRXhlY1N0YXRlKiwgVk0qKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9aKShpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRUNSU1MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVy
Kiwgc2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRP
cGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQ
X0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiB0eXBlZGVmIGNoYXIqIEpJ
VF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQ2xpKShFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTY3
NSw2ICsxNjc1LDEyIEBAIF9sbGludF9vcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQogICAgIGRpc3BhdGNoKDMpCiAKK19sbGlu
dF9vcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAg
ICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KQorICAg
IGRpc3BhdGNoKDMpCisKKwogIyBMYXN0bHksIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBsaW5rIGV2
ZW4gdGhvdWdoIHdlIGRvbid0IHN1cHBvcnQgYWxsIG9wY29kZXMuCiAjIFRoZXNlIG9wY29kZXMg
c2hvdWxkIG5ldmVyIGFyaXNlIHdoZW4gdXNpbmcgTExJbnQgb3IgZWl0aGVyIEpJVC4gV2UgYXNz
ZXJ0CiAjIGFzIG11Y2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1
aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1
aWxkZXIuaAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2Miw2ICs4NjIsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBBc3NpZ25tZW50RWxlbWVudE5v
ZGUoYXNzaWdubWVudFRhcmdldCwgc3RhcnQsIGVuZCk7CiAgICAgfQogCisgICAgUmVzdFBhcmFt
ZXRlck5vZGUqIGNyZWF0ZVJlc3RQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgc2l6
ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBSZXN0UGFyYW1ldGVyTm9kZShuYW1lLCBudW1QYXJhbWV0ZXJzVG9Ta2lwKTsK
KyAgICB9CisKICAgICB2b2lkIHNldEVuZE9mZnNldChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQog
ICAgIHsKICAgICAgICAgbm9kZS0+c2V0RW5kT2Zmc2V0KG9mZnNldCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24g
MTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjksNiArMTAyOSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB7CiAgICAgfQogCisgICAgaW5saW5lIFJlc3RQYXJhbWV0ZXJOb2RlOjpSZXN0UGFyYW1l
dGVyTm9kZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tp
cCkKKyAgICAgICAgOiBEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUoKQorICAgICAgICAsIG1fbmFt
ZShuYW1lKQorICAgICAgICAsIG1fbnVtUGFyYW1ldGVyc1RvU2tpcChudW1QYXJhbWV0ZXJzVG9T
a2lwKQorICAgIHsKKyAgICB9CisKICAgICBpbmxpbmUgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnRO
b2RlOjpEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBiaW5kaW5ncywgRXhwcmVzc2lvbk5v
ZGUqIGluaXRpYWxpemVyKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAg
ICAgICAsIG1fYmluZGluZ3MoYmluZGluZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NzMsNiArMTk3Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgdG9TdHJpbmcoU3RyaW5nQnVpbGRlciYpIGNv
bnN0ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5kaW5nTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRE
aXJlY3RCaW5kaW5nKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIEV4cHJlc3Npb25O
b2RlKikgeyByZXR1cm4gMDsgfQogICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CkBAIC0yMDcxLDYg
KzIwNzIsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2Fz
c2lnbm1lbnRUYXJnZXQ7CiAgICAgfTsKIAorICAgIGNsYXNzIFJlc3RQYXJhbWV0ZXJOb2RlIDog
cHVibGljIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBS
ZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyJiBib3VuZFByb3BlcnR5LCBzaXplX3Qg
bnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKKyAgICAgICAgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdm9pZCBlbWl0KEJ5dGVj
b2RlR2VuZXJhdG9yJik7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgY29s
bGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZpZXI+JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBiaW5kVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKikgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0b1N0cmluZyhT
dHJpbmdCdWlsZGVyJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgbV9uYW1lOworICAgICAgICBzaXplX3QgbV9udW1QYXJhbWV0ZXJzVG9Ta2lwOworICAgIH07
CisKICAgICBjbGFzcyBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnRO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4
cHJlc3Npb25Ob2RlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Nyw2ICs2NjcsMjkgQEAgdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4
ZXJUeXBlPgorYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6ZGVjbGFyZVJlc3RPckRlc3RydWN0dXJp
bmdQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgbmFtZSkKK3sKKyAgICBhdXRvIGJpbmRpbmdS
ZXN1bHQgPSBkZWNsYXJlQm91bmRQYXJhbWV0ZXIoJm5hbWUpOworICAgIGlmIChiaW5kaW5nUmVz
dWx0ID09IFNjb3BlOjpTdHJpY3RCaW5kaW5nRmFpbGVkICYmIHN0cmljdE1vZGUoKSkgeworICAg
ICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNFdmFsT3JBcmd1bWVudHMoJm5hbWUpLCAiQ2Fubm90
IGRlc3RydWN0dXJlIHRvIGEgcGFyYW1ldGVyIG5hbWUgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBz
dHJpY3QgbW9kZSIpOworICAgICAgICBpZiAobV9sYXN0RnVuY3Rpb25OYW1lICYmIG5hbWUgPT0g
Km1fbGFzdEZ1bmN0aW9uTmFtZSkKKyAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRl
c3RydWN0dXJlIHRvICciLCBuYW1lLmltcGwoKSwgIicgYXMgaXQgc2hhZG93cyB0aGUgbmFtZSBv
ZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uIik7CisgICAgICAgIHNlbWFudGljRmFpbHVyZUR1ZVRv
S2V5d29yZCgiYm91bmQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgaWYgKGhhc0RlY2xhcmVk
UGFyYW1ldGVyKG5hbWUpKQorICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVzdHJ1
Y3R1cmUgdG8gJyIsIG5hbWUuaW1wbCgpLCAiJyBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlY2xh
cmVkIik7CisgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGJpbmQgdG8gYSBwYXJhbWV0ZXIg
bmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOworICAgIH0KKyAgICBp
ZiAoYmluZGluZ1Jlc3VsdCA9PSBTY29wZTo6QmluZGluZ0ZhaWxlZCkgeworICAgICAgICBzZW1h
bnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoImJvdW5kIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAg
IGlmIChoYXNEZWNsYXJlZFBhcmFtZXRlcihuYW1lKSkKKyAgICAgICAgICAgIHNlbWFudGljRmFp
bCgiQ2Fubm90IGRlc3RydWN0dXJlIHRvICciLCBuYW1lLmltcGwoKSwgIicgYXMgaXQgaGFzIGFs
cmVhZHkgYmVlbiBkZWNsYXJlZCIpOworICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZXN0
cnVjdHVyZSB0byBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIik7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+
CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBQ
YXJzZXI8TGV4ZXJUeXBlPjo6Y3JlYXRlQmluZGluZ1BhdHRlcm4oVHJlZUJ1aWxkZXImIGNvbnRl
eHQsIERlc3RydWN0dXJpbmdLaW5kIGtpbmQsIEV4cG9ydFR5cGUgZXhwb3J0VHlwZSwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgaW50IGRlcHRoLCBKU1Rva2VuIHRva2VuLCBBc3NpZ25tZW50Q29u
dGV4dCBiaW5kaW5nQ29udGV4dCwgY29uc3QgSWRlbnRpZmllcioqIGR1cGxpY2F0ZUlkZW50aWZp
ZXIpCiB7CiAgICAgQVNTRVJUKCFuYW1lLmlzTnVsbCgpKTsKQEAgLTY4NiwyMiArNzA5LDggQEAg
dGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICB9CiAgICAg
fSBlbHNlIGlmIChraW5kID09IERlc3RydWN0dXJlVG9QYXJhbWV0ZXJzKSB7CiAgICAgICAgIGlm
IChkZXB0aCkgewotICAgICAgICAgICAgYXV0byBiaW5kaW5nUmVzdWx0ID0gZGVjbGFyZUJvdW5k
UGFyYW1ldGVyKCZuYW1lKTsKLSAgICAgICAgICAgIGlmIChiaW5kaW5nUmVzdWx0ID09IFNjb3Bl
OjpTdHJpY3RCaW5kaW5nRmFpbGVkICYmIHN0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgICAg
IHNlbWFudGljRmFpbElmVHJ1ZShpc0V2YWxPckFyZ3VtZW50cygmbmFtZSksICJDYW5ub3QgZGVz
dHJ1Y3R1cmUgdG8gYSBwYXJhbWV0ZXIgbmFtZSAnIiwgbmFtZS5pbXBsKCksICInIGluIHN0cmlj
dCBtb2RlIik7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbGFzdEZ1bmN0aW9uTmFtZSAmJiBuYW1l
ID09ICptX2xhc3RGdW5jdGlvbk5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFp
bCgiQ2Fubm90IGRlc3RydWN0dXJlIHRvICciLCBuYW1lLmltcGwoKSwgIicgYXMgaXQgc2hhZG93
cyB0aGUgbmFtZSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uIik7Ci0gICAgICAgICAgICAgICAg
c2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKCJib3VuZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICAgICAgICAgIGlmIChoYXNEZWNsYXJlZFBhcmFtZXRlcihuYW1lKSkKLSAgICAgICAgICAg
ICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVzdHJ1Y3R1cmUgdG8gJyIsIG5hbWUuaW1w
bCgpLCAiJyBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIik7Ci0gICAgICAgICAgICAg
ICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgYmluZCB0byBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFt
ZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoYmluZGluZ1Jlc3VsdCA9PSBTY29wZTo6QmluZGluZ0ZhaWxlZCkgewotICAgICAgICAg
ICAgICAgIHNlbWFudGljRmFpbHVyZUR1ZVRvS2V5d29yZCgiYm91bmQgcGFyYW1ldGVyIG5hbWUi
KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRQYXJhbWV0ZXIobmFtZSkpCi0gICAg
ICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlc3RydWN0dXJlIHRvICciLCBu
YW1lLmltcGwoKSwgIicgYXMgaXQgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCIpOwotICAgICAg
ICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlc3RydWN0dXJlIHRvIGEgcGFyYW1ldGVy
IG5hbWVkICciLCBuYW1lLmltcGwoKSwgIiciKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRlY2xhcmVSZXN0T3JEZXN0cnVjdHVyaW5nUGFyYW1ldGVyKG5hbWUpOworICAgICAgICAgICAg
cHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERlY2xhcmF0
aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJlc3VsdCA9IGRlY2xhcmVQYXJhbWV0ZXIoJm5hbWUp
OwogICAgICAgICAgICAgaWYgKChkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0
OjpJbnZhbGlkU3RyaWN0TW9kZSkgJiYgc3RyaWN0TW9kZSgpKSB7CkBAIC0xNTUzLDMyICsxNTYy
LDQ1IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVN0YXRlbWUKIHRlbXBsYXRl
IDx0eXBlbmFtZSBMZXhlclR5cGU+CiB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wg
UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyhUcmVlQnVpbGRlciYgY29u
dGV4dCwgVHJlZUZvcm1hbFBhcmFtZXRlckxpc3QgbGlzdCwgdW5zaWduZWQmIHBhcmFtZXRlckNv
dW50KQogewotI2RlZmluZSBmYWlsRnJvbUR1cGxpY2F0ZSgpIFwKKyNkZWZpbmUgZmFpbElmRHVw
bGljYXRlSWZWaW9sYXRpb24oKSBcCiAgICAgaWYgKGR1cGxpY2F0ZVBhcmFtZXRlcikge1wKICAg
ICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGRlZmF1bHRWYWx1ZSwgIkR1cGxpY2F0ZSBwYXJhbWV0
ZXIgJyIsIGR1cGxpY2F0ZVBhcmFtZXRlci0+aW1wbCgpLCAiJyBub3QgYWxsb3dlZCBpbiBmdW5j
dGlvbiB3aXRoIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyIpO1wKICAgICAgICAgc2VtYW50aWNG
YWlsSWZUcnVlKGhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuLCAiRHVwbGljYXRlIHBhcmFtZXRlciAn
IiwgZHVwbGljYXRlUGFyYW1ldGVyLT5pbXBsKCksICInIG5vdCBhbGxvd2VkIGluIGZ1bmN0aW9u
IHdpdGggZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJzIik7XAogICAgIH0KIAotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGR1cGxpY2F0ZVBhcmFtZXRlciA9IG51bGxwdHI7CiAgICAgYm9vbCBoYXNEZXN0
cnVjdHVyaW5nUGF0dGVybiA9IGZhbHNlOwotICAgIGF1dG8gcGFyYW1ldGVyID0gcGFyc2VEZXN0
cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywgRXhwb3J0
VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVjdHVyaW5n
UGF0dGVybik7Ci0gICAgZmFpbElmRmFsc2UocGFyYW1ldGVyLCAiQ2Fubm90IHBhcnNlIHBhcmFt
ZXRlciBwYXR0ZXJuIik7Ci0gICAgYXV0byBkZWZhdWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1
ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQpOwotICAgIHByb3BhZ2F0ZUVycm9yKCk7
Ci0gICAgZmFpbEZyb21EdXBsaWNhdGUoKTsKLSAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihs
aXN0LCBwYXJhbWV0ZXIsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgcGFyYW1ldGVyQ291bnQrKzsKLSAg
ICB3aGlsZSAoY29uc3VtZShDT01NQSkpIHsKLSAgICAgICAgcGFyYW1ldGVyID0gcGFyc2VEZXN0
cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywgRXhwb3J0
VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVjdHVyaW5n
UGF0dGVybik7CisgICAgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIgPSBmYWxzZTsKKyAgICBkbyB7Cisg
ICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGR1cGxpY2F0ZVBhcmFtZXRlciA9IG51bGxwdHI7Cisg
ICAgICAgIFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXJhbWV0ZXIgPSAwOworICAgICAgICBU
cmVlRXhwcmVzc2lvbiBkZWZhdWx0VmFsdWUgPSAwOworCisgICAgICAgIGlmIChtYXRjaChET1RE
T1RET1QpKSB7CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICBmYWlsSWZGYWxzZSht
YXRjaFNwZWNJZGVudGlmaWVyKCksICJSZXN0IHBhcmFtZXRlciAnLi4uJyBzaG91bGQgYmUgZm9s
bG93ZWQgYnkgYSB2YXJpYWJsZSBpZGVudGlmaWVyIik7CisgICAgICAgICAgICBkZWNsYXJlUmVz
dE9yRGVzdHJ1Y3R1cmluZ1BhcmFtZXRlcigqbV90b2tlbi5tX2RhdGEuaWRlbnQpOworICAgICAg
ICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKKyAgICAgICAgICAgIHBhcmFtZXRlciA9IGNvbnRleHQu
Y3JlYXRlUmVzdFBhcmFtZXRlcigqbV90b2tlbi5tX2RhdGEuaWRlbnQsIHBhcmFtZXRlckNvdW50
KTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWUobWF0Y2goQ09N
TUEpLCAiUmVzdCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBsYXN0IHBhcmFtZXRlciBpbiBhIGZ1
bmN0aW9uIGRlY2xhcmF0aW9uIik7IC8vIExldCdzIGhhdmUgYSBnb29kIGVycm9yIG1lc3NhZ2Ug
Zm9yIHRoaXMgY29tbW9uIGNhc2UuCisgICAgICAgICAgICBpc1Jlc3RQYXJhbWV0ZXIgPSB0cnVl
OworICAgICAgICAgICAgaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gPSB0cnVlOworICAgICAgICAg
ICAgLy8gRklYTUU6CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGFyYW1ldGVyID0gcGFy
c2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywg
RXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVj
dHVyaW5nUGF0dGVybik7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRlciwgIkNhbm5vdCBw
YXJzZSBwYXJhbWV0ZXIgcGF0dGVybiIpOwotICAgICAgICBkZWZhdWx0VmFsdWUgPSBwYXJzZURl
ZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQpOworICAgICAgICBpZiAo
IWlzUmVzdFBhcmFtZXRlcikKKyAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHBhcnNlRGVmYXVs
dFZhbHVlRm9yRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCk7CiAgICAgICAgIHByb3BhZ2F0
ZUVycm9yKCk7Ci0gICAgICAgIGZhaWxGcm9tRHVwbGljYXRlKCk7CisgICAgICAgIGZhaWxJZkR1
cGxpY2F0ZUlmVmlvbGF0aW9uKCk7CiAgICAgICAgIGNvbnRleHQuYXBwZW5kUGFyYW1ldGVyKGxp
c3QsIHBhcmFtZXRlciwgZGVmYXVsdFZhbHVlKTsKICAgICAgICAgcGFyYW1ldGVyQ291bnQrKzsK
LSAgICB9CisgICAgICAgIGlmIChpc1Jlc3RQYXJhbWV0ZXIpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9IHdoaWxlIChjb25zdW1lKENPTU1BKSAmJiAhaXNSZXN0UGFyYW1ldGVyKTsKKwogICAg
IHJldHVybiB0cnVlOwotI3VuZGVmIGZhaWxGcm9tRHVwbGljYXRlCisjdW5kZWYgZmFpbElmRHVw
bGljYXRlSWZWaW9sYXRpb24KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMTkyNTI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA1NSw2ICsxMDU1LDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2Rl
KCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmlzVmFsaWRTdHJpY3RNb2RlKCk7IH0KICAgICBE
ZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyZVBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPmRlY2xhcmVQYXJhbWV0ZXIoaWRlbnQpOyB9
CiAgICAgU2NvcGU6OkJpbmRpbmdSZXN1bHQgZGVjbGFyZUJvdW5kUGFyYW1ldGVyKGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50KSB7IHJldHVybiBjdXJyZW50U2NvcGUoKS0+ZGVjbGFyZUJvdW5kUGFy
YW1ldGVyKGlkZW50KTsgfQorICAgIGJvb2wgZGVjbGFyZVJlc3RPckRlc3RydWN0dXJpbmdQYXJh
bWV0ZXIoY29uc3QgSWRlbnRpZmllciYpOworCiAgICAgYm9vbCBicmVha0lzVmFsaWQoKQogICAg
IHsKICAgICAgICAgU2NvcGVSZWYgY3VycmVudCA9IGN1cnJlbnRTY29wZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE5
MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgRnVuY3Rpb25F
eHByLCBDbGFzc0V4cHIsIFN1cGVyRXhwciwgQnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxFeHBy
LAogICAgICAgICBOZXdFeHByLCBQcmVFeHByLCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlF
eHByLAogICAgICAgICBDb25kaXRpb25hbEV4cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBlb2ZFeHBy
LCBOZXdUYXJnZXRFeHByLAotICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBC
aW5kaW5nRGVzdHJ1Y3R1cmluZywKKyAgICAgICAgRGVsZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhw
ciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsIFJlc3RQYXJhbWV0ZXIsCiAgICAgICAgIEFycmF5RGVz
dHJ1Y3R1cmluZywgT2JqZWN0RGVzdHJ1Y3R1cmluZywgU291cmNlRWxlbWVudHNSZXN1bHQsCiAg
ICAgICAgIEZ1bmN0aW9uQm9keVJlc3VsdCwgU3ByZWFkRXhwciwgQXJndW1lbnRzUmVzdWx0LAog
ICAgICAgICBQcm9wZXJ0eUxpc3RSZXN1bHQsIEFyZ3VtZW50c0xpc3RSZXN1bHQsIEVsZW1lbnRz
TGlzdFJlc3VsdCwKQEAgLTEzNSw2ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBpbnQg
RGVzdHJ1Y3R1cmluZ1BhdHRlcm47CiAgICAgdHlwZWRlZiBEZXN0cnVjdHVyaW5nUGF0dGVybiBB
cnJheVBhdHRlcm47CiAgICAgdHlwZWRlZiBEZXN0cnVjdHVyaW5nUGF0dGVybiBPYmplY3RQYXR0
ZXJuOworICAgIHR5cGVkZWYgRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gUmVzdFBhdHRlcm47CiAKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBDcmVhdGVzQVNUID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0
IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZvID0gZmFsc2U7CkBAIC0zNTAsNiArMzUxLDEwIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBCaW5kaW5nRGVzdHJ1Y3R1cmluZzsKICAg
ICB9CisgICAgUmVzdFBhdHRlcm4gY3JlYXRlUmVzdFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVy
Jiwgc2l6ZV90KQorICAgIHsgCisgICAgICAgIHJldHVybiBSZXN0UGFyYW1ldGVyOworICAgIH0K
IAogICAgIGJvb2wgaXNCaW5kaW5nTm9kZShEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuKQog
ICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDQgKzcw
MSwyMiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBSRVRV
Uk4ocmVzb2x2ZWRTY29wZSk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9maWxsX3Jl
c3RfcGFyYW1ldGVyX2FycmF5KQoreworICAgIEJFR0lOKCk7CisgICAgLy8gZnVuY3Rpb24gZm9v
KGEsIGIsIC4uLmMpCisgICAgLy8gZm9vKDEwLCAyMCwgMzApCisgICAgc2l6ZV90IG51bVBhcmFt
c1RvU2tpcCA9IGJpdHdpc2VfY2FzdDxzaXplX3Q+KHBjWzJdLnUucG9pbnRlcik7CisgICAgc2l6
ZV90IG51bUFyZ3VtZW50c1RvRnVuY3Rpb24gPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAg
aWYgKG51bUFyZ3VtZW50c1RvRnVuY3Rpb24gPD0gbnVtUGFyYW1zVG9Ta2lwKQorICAgICAgICBF
TkQoKTsKKworICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihPUCgxKS5qc1Zh
bHVlKCkpOworICAgIHNpemVfdCBhcnJheVNpemUgPSBudW1Bcmd1bWVudHNUb0Z1bmN0aW9uIC0g
bnVtUGFyYW1zVG9Ta2lwOworICAgIGFycmF5LT5zZXRMZW5ndGgoZXhlYywgYXJyYXlTaXplKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKQorICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSArIG51
bVBhcmFtc1RvU2tpcCkpOworICAgIEVORCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkzLDYgKzI5Myw3IEBAIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfYXNzZXJ0KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwogU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2NvcGUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
ZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWJhc2lj
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jl
c3QtcGFyYW1ldGVyLWJhc2ljcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYmFzaWNzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjEgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYik7CisK
K2Z1bmN0aW9uIGZvbyhhLCAuLi5iKSB7CisgICAgcmV0dXJuIGI7ICAgIAorfQorbm9JbmxpbmUo
Zm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IGExID0g
Zm9vKDEwLCAyMCk7CisgICAgYXNzZXJ0KGExIGluc3RhbmNlb2YgQXJyYXkpOworICAgIGFzc2Vy
dChhMS5sZW5ndGggPT09IDEpOworICAgIGFzc2VydChhMVswXSA9PT0gMjApOworCisgICAgbGV0
IGEyID0gZm9vKDEwKTsKKyAgICBhc3NlcnQoYTIgaW5zdGFuY2VvZiBBcnJheSk7CisgICAgYXNz
ZXJ0KGEyLmxlbmd0aCA9PT0gMCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxpbmVkLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBh
cmFtZXRlci1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKK2Z1bmN0
aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJh
ZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLnJl
c3QpIHsKKyAgICByZXR1cm4gcmVzdDsKK30KKworZnVuY3Rpb24gZm9vKGEsIGIsIGMpIHsKKyAg
ICByZXR1cm4gYmFyKGEsIGIsIGMpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHJlc3VsdCA9IGZvbygxMCwgMjAsIDMwKTsK
KyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9
PT0gMTApOworICAgIGFzc2VydChyZXN1bHRbMV0gPT09IDIwKTsKKyAgICBhc3NlcnQocmVzdWx0
WzJdID09PSAzMCk7Cit9CisKK2Z1bmN0aW9uIGJheiguLi5yZXN0KSB7CisgICAgcmV0dXJuIHJl
c3Q7Cit9CitmdW5jdGlvbiBqYXooYSwgYiwgYykgeworICAgIHJldHVybiBiYXouYXBwbHkobnVs
bCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7Cit9Citub0lubGluZShq
YXopOworCitmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwOyBpKyspIHsKKyAgICBsZXQgcmVzdWx0
ID0gamF6KDEwLCAyMCwgMzApOworICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAg
ICBhc3NlcnQocmVzdWx0WzBdID09PSAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gMjAp
OworICAgIGFzc2VydChyZXN1bHRbMl0gPT09IDMwKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265726</attachid>
            <date>2015-11-17 18:29:22 -0800</date>
            <delta_ts>2015-11-18 18:33:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>49102</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw4IEBACiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUiLCAibGVu
Z3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX2luZGV4X3N0cmluZyIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbG9hZF9hcnJvd2Z1
bmN0aW9uX3RoaXMiLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2Fzc2VydCIsICJsZW5ndGgiIDogMyB9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9hc3Nl
cnQiLCAibGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2ZpbGxfcmVz
dF9wYXJhbWV0ZXJfYXJyYXkiLCAibGVuZ3RoIjogMyB9CiAgICAgICAgIF0KICAgICB9LAogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOCBAQCB2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9qZXFfbnVsbDoKICAg
ICBjYXNlIG9wX2puZXFfbnVsbDoKICAgICBjYXNlIG9wX2RlYzoKLSAgICBjYXNlIG9wX2luYzog
eworICAgIGNhc2Ugb3BfaW5jOiAKKyAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJy
YXk6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwg
aW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0
Nyw2ICsyNDgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rp
b24tPnUub3Bjb2RlKTsKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgLy8gVGhlc2UgZG9u
J3QgZGVmaW5lIGFueXRoaW5nLgorICAgIGNhc2Ugb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJh
eToKICAgICBjYXNlIG9wX3B1dF90b19zY29wZToKICAgICBjYXNlIG9wX2VuZDoKICAgICBjYXNl
IG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODEsNiAr
NzgxLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBvdXQu
cHJpbnRmKCIlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheTog
eworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJmaWxsX3Jlc3RfcGFy
YW1ldGVyX2FycmF5Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgcmVnaXN0ZXJO
YW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50T2Zmc2V0ID0gYml0
d2lzZV9jYXN0PHNpemVfdD4oKCsraXQpLT51LnBvaW50ZXIpOworICAgICAgICAgICAgb3V0LnBy
aW50ZigiQXJndW1lbnRzT2Zmc2V0OiAlenUiLCBhcmd1bWVudE9mZnNldCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9
ICgrK2l0KS0+dS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE5MjUy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw5IEBAIFBhcnNlckVycm9yIEJ5dGVj
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBpZiAobV9uZWVkVG9Jbml0aWFsaXplQXJndW1l
bnRzKQogICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVydHlOYW1lcygp
LmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0ZXIpOwogCisgICAgaWYgKG1fcmVzdFBhcmFt
ZXRlcikKKyAgICAgICAgbV9yZXN0UGFyYW1ldGVyLT5lbWl0KCp0aGlzKTsKKwogICAgIHsKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGdsb2JhbFNjb3BlOwpAQCAtMjcyLDggKzI3NSwxNCBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLy8gbmVlZGluZyBkZXN0
cnVjdHVyaW5nIGFyZSBub3RlZC4KICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhwYXJhbWV0ZXJzLnNp
emUoKSArIDEpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKICAgICBtX3RoaXNSZWdpc3Rl
ci5zZXRJbmRleChpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsgLy8gdGhpcwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKQotICAg
ICAgICBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcGF0dGVybiA9IHBh
cmFtZXRlcnMuYXQoaSkuZmlyc3Q7CisgICAgICAgIGlmIChwYXR0ZXJuLT5pc1Jlc3RQYXJhbWV0
ZXIoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVzdFBhcmFtZXRlcik7Cisg
ICAgICAgICAgICBtX3Jlc3RQYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxSZXN0UGFyYW1ldGVyTm9k
ZSo+KHBhdHRlcm4pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluaXRpYWxpemVOZXh0
UGFyYW1ldGVyKCk7CisgICAgfQogICAgIAogICAgIC8vIEZpZ3VyZSBvdXQgc29tZSBpbnRlcmVz
dGluZyBmYWN0cyBhYm91dCBvdXIgYXJndW1lbnRzLgogICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1
bWVudEJ5TmFtZSA9IGZhbHNlOwpAQCAtMzA3LDcgKzMxNiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgbV9hcmd1bWVudHNSZWdpc3Rlci0+cmVm
KCk7CiAgICAgfQogICAgIAotICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSAmJiAhcGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkp
IHsKKyAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkg
JiYgIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpICYmICFtX3Jlc3RQYXJh
bWV0ZXIpIHsKICAgICAgICAgLy8gSWYgd2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJhbWV0ZXIg
YnkgbmFtZSwgdGhlbiB3ZSB1c2UgU2NvcGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UKICAgICAg
ICAgLy8gdXNlIERpcmVjdEFyZ3VtZW50cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdlIGxpZnQg
YWxsIG9mIG91ciBhcmd1bWVudHMgaW50byB0aGUKICAgICAgICAgLy8gYWN0aXZhdGlvbi4KQEAg
LTM4OSw3ICszOTgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5lZWRzQXJndW1lbnRzICYmIChjb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpIHx8IHBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZh
bHVlcygpKSkgeworICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJsb2NrLT5pc1N0cmlj
dE1vZGUoKSB8fCBwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSB8fCAhIW1f
cmVzdFBhcmFtZXRlcikpIHsKICAgICAgICAgLy8gQWxsb2NhdGUgYW4gb3V0LW9mLWJhbmRzIGFy
Z3VtZW50cyBvYmplY3QuCiAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRlX291dF9vZl9iYW5k
X2FyZ3VtZW50cyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtX2FyZ3VtZW50c1Jl
Z2lzdGVyLT5pbmRleCgpKTsKQEAgLTcwNyw2ICs3MTYsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjppbml0aWFsaXplRGVmYXVsCiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wID0g
bmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0
ZXJzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBzdGQ6OnBhaXI8RGVzdHJ1Y3R1cmluZ1Bh
dHRlcm5Ob2RlKiwgRXhwcmVzc2lvbk5vZGUqPiBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzLmF0KGkp
OworICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5maXJzdC0+aXNSZXN0UGFyYW1ldGVyKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSArIGkpKTsKICAgICAgICAgICAgIGVtaXRNb3ZlKHRlbXAuZ2V0KCksIHBhcmFtZXRlclZhbHVl
LmdldCgpKTsKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuc2Vjb25kKSB7CkBAIC03NjQsNyAr
Nzc1LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1bAogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcywgd2UgaGFuZGxlIHRoaXMg
Y2FzZSBhYm92ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMu
c2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogcGF0
dGVybiA9IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7Ci0gICAgICAgICAgICBpZiAoIXBhdHRlcm4t
PmlzQmluZGluZ05vZGUoKSkgeworICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdO
b2RlKCkgJiYgIXBhdHRlcm4tPmlzUmVzdFBhcmFtZXRlcigpKSB7CiAgICAgICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHBhcmFtZXRlclZhbHVlID0gJnJlZ2lzdGVyRm9yKHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSk7CiAgICAgICAgICAgICAgICAgcGF0dGVybi0+Ymlu
ZFZhbHVlKCp0aGlzLCBwYXJhbWV0ZXJWYWx1ZS5nZXQoKSk7CiAgICAgICAgICAgICB9CkBAIC0z
ODEzLDQgKzM4MjQsMTUgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW52YWxpZGF0ZUZvcklu
QwogICAgIH0KIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXN0UGFy
YW1ldGVyKFJlZ2lzdGVySUQqIHJlc3VsdCwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCit7
CisgICAgZW1pdE5ld0FycmF5KHJlc3VsdCwgbnVsbHB0ciwgMCk7CisKKyAgICBlbWl0T3Bjb2Rl
KG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChyZXN1bHQtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0
ZXJzVG9Ta2lwKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OTgsNiArNTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgY29u
c3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogICAgICAgICB2b2lkIGVtaXRJdGVy
YXRvckNsb3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9u
RGF0YSogbm9kZSk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc3RQYXJhbWV0ZXIoUmVn
aXN0ZXJJRCogcmVzdWx0LCBzaXplX3QgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKICAgICAgICAg
Ym9vbCBlbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZChjb25zdCBWYXJpYWJsZSYpOwogCiAg
ICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVuIGVtaXR0
ZWQuCkBAIC04MjgsNiArODMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gRnVu
Y3Rpb25WYXJpYWJsZVR5cGUgOiB1aW50OF90IHsgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSwgR2xv
YmFsRnVuY3Rpb25WYXJpYWJsZSB9OwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEZ1bmN0aW9u
TWV0YWRhdGFOb2RlKiwgRnVuY3Rpb25WYXJpYWJsZVR5cGU+PiBtX2Z1bmN0aW9uc1RvSW5pdGlh
bGl6ZTsKICAgICAgICAgYm9vbCBtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9
OworICAgICAgICBSZXN0UGFyYW1ldGVyTm9kZSogbV9yZXN0UGFyYW1ldGVyIHsgbnVsbHB0ciB9
OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAg
ICAgU2VnbWVudGVkVmVjdG9yPFRyeURhdGEsIDg+IG1fdHJ5RGF0YTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJl
dmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ1Niw2ICszNDU2LDM2IEBAIHZvaWQg
QXNzaWdubWVudEVsZW1lbnROb2RlOjp0b1N0cmluZyhTdHIKICAgICAgICAgYnVpbGRlci5hcHBl
bmQoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Fzc2lnbm1lbnRUYXJnZXQpLT5pZGVudGlm
aWVyKCkuc3RyaW5nKCkpOwogfQogCisKK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OmNvbGxlY3RC
b3VuZElkZW50aWZpZXJzKFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMpIGNvbnN0Cit7
CisgICAgaWRlbnRpZmllcnMuYXBwZW5kKG1fbmFtZSk7Cit9Cit2b2lkIFJlc3RQYXJhbWV0ZXJO
b2RlOjpiaW5kVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKikgY29uc3QKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQordm9pZCBSZXN0UGFyYW1ldGVy
Tm9kZTo6dG9TdHJpbmcoU3RyaW5nQnVpbGRlciYpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OmVtaXQoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvcikKK3sKKyAgICAvLyBGSVhNRTogdHlwZSBwcm9maWxlciBz
dXBwb3J0LgorCisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFtZSk7
CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKGxvY2FsLCBtX251bVBhcmFtZXRlcnNUb1NraXApOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IGV4cHJlc3Npb24gaW5mbyBh
bmQgYWxsIHRoYXQgamF6ei4KKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdFBhcmFtZXRlckFy
cmF5ID0gZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgbV9udW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOworICAgIGdlbmVyYXRv
ci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCByZXN0UGFyYW1ldGVyQXJyYXkuZ2V0
KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhy
b3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbik7Cit9CisKKwogUmVnaXN0ZXJJRCogU3ByZWFk
RXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NjMs
NyArMTY2Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykt
PnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCiAgICAgICAgICAgICAgICAgbm9kZS0+dHlwZWRBcnJheVR5
cGUoKSkpOwogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgY2FzZSBOZXdSZWdl
eHA6CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAgICAg
ICAgYnJlYWs7CkBAIC0yNTA4LDYgKzI1MDgsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVybjoKICAgICAgICAg
YnJlYWs7CiAKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisKICAgICBjYXNlIENoZWNrOiB7CiAgICAgICAgIC8vIFNpbXBsaWZ5
IG91dCBjaGVja3MgdGhhdCBkb24ndCBhY3R1YWxseSBkbyBjaGVja2luZy4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIyLDYgKzMzMjIsMTIgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChOZXdS
ZWdleHAsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgIH0KKworICAgICAgICBj
YXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6IHsKKyAgICAgICAgICAgIG5vdGljZUFy
Z3VtZW50c1VzZSgpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGaWxsUmVzdFBhcmFtZXRlckFy
cmF5LCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUucG9pbnRlciksIGdldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgLy8gPT09IEJpdHdpc2Ugb3BlcmF0aW9ucyA9PT0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2
aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNiArMjE5LDcgQEAgQ2FwYWJpbGl0eUxldmVs
IGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52
aXJvbm1lbnQ6CiAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgogICAgIGNhc2Ugb3BfY2F0
Y2g6CisgICAgY2FzZSBvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5OgogICAgICAgICByZXR1
cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24g
MTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk4Myw2ICs5ODMsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2FzZSBGaWxs
UmVzdFBhcmFtZXRlckFycmF5OiB7CisgICAgICAgIHJlYWQoU3RhY2spOworICAgICAgICB3cml0
ZShIZWFwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGNhc2UgTmV3T2JqZWN0Ogog
ICAgIGNhc2UgTmV3UmVnZXhwOgogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjQsNiArMjI0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgogICAgIGNhc2Ug
UHV0VG9Bcmd1bWVudHM6CisgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE5MjUy
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNjcsNiArMTM2NywxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6IHsK
KyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAg
ICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZv
cmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRB
cmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAx
OTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjE1OCw3ICsyMTU4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAg
IG1fbWlzYy5lcG9jaCA9IGVwb2NoLnRvVW5zaWduZWQoKTsKICAgICB9Ci0gICAgCisKKyAgICBz
aXplX3QgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9w
KCkgPT0gRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8c2l6ZV90PihtX29wSW5mbyk7CisgICAgfQorCiAgICAgdm9pZCBkdW1wQ2hpbGRyZW4oUHJp
bnRTdHJlYW0mIG91dCkKICAgICB7CiAgICAgICAgIGlmICghY2hpbGQxKCkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2Miw2ICsyNjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFj
cm8oTmV3QXJyYXlCdWZmZXIsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKE5ld1R5cGVkQXJy
YXksIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdl
eHAsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEZpbGxSZXN0UGFyYW1ldGVyQXJyYXksIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogU3VwcG9ydCBmb3IgYWxsb2NhdGlvbiBz
aW5raW5nLiAqL1wKICAgICBtYWNybyhQaGFudG9tTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxOCw2ICs4MTgsMTgg
QEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsbwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GaWxsUmVzdFBhcmFtZXRl
ckFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhcnJheUFzQ2VsbCwgUmVnaXN0ZXIqIGFy
Z3VtZW50U3RhcnQsIHNpemVfdCBudW1QYXJhbXNUb1NraXAsIHNpemVfdCBudW1iZXJPZkFyZ3Vt
ZW50cykKK3sKKyAgICBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4oYXJyYXlBc0Nl
bGwpOworICAgIGlmIChudW1iZXJPZkFyZ3VtZW50cyA8PSBudW1QYXJhbXNUb1NraXApCisgICAg
ICAgIHJldHVybjsKKworICAgIHNpemVfdCBhcnJheVNpemUgPSBudW1iZXJPZkFyZ3VtZW50cyAt
IG51bVBhcmFtc1RvU2tpcDsKKyAgICBhcnJheS0+c2V0TGVuZ3RoKGV4ZWMsIGFycmF5U2l6ZSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykKKyAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGFyZ3VtZW50U3RhcnRbaSArIG51bVBhcmFtc1Rv
U2tpcF0uanNWYWx1ZSgpKTsKK30KKwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2Jq
ZWN0SXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE5MjUyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNy
ZWF0ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVNjb3BlZEFyZ3Vt
ZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgaW50
MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqKTsK
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJp
bmdFeGl0KEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSosIEpTRnVuY3Rpb24qLCBpbnQzMl90
IGFyZ3VtZW50Q291bnQpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNs
b25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRT
dGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSk7Cit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRmlsbFJlc3RQYXJhbWV0ZXJBcnJheShFeGVjU3RhdGUqLCBKU0NlbGwq
LCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgc2l6ZV90IGFyZ3VtZW50c09mZnNldCwgc2l6ZV90
IGFyZ3VtZW50c0NvdW50KTsKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZNb2RPbklu
dHMoaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uT2JqZWN0SXNPYmplY3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0Nl
bGwqKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJ
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikgV1RGX0lOVEVS
TkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NzYsNiArNjc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBMb2FkVmFy
YXJnczoKKyAgICAgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVz
ZSBpdCBvbmx5IHByZXRlbmRzIHRvIHByb2R1Y2UgYSB2YWx1ZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxOTI1MjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIyLDYgKzMyMiw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIEZpbGxS
ZXN0UGFyYW1ldGVyQXJyYXk6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBCb3R0
b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ0Myw2
ICs0NDQzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyhub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheTogeworICAgICAgICBjb21w
aWxlRmlsbFJlc3RQYXJhbWV0ZXJBcnJheShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQog
CiAgICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICBjYXNlIE5ld0Fycm93RnVuY3Rpb246CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMTYsNiArNTIxNiwyOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQ2xvbmVkCiAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRmlsbFJlc3RQYXJh
bWV0ZXJBcnJheShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IEZpbGxS
ZXN0UGFyYW1ldGVyQXJyYXkpOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJyYXkodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlJlZyBhcnJheUdQUiA9IGFycmF5LmdwcigpOwor
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAxOkpT
Q2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBhcmd1bWVudHMgdG8g
c2tpcCwgNDpudW1iZXIgb2YgYXJndW1lbnRzIG9yIHNpemVfdCBtYXguCisgICAgbV9qaXQuc2V0
dXBBcmd1bWVudCg0LCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IGVtaXRHZXRMZW5ndGgobm9kZS0+
b3JpZ2luLnNlbWFudGljLCBkZXN0R1BSKTsgfSk7CisgICAgbV9qaXQuc2V0dXBBcmd1bWVudCgz
LCBbJl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLT5u
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSwgZGVzdEdQUik7IH0pOworICAgIG1faml0LnNldHVw
QXJndW1lbnQoMiwgWyZdIChHUFJSZWcgZGVzdEdQUikgeyBlbWl0R2V0QXJndW1lbnRTdGFydChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50KDEsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShhcnJheUdQUiwgZGVzdEdQ
Uik7IH0pOworICAgIG1faml0LnNldHVwQXJndW1lbnQoMCwgWyZdIChHUFJSZWcgZGVzdEdQUikg
eyBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBkZXN0R1BSKTsgfSk7CisK
KyAgICBhcHBlbmRDYWxsKG9wZXJhdGlvbkZpbGxSZXN0UGFyYW1ldGVyQXJyYXkpOworICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7IC8vIEZJWE1FOiBDYW4gdGhpcyBldmVuIHRocm93PworCisg
ICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3Rp
ZnlXcml0ZShOb2RlKiBub2RlKQogewogICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPndh
dGNocG9pbnRTZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIzNyw2ICsyMjM3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVB1dFRvQXJndW1lbnRzKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVDcmVhdGVTY29wZWRBcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlRmlsbFJl
c3RQYXJhbWV0ZXJBcnJheShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTm90aWZ5V3JpdGUoTm9k
ZSopOwogICAgIGJvb2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIG1fbm9kZS0+cGhpKCktPnNldEVwb2NoKG1fbm9kZS0+
ZXBvY2goKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRl
ckFycmF5OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyBpcyBvay4K
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgLy8gRm9yIG5vZGVzIHRoYXQgYXJlbid0IGd1YXJhbnRl
ZWQgdG8gYWxsb2NhdGUsIHdlIHNheSB0aGF0IHRoZWlyIHJldHVybiB2YWx1ZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNiArMjEwLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgUHV0R2V0dGVyU2V0dGVyQnlJZDoKICAgICBj
YXNlIFB1dEdldHRlckJ5VmFsOgogICAgIGNhc2UgUHV0U2V0dGVyQnlWYWw6CisgICAgY2FzZSBG
aWxsUmVzdFBhcmFtZXRlckFycmF5OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAg
IGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Niw2ICsxMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8o
Wl9KSVRPcGVyYXRpb25fRUdDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBp
bnRQdHIpKSBcCiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50
MzIsIGludFB0ciwgaW50NjQsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VT
SnNzLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBt
YWNybyhWX0pJVE9wZXJhdGlvbl9FQ1JTUywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIs
IGludFB0ciwgaW50UHRyLCBpbnQ2NCwgaW50MzIpKQogICAgIAogY2xhc3MgSW50cmluc2ljUmVw
b3NpdG9yeSA6IHB1YmxpYyBDb21tb25WYWx1ZXMgewogcHVibGljOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5
MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MTgsNiArOTE4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tXYXRjaGRvZ1Rp
bWVyKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRl
ckFycmF5OgorICAgICAgICAgICAgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBj
YXNlIExvb3BIaW50OgpAQCAtMzUwOCw2ICszNTExLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlRmls
bFJlc3RQYXJhbWV0ZXJBcnJheSgpCisgICAgeworICAgICAgICAvLyBBcmd1bWVudHM6IDA6ZXhl
YywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1l
bnRzIHRvIHNraXAsIDQ6bnVtYmVyIG9mIGFyZ3VtZW50cyBvciBzaXplX3QgbWF4LgorICAgICAg
ICAvLyBGSVhNRTogdGhlcmUgYXJlIHNvbWUgaW5zdGFuY2VzIHdoZXJlIHRoZSBudW1iZXIgb2Yg
Z2V0QXJndW1lbnRzTGVuZ3RoIGlzIGNvbnN0YW50LCBhbmQgdGhlIG51bWJlciBvZiBhcmd1bWVu
dHMKKyAgICAgICAgLy8gdG8gc2tpcCBpcyBhbHNvIGNvbnN0YW50LiBXZSBjYW4gZG8gc29tZSBt
YXRoIG9uIHRob3NlIGNvbnN0YW50cyBhbmQgc2VlIGlmIGNhbGxpbmcgb3BlcmF0aW9uQ3JlYXRl
RmlsbFJlc3RQYXJhbWV0ZXJBcnJheQorICAgICAgICAvLyB3b3VsZCBqdXN0IGJlIGEgbm9vcCBh
bmQgd2UgY2FuIHNraXAgY29tcGlsaW5nIGl0LgorICAgICAgICB2bUNhbGwoCisgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSksIG1fY2Fs
bEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgZ2V0QXJndW1l
bnRzU3RhcnQoKSwgbV9vdXQuY29uc3RJbnQ2NChtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCkpLCBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZSk7CisgICAgfQogICAgIAogICAgIHZv
aWQgY29tcGlsZU5ld09iamVjdCgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX2RpcmVjdF9hcmd1
bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKICAg
ICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpCisgICAgICAg
IERFRklORV9PUChvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KQogICAgICAgICBERUZJTkVf
T1Aob3BfY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfT1Aob3BfYXNzZXJ0KQogICAgICAgICBE
RUZJTkVfT1Aob3BfZGVidWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5MSw2ICs0OTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
X29wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwor
ICAgICAgICB2b2lkIGVtaXRfb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheShJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY2hlY2tfdGR6KEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9hc3NlcnQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2RlYnVnKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTksNiArMTM5OSwxMiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJnCiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9h
cnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZmls
bF9yZXN0X3BhcmFtZXRlcl9hcnJheSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE5MjUyNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTksNiArMjE5LDcgQEAgdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4
ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fWikoaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VDUlNTKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBSZWdpc3RlciosIHNpemVf
dCwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9u
X0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVy
YXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFU
SU9OICgqUF9KSVRPcGVyYXRpb25fRUNsaSkoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE2NzUsNiArMTY3
NSwxMiBAQCBfbGxpbnRfb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhbGxTbG93UGF0aChfc2xv
d19wYXRoX3RvX2luZGV4X3N0cmluZykKICAgICBkaXNwYXRjaCgzKQogCitfbGxpbnRfb3BfZmls
bF9yZXN0X3BhcmFtZXRlcl9hcnJheToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNs
b3dQYXRoKF9zbG93X3BhdGhfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSkKKyAgICBkaXNwYXRj
aCgzKQorCisKICMgTGFzdGx5LCBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3Vn
aCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBvcGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBu
ZXZlciBhcmlzZSB3aGVuIHVzaW5nIExMSW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydAogIyBh
cyBtdWNoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJ
KHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjIsNiArODYyLDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQXNzaWdubWVudEVsZW1lbnROb2RlKGFzc2ln
bm1lbnRUYXJnZXQsIHN0YXJ0LCBlbmQpOwogICAgIH0KIAorICAgIFJlc3RQYXJhbWV0ZXJOb2Rl
KiBjcmVhdGVSZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIHNpemVfdCBudW1Q
YXJhbWV0ZXJzVG9Ta2lwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVu
YSkgUmVzdFBhcmFtZXRlck5vZGUobmFtZSwgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisgICAgfQor
CiAgICAgdm9pZCBzZXRFbmRPZmZzZXQoTm9kZSogbm9kZSwgaW50IG9mZnNldCkKICAgICB7CiAg
ICAgICAgIG5vZGUtPnNldEVuZE9mZnNldChvZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDE5MjUyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDI5LDYgKzEwMjksMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewog
ICAgIH0KIAorICAgIGlubGluZSBSZXN0UGFyYW1ldGVyTm9kZTo6UmVzdFBhcmFtZXRlck5vZGUo
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXApCisgICAg
ICAgIDogRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkK
KyAgICAgICAgLCBtX251bVBhcmFtZXRlcnNUb1NraXAobnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAg
ICB7CisgICAgfQorCiAgICAgaW5saW5lIERlc3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZTo6RGVz
dHJ1Y3R1cmluZ0Fzc2lnbm1lbnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSogYmluZGluZ3MsIEV4cHJlc3Npb25Ob2RlKiBpbml0
aWFsaXplcikKICAgICAgICAgOiBFeHByZXNzaW9uTm9kZShsb2NhdGlvbikKICAgICAgICAgLCBt
X2JpbmRpbmdzKGJpbmRpbmdzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMu
aAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTczLDYgKzE5NzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHRvU3RyaW5nKFN0cmluZ0J1aWxkZXImKSBjb25zdCA9IDA7
CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzQmluZGluZ05vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZXN0UGFyYW1ldGVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0RGlyZWN0Qmlu
ZGluZyhCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqLCBFeHByZXNzaW9uTm9kZSopIHsg
cmV0dXJuIDA7IH0KICAgICAgICAgCiAgICAgcHJvdGVjdGVkOgpAQCAtMjA3MSw2ICsyMDcyLDI1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9hc3NpZ25tZW50
VGFyZ2V0OwogICAgIH07CiAKKyAgICBjbGFzcyBSZXN0UGFyYW1ldGVyTm9kZSA6IHB1YmxpYyBE
ZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzdFBhcmFt
ZXRlck5vZGUoY29uc3QgSWRlbnRpZmllciYgYm91bmRQcm9wZXJ0eSwgc2l6ZV90IG51bVBhcmFt
ZXRlcnNUb1NraXApOworCisgICAgICAgIGJvb2wgaXNSZXN0UGFyYW1ldGVyKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZvaWQgZW1pdChCeXRlY29kZUdlbmVy
YXRvciYpOworCisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
Qm91bmRJZGVudGlmaWVycyhWZWN0b3I8SWRlbnRpZmllcj4mKSBjb25zdCBvdmVycmlkZTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvU3RyaW5nKFN0cmlu
Z0J1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBt
X25hbWU7CisgICAgICAgIHNpemVfdCBtX251bVBhcmFtZXRlcnNUb1NraXA7CisgICAgfTsKKwog
ICAgIGNsYXNzIERlc3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CiAgICAgcHVibGljOgogICAgICAgICBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiwgRXhwcmVz
c2lvbk5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJ
KHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2NywyNyBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5
cGU+Citib29sIFBhcnNlcjxMZXhlclR5cGU+OjpkZWNsYXJlUmVzdE9yRGVzdHJ1Y3R1cmluZ1Bh
cmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBuYW1lKQoreworICAgIGF1dG8gZGVjbGFyYXRpb25S
ZXN1bHQgPSBkZWNsYXJlUGFyYW1ldGVyKCZuYW1lKTsKKyAgICBpZiAoKGRlY2xhcmF0aW9uUmVz
dWx0ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlKSAmJiBzdHJpY3RNb2Rl
KCkpIHsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGlzRXZhbE9yQXJndW1lbnRzKCZuYW1l
KSwgIkNhbm5vdCBkZXN0cnVjdHVyZSB0byBhIHBhcmFtZXRlciBuYW1lICciLCBuYW1lLmltcGwo
KSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgaWYgKG1fbGFzdEZ1bmN0aW9uTmFtZSAm
JiBuYW1lID09ICptX2xhc3RGdW5jdGlvbk5hbWUpCisgICAgICAgICAgICBzZW1hbnRpY0ZhaWwo
IkNhbm5vdCBkZXN0cnVjdHVyZSB0byAnIiwgbmFtZS5pbXBsKCksICInIGFzIGl0IHNoYWRvd3Mg
dGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbiIpOworICAgICAgICBzZW1hbnRpY0Zh
aWx1cmVEdWVUb0tleXdvcmQoImJvdW5kIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIGlmICho
YXNEZWNsYXJlZFBhcmFtZXRlcihuYW1lKSkKKyAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fu
bm90IGRlc3RydWN0dXJlIHRvICciLCBuYW1lLmltcGwoKSwgIicgYXMgaXQgaGFzIGFscmVhZHkg
YmVlbiBkZWNsYXJlZCIpOworICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBiaW5kIHRvIGEg
cGFyYW1ldGVyIG5hbWVkICciLCBuYW1lLmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKKyAg
ICB9CisgICAgaWYgKGRlY2xhcmF0aW9uUmVzdWx0ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFs
aWREdXBsaWNhdGVEZWNsYXJhdGlvbikgeworICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tl
eXdvcmQoImJvdW5kIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fu
bm90IGRlc3RydWN0dXJlIHRvICciLCBuYW1lLmltcGwoKSwgIicgYXMgaXQgaGFzIGFscmVhZHkg
YmVlbiBkZWNsYXJlZCIpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm4gUGFyc2VyPExleGVyVHlwZT46OmNyZWF0ZUJpbmRpbmdQYXR0
ZXJuKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBEZXN0cnVjdHVyaW5nS2luZCBraW5kLCBFeHBvcnRU
eXBlIGV4cG9ydFR5cGUsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIGludCBkZXB0aCwgSlNUb2tl
biB0b2tlbiwgQXNzaWdubWVudENvbnRleHQgYmluZGluZ0NvbnRleHQsIGNvbnN0IElkZW50aWZp
ZXIqKiBkdXBsaWNhdGVJZGVudGlmaWVyKQogewogICAgIEFTU0VSVCghbmFtZS5pc051bGwoKSk7
CkBAIC02ODYsMjIgKzcwNyw4IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURl
c3RydWMKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoa2luZCA9PSBEZXN0cnVjdHVyZVRvUGFy
YW1ldGVycykgewogICAgICAgICBpZiAoZGVwdGgpIHsKLSAgICAgICAgICAgIGF1dG8gYmluZGlu
Z1Jlc3VsdCA9IGRlY2xhcmVCb3VuZFBhcmFtZXRlcigmbmFtZSk7Ci0gICAgICAgICAgICBpZiAo
YmluZGluZ1Jlc3VsdCA9PSBTY29wZTo6U3RyaWN0QmluZGluZ0ZhaWxlZCAmJiBzdHJpY3RNb2Rl
KCkpIHsKLSAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNFdmFsT3JBcmd1bWVu
dHMoJm5hbWUpLCAiQ2Fubm90IGRlc3RydWN0dXJlIHRvIGEgcGFyYW1ldGVyIG5hbWUgJyIsIG5h
bWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgICAgIGlmIChtX2xh
c3RGdW5jdGlvbk5hbWUgJiYgbmFtZSA9PSAqbV9sYXN0RnVuY3Rpb25OYW1lKQotICAgICAgICAg
ICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZXN0cnVjdHVyZSB0byAnIiwgbmFtZS5p
bXBsKCksICInIGFzIGl0IHNoYWRvd3MgdGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlv
biIpOwotICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbHVyZUR1ZVRvS2V5d29yZCgiYm91bmQg
cGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRQYXJhbWV0
ZXIobmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlc3Ry
dWN0dXJlIHRvICciLCBuYW1lLmltcGwoKSwgIicgYXMgaXQgaGFzIGFscmVhZHkgYmVlbiBkZWNs
YXJlZCIpOwotICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGJpbmQgdG8gYSBw
YXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGJpbmRpbmdSZXN1bHQgPT0gU2NvcGU6OkJpbmRp
bmdGYWlsZWQpIHsKLSAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQo
ImJvdW5kIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0RlY2xhcmVk
UGFyYW1ldGVyKG5hbWUpKQotICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5v
dCBkZXN0cnVjdHVyZSB0byAnIiwgbmFtZS5pbXBsKCksICInIGFzIGl0IGhhcyBhbHJlYWR5IGJl
ZW4gZGVjbGFyZWQiKTsKLSAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZXN0
cnVjdHVyZSB0byBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIik7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBkZWNsYXJlUmVzdE9yRGVzdHJ1Y3R1cmluZ1BhcmFtZXRl
cihuYW1lKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBk
ZWNsYXJlUGFyYW1ldGVyKCZuYW1lKTsKICAgICAgICAgICAgIGlmICgoZGVjbGFyYXRpb25SZXN1
bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZFN0cmljdE1vZGUpICYmIHN0cmljdE1vZGUo
KSkgewpAQCAtMTU1MywzMiArMTU2MCw0NCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVTdGF0ZW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNs
YXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFt
ZXRlcnMoVHJlZUJ1aWxkZXImIGNvbnRleHQsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0IGxpc3Qs
IHVuc2lnbmVkJiBwYXJhbWV0ZXJDb3VudCkKIHsKLSNkZWZpbmUgZmFpbEZyb21EdXBsaWNhdGUo
KSBcCisjZGVmaW5lIGZhaWxJZkR1cGxpY2F0ZUlmVmlvbGF0aW9uKCkgXAogICAgIGlmIChkdXBs
aWNhdGVQYXJhbWV0ZXIpIHtcCiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShkZWZhdWx0VmFs
dWUsICJEdXBsaWNhdGUgcGFyYW1ldGVyICciLCBkdXBsaWNhdGVQYXJhbWV0ZXItPmltcGwoKSwg
Iicgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gd2l0aCBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMi
KTtcCiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShoYXNEZXN0cnVjdHVyaW5nUGF0dGVybiwg
IkR1cGxpY2F0ZSBwYXJhbWV0ZXIgJyIsIGR1cGxpY2F0ZVBhcmFtZXRlci0+aW1wbCgpLCAiJyBu
b3QgYWxsb3dlZCBpbiBmdW5jdGlvbiB3aXRoIGRlc3RydWN0dXJpbmcgcGFyYW1ldGVycyIpO1wK
ICAgICB9CiAKLSAgICBjb25zdCBJZGVudGlmaWVyKiBkdXBsaWNhdGVQYXJhbWV0ZXIgPSBudWxs
cHRyOwogICAgIGJvb2wgaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gPSBmYWxzZTsKLSAgICBhdXRv
IHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1
cmVUb1BhcmFtZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCAmZHVwbGljYXRlUGFyYW1l
dGVyLCAmaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOwotICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRl
ciwgIkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXIgcGF0dGVybiIpOwotICAgIGF1dG8gZGVmYXVsdFZh
bHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsK
LSAgICBwcm9wYWdhdGVFcnJvcigpOwotICAgIGZhaWxGcm9tRHVwbGljYXRlKCk7Ci0gICAgY29u
dGV4dC5hcHBlbmRQYXJhbWV0ZXIobGlzdCwgcGFyYW1ldGVyLCBkZWZhdWx0VmFsdWUpOwotICAg
IHBhcmFtZXRlckNvdW50Kys7Ci0gICAgd2hpbGUgKGNvbnN1bWUoQ09NTUEpKSB7Ci0gICAgICAg
IHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1
cmVUb1BhcmFtZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCAmZHVwbGljYXRlUGFyYW1l
dGVyLCAmaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOworICAgIGJvb2wgaXNSZXN0UGFyYW1ldGVy
ID0gZmFsc2U7CisgICAgY29uc3QgSWRlbnRpZmllciogZHVwbGljYXRlUGFyYW1ldGVyID0gbnVs
bHB0cjsKKyAgICBkbyB7CisgICAgICAgIFRyZWVEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXJhbWV0
ZXIgPSAwOworICAgICAgICBUcmVlRXhwcmVzc2lvbiBkZWZhdWx0VmFsdWUgPSAwOworCisgICAg
ICAgIGlmIChtYXRjaChET1RET1RET1QpKSB7CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAg
ICAgICBmYWlsSWZGYWxzZShtYXRjaFNwZWNJZGVudGlmaWVyKCksICJSZXN0IHBhcmFtZXRlciAn
Li4uJyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSB2YXJpYWJsZSBpZGVudGlmaWVyIik7CisgICAg
ICAgICAgICBkZWNsYXJlUmVzdE9yRGVzdHJ1Y3R1cmluZ1BhcmFtZXRlcigqbV90b2tlbi5tX2Rh
dGEuaWRlbnQpOworICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKKyAgICAgICAgICAgIHBh
cmFtZXRlciA9IGNvbnRleHQuY3JlYXRlUmVzdFBhcmFtZXRlcigqbV90b2tlbi5tX2RhdGEuaWRl
bnQsIHBhcmFtZXRlckNvdW50KTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZh
aWxJZlRydWUobWF0Y2goQ09NTUEpLCAiUmVzdCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBsYXN0
IHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIik7IC8vIExldCdzIGhhdmUgYSBn
b29kIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgY29tbW9uIGNhc2UuCisgICAgICAgICAgICBpc1Jl
c3RQYXJhbWV0ZXIgPSB0cnVlOworICAgICAgICAgICAgaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4g
PSB0cnVlOworICAgICAgICAgICAgLy8gRklYTUU6CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVj
dHVyZVRvUGFyYW1ldGVycywgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJh
bWV0ZXIsICZoYXNEZXN0cnVjdHVyaW5nUGF0dGVybik7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBh
cmFtZXRlciwgIkNhbm5vdCBwYXJzZSBwYXJhbWV0ZXIgcGF0dGVybiIpOwotICAgICAgICBkZWZh
dWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRl
eHQpOworICAgICAgICBpZiAoIWlzUmVzdFBhcmFtZXRlcikKKyAgICAgICAgICAgIGRlZmF1bHRW
YWx1ZSA9IHBhcnNlRGVmYXVsdFZhbHVlRm9yRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCk7
CiAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7Ci0gICAgICAgIGZhaWxGcm9tRHVwbGljYXRlKCk7
CisgICAgICAgIGZhaWxJZkR1cGxpY2F0ZUlmVmlvbGF0aW9uKCk7CiAgICAgICAgIGNvbnRleHQu
YXBwZW5kUGFyYW1ldGVyKGxpc3QsIHBhcmFtZXRlciwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAg
cGFyYW1ldGVyQ291bnQrKzsKLSAgICB9CisgICAgICAgIGlmICghaXNSZXN0UGFyYW1ldGVyKQor
ICAgICAgICAgICAgcGFyYW1ldGVyQ291bnQrKzsKKyAgICB9IHdoaWxlIChjb25zdW1lKENPTU1B
KSAmJiAhaXNSZXN0UGFyYW1ldGVyKTsKKwogICAgIHJldHVybiB0cnVlOwotI3VuZGVmIGZhaWxG
cm9tRHVwbGljYXRlCisjdW5kZWYgZmFpbElmRHVwbGljYXRlSWZWaW9sYXRpb24KIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuaAkocmV2aXNpb24gMTkyNTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw2ICsxMDU1LDggQEAgcHJpdmF0
ZToKICAgICBib29sIGlzVmFsaWRTdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCkt
PmlzVmFsaWRTdHJpY3RNb2RlKCk7IH0KICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFy
ZVBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyKiBpZGVudCkgeyByZXR1cm4gY3VycmVudFNjb3Bl
KCktPmRlY2xhcmVQYXJhbWV0ZXIoaWRlbnQpOyB9CiAgICAgU2NvcGU6OkJpbmRpbmdSZXN1bHQg
ZGVjbGFyZUJvdW5kUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KSB7IHJldHVybiBj
dXJyZW50U2NvcGUoKS0+ZGVjbGFyZUJvdW5kUGFyYW1ldGVyKGlkZW50KTsgfQorICAgIGJvb2wg
ZGVjbGFyZVJlc3RPckRlc3RydWN0dXJpbmdQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYpOwor
CiAgICAgYm9vbCBicmVha0lzVmFsaWQoKQogICAgIHsKICAgICAgICAgU2NvcGVSZWYgY3VycmVu
dCA9IGN1cnJlbnRTY29wZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9T
eW50YXhDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9TeW50YXhDaGVja2VyLmgJKHJldmlzaW9uIDE5MjUyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3
IEBAIHB1YmxpYzoKICAgICAgICAgRnVuY3Rpb25FeHByLCBDbGFzc0V4cHIsIFN1cGVyRXhwciwg
QnJhY2tldEV4cHIsIERvdEV4cHIsIENhbGxFeHByLAogICAgICAgICBOZXdFeHByLCBQcmVFeHBy
LCBQb3N0RXhwciwgVW5hcnlFeHByLCBCaW5hcnlFeHByLAogICAgICAgICBDb25kaXRpb25hbEV4
cHIsIEFzc2lnbm1lbnRFeHByLCBUeXBlb2ZFeHByLCBOZXdUYXJnZXRFeHByLAotICAgICAgICBE
ZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1cmluZywKKyAgICAg
ICAgRGVsZXRlRXhwciwgQXJyYXlMaXRlcmFsRXhwciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsIFJl
c3RQYXJhbWV0ZXIsCiAgICAgICAgIEFycmF5RGVzdHJ1Y3R1cmluZywgT2JqZWN0RGVzdHJ1Y3R1
cmluZywgU291cmNlRWxlbWVudHNSZXN1bHQsCiAgICAgICAgIEZ1bmN0aW9uQm9keVJlc3VsdCwg
U3ByZWFkRXhwciwgQXJndW1lbnRzUmVzdWx0LAogICAgICAgICBQcm9wZXJ0eUxpc3RSZXN1bHQs
IEFyZ3VtZW50c0xpc3RSZXN1bHQsIEVsZW1lbnRzTGlzdFJlc3VsdCwKQEAgLTEzNSw2ICsxMzUs
NyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBpbnQgRGVzdHJ1Y3R1cmluZ1BhdHRlcm47CiAgICAg
dHlwZWRlZiBEZXN0cnVjdHVyaW5nUGF0dGVybiBBcnJheVBhdHRlcm47CiAgICAgdHlwZWRlZiBE
ZXN0cnVjdHVyaW5nUGF0dGVybiBPYmplY3RQYXR0ZXJuOworICAgIHR5cGVkZWYgRGVzdHJ1Y3R1
cmluZ1BhdHRlcm4gUmVzdFBhdHRlcm47CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBDcmVhdGVz
QVNUID0gZmFsc2U7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgTmVlZHNGcmVlVmFyaWFibGVJbmZv
ID0gZmFsc2U7CkBAIC0zNTAsNiArMzUxLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJl
dHVybiBCaW5kaW5nRGVzdHJ1Y3R1cmluZzsKICAgICB9CisgICAgUmVzdFBhdHRlcm4gY3JlYXRl
UmVzdFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiwgc2l6ZV90KQorICAgIHsgCisgICAgICAg
IHJldHVybiBSZXN0UGFyYW1ldGVyOworICAgIH0KIAogICAgIGJvb2wgaXNCaW5kaW5nTm9kZShE
ZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTky
NTI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDQgKzcwMSwyMiBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBSRVRVUk4ocmVzb2x2ZWRTY29wZSk7CiB9CiAKK1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5KQoreworICAg
IEJFR0lOKCk7CisgICAgLy8gZnVuY3Rpb24gZm9vKGEsIGIsIC4uLmMpCisgICAgLy8gZm9vKDEw
LCAyMCwgMzApCisgICAgc2l6ZV90IG51bVBhcmFtc1RvU2tpcCA9IGJpdHdpc2VfY2FzdDxzaXpl
X3Q+KHBjWzJdLnUucG9pbnRlcik7CisgICAgc2l6ZV90IG51bUFyZ3VtZW50c1RvRnVuY3Rpb24g
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKG51bUFyZ3VtZW50c1RvRnVuY3Rpb24g
PD0gbnVtUGFyYW1zVG9Ta2lwKQorICAgICAgICBFTkQoKTsKKworICAgIEpTQXJyYXkqIGFycmF5
ID0ganNDYXN0PEpTQXJyYXkqPihPUCgxKS5qc1ZhbHVlKCkpOworICAgIHNpemVfdCBhcnJheVNp
emUgPSBudW1Bcmd1bWVudHNUb0Z1bmN0aW9uIC0gbnVtUGFyYW1zVG9Ta2lwOworICAgIGFycmF5
LT5zZXRMZW5ndGgoZXhlYywgYXJyYXlTaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFycmF5U2l6ZTsgaSsrKQorICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwg
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSArIG51bVBhcmFtc1RvU2tpcCkpOworICAgIEVORCgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjkzLDYgKzI5Myw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfYXNz
ZXJ0KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52
aXJvbm1lbnQpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhfc2Nv
cGUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsKK1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSk7
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvZXM2LnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2Vz
Ni55YW1sCShyZXZpc2lvbiAxOTI1MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
ZXM2LnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTEwODksMTUgKzEwODksMTUgQEAKIC0gcGF0aDog
ZXM2L1JlZ0V4cF95X2FuZF91X2ZsYWdzX3lfZmxhZ19sYXN0SW5kZXguanMKICAgY21kOiBydW5F
UzYgOmZhaWwKIC0gcGF0aDogZXM2L3Jlc3RfcGFyYW1ldGVyc19hcmd1bWVudHNfb2JqZWN0X2lu
dGVyYWN0aW9uLmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwK
IC0gcGF0aDogZXM2L3Jlc3RfcGFyYW1ldGVyc19iYXNpY19mdW5jdGlvbmFsaXR5LmpzCi0gIGNt
ZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L3Jlc3Rf
cGFyYW1ldGVyc19jYW50X2JlX3VzZWRfaW5fc2V0dGVycy5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFp
bAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNfZnVu
Y3Rpb25fbGVuZ3RoX3Byb3BlcnR5LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVu
RVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L3Jlc3RfcGFyYW1ldGVyc19uZXdfRnVuY3Rpb25fc3Vw
cG9ydC5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBh
dGg6IGVzNi9TZXRfaXRlcmF0b3JfY2xvc2luZy5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBw
YXRoOiBlczYvU2V0X1NldFtTeW1ib2wuc3BlY2llc10uanMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYW5kLWRlZmF1bHQtYXJndW1lbnRz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVz
dC1wYXJhbWV0ZXItYW5kLWRlZmF1bHQtYXJndW1lbnRzLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1hbmQtZGVmYXVs
dC1hcmd1bWVudHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorZnVuY3Rpb24g
YXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFz
c2VydGlvbiIpCit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBzaG91bGRUaHJvd1RE
WihmdW5jKSB7CisgICAgdmFyIGhhc1Rocm93biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAg
IGZ1bmMoKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgaWYgKGUubmFtZS5pbmRleE9mKCJS
ZWZlcmVuY2VFcnJvciIpICE9PSAtMSkKKyAgICAgICAgICAgIGhhc1Rocm93biA9IHRydWU7Cisg
ICAgfQorICAgIGFzc2VydChoYXNUaHJvd24pOworfQorbm9JbmxpbmUoc2hvdWxkVGhyb3dURFop
OworCitmdW5jdGlvbiBmb28oYSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gYzsgfSwgYiA9IGEoKSwg
Li4uYykgeworICAgIHJldHVybiBhKCk7Cit9Citub0lubGluZShmb28pOworCitmdW5jdGlvbiBi
YXooYSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gYjsgfSwgLi4uYikgeworICAgIHJldHVybiBhKCk7
Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgc2hvdWxkVGhyb3dU
RFooZnVuY3Rpb24oKSB7IGZvbyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgMTAsIDIwKTsgfSk7Cisg
ICAgbGV0IG8gPSB7eDogMjB9OworICAgIGxldCByZXN1bHQgPSBiYXoodW5kZWZpbmVkLCAxMCwg
bywgImJheiIpOworICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICBhc3NlcnQo
cmVzdWx0WzBdID09PSAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gbyk7CisgICAgYXNz
ZXJ0KHJlc3VsdFsyXSA9PT0gImJheiIpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1iYXNpY3MuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1iYXNpY3MuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jlc3Qt
cGFyYW1ldGVyLWJhc2ljcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACitmdW5j
dGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJC
YWQgYXNzZXJ0aW9uIikKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGZvbyhhLCAu
Li5iKSB7CisgICAgcmV0dXJuIGI7ICAgIAorfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24g
YmFyKGEsIC4uLmIpIHsKKyAgICByZXR1cm4gYSArIGJbMF07Cit9Citub0lubGluZShiYXIpOwor
CitmdW5jdGlvbiBiYXooYSwgLi4uYikgeworICAgIGZ1bmN0aW9uIGNhcHR1cmUoKSB7IHJldHVy
biBiOyB9CisgICAgYXNzZXJ0KGJbMF0gPT09IGNhcHR1cmUoKVswXSk7CisgICAgcmV0dXJuIGEg
KyBiWzBdOworfQorbm9JbmxpbmUoYmF6KTsKKworZnVuY3Rpb24gamF6KGEsIC4uLmIpIHsKKyAg
ICBmdW5jdGlvbiBjYXB0dXJlKCkgeyByZXR1cm4gYSArIGJbMF07IH0KKyAgICBhc3NlcnQoY2Fw
dHVyZSgpID09PSBhICsgYlswXSk7CisgICAgcmV0dXJuIGEgKyBiWzBdOworfQorbm9JbmxpbmUo
amF6KTsKKworZnVuY3Rpb24ga2F6KGEgPSAxMCwgLi4uYikgeworICAgIHJldHVybiBhICsgYlsw
XQorfQorbm9JbmxpbmUoa2F6KTsKKworZnVuY3Rpb24gcmF6KGEgPSAxMCwgLi4uYikgeworICAg
IGZ1bmN0aW9uIGNhcHR1cmUoKSB7IHJldHVybiBhICsgYlswXTsgfQorICAgIGFzc2VydChjYXB0
dXJlKCkgPT09IGEgKyBiWzBdKTsKKyAgICByZXR1cm4gYSArIGJbMF07Cit9Citub0lubGluZShy
YXopOworCitmdW5jdGlvbiByZXN0TGVuZ3RoKGEsIC4uLmIpIHsKKyAgICByZXR1cm4gYi5sZW5n
dGg7Cit9Citub0lubGluZShyZXN0TGVuZ3RoKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAw
MDsgaSsrKSB7CisgICAgbGV0IGExID0gZm9vKDEwLCAyMCk7CisgICAgYXNzZXJ0KGExIGluc3Rh
bmNlb2YgQXJyYXkpOworICAgIGFzc2VydChhMS5sZW5ndGggPT09IDEpOworICAgIGFzc2VydChh
MVswXSA9PT0gMjApOworCisgICAgbGV0IGEyID0gZm9vKDEwKTsKKyAgICBhc3NlcnQoYTIgaW5z
dGFuY2VvZiBBcnJheSk7CisgICAgYXNzZXJ0KGEyLmxlbmd0aCA9PT0gMCk7CisKKyAgICBsZXQg
YTMgPSBiYXIoMTAsIDIwKTsKKyAgICBhc3NlcnQoYTMgPT09IDMwKTsKKworICAgIGxldCBhNCA9
IGJheigxMCwgMjApOworICAgIGFzc2VydChhNCA9PT0gMzApOworCisgICAgbGV0IGE1ID0gamF6
KCJoZWxsbyIsICJ3b3JsZCIpOworICAgIGFzc2VydChhNSA9PT0gImhlbGxvd29ybGQiKTsKKwor
ICAgIGxldCBhNiA9IGtheih1bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTYgPT09IDUwKTsK
KworICAgIGxldCBhNyA9IGtheih1bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTcgPT09IDUw
KTsKKworICAgIGFzc2VydChyZXN0TGVuZ3RoKCkgPT09IDApOworICAgIGFzc2VydChyZXN0TGVu
Z3RoKDEpID09PSAwKTsKKyAgICBhc3NlcnQocmVzdExlbmd0aCgxLCAxKSA9PT0gMSk7CisgICAg
YXNzZXJ0KHJlc3RMZW5ndGgoMSwgMSwgMSkgPT09IDIpOworICAgIGFzc2VydChyZXN0TGVuZ3Ro
KDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEpID09PSAyMCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3Jlc3QtcGFyYW1ldGVyLWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxpbmVkLmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRl
ci1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKK2Z1bmN0aW9uIGFz
c2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3Nl
cnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLnJlc3QpIHsK
KyAgICByZXR1cm4gcmVzdDsKK30KKworZnVuY3Rpb24gZm9vKGEsIGIsIGMpIHsKKyAgICByZXR1
cm4gYmFyKGEsIGIsIGMpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHJlc3VsdCA9IGZvbygxMCwgMjAsIDMwKTsKKyAgICBh
c3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMTAp
OworICAgIGFzc2VydChyZXN1bHRbMV0gPT09IDIwKTsKKyAgICBhc3NlcnQocmVzdWx0WzJdID09
PSAzMCk7Cit9CisKK2Z1bmN0aW9uIGJheiguLi5yZXN0KSB7CisgICAgcmV0dXJuIHJlc3Q7Cit9
CitmdW5jdGlvbiBqYXooYSwgYiwgYykgeworICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7Cit9Citub0lubGluZShqYXopOwor
Citmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwOyBpKyspIHsKKyAgICBsZXQgcmVzdWx0ID0gamF6
KDEwLCAyMCwgMzApOworICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICBhc3Nl
cnQocmVzdWx0WzBdID09PSAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gMjApOworICAg
IGFzc2VydChyZXN1bHRbMl0gPT09IDMwKTsKK30KSW5kZXg6IExheW91dFRlc3RzL2pzL3BhcnNl
ci1zeW50YXgtY2hlY2stZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3BhcnNlci1zeW50YXgtY2hlY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxOTI1MjUpCisrKyBM
YXlvdXRUZXN0cy9qcy9wYXJzZXItc3ludGF4LWNoZWNrLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtOTI5LDYgKzkyOSw0OSBAQCBQQVNTIEludmFsaWQ6ICIxICUgCiAtLSIKIFBBU1Mg
SW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IDEgJSAKIC0tIH0iCitSZXN0IHBhcmFtZXRlcgorUEFT
UyBWYWxpZDogICAiZnVuY3Rpb24gZm9vKC4uLmEpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0
aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5hKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0
aW9uIGZvbyhhLCAuLi5iKSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5j
dGlvbiBmb28oYSwgLi4uYikgeyB9IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oYSA9
IDIwLCAuLi5iKSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBm
b28oYSA9IDIwLCAuLi5iKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyhhLCBi
LCBjLCBkLCBlLCBmLCBnLCAuLi5oKSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkg
eyBmdW5jdGlvbiBmb28oYSwgYiwgYywgZCwgZSwgZiwgZywgLi4uaCkgeyB9IH0iCitQQVNTIElu
dmFsaWQ6ICJmdW5jdGlvbiBmb28oYSwgLi4uYiwgYykgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVu
Y3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKGEsIC4uLmIsIGMpIHsgfSB9IgorUEFTUyBJbnZhbGlk
OiAiZnVuY3Rpb24gZm9vKGEsIC4uLmIsICkgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24g
ZigpIHsgZnVuY3Rpb24gZm9vKGEsIC4uLmIsICkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5j
dGlvbiBmb28oYSwgLi4uYSkgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVu
Y3Rpb24gZm9vKGEsIC4uLmEpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4u
LmEsIC4uLmIpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZv
byguLi5hLCAuLi5iKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi5iLCAu
Li5iKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4u
YiwgLi4uYikgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uYiAgLi4uYikg
eyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmIgIC4u
LmIpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKGEsIGEsIC4uLmIpIHsgfSIK
K1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyhhLCBhLCAuLi5iKSB7
IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi57Yn0pIHsgfSIKK1BBU1MgSW52
YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi57Yn0pIHsgfSB9IgorUEFTUyBJ
bnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLltiXSkgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rp
b24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLltiXSkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5j
dGlvbiBmb28oLi4uMTIzKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5j
dGlvbiBmb28oLi4uMTIzKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi4x
MjNhYmMpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbygu
Li4xMjNhYmMpIHsgfSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZm9vKC4uLmFiYzEyMykg
eyB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmFiYzEy
MykgeyB9IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0iCitQQVNT
IFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0gfSIKK1BB
U1MgSW52YWxpZDogIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9IgorUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4u
bGV0KSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyguLi55aWVsZCkgeyB9Igor
UEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0g
fSIKK1BBU1MgSW52YWxpZDogIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7
IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyAndXNlIHN0cmljdCc7IGZ1bmN0aW9u
IGZvbyguLi55aWVsZCkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uaWYp
IHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5pZikg
eyB9IH0iCiBQQVNTIGUubGluZSBpcyAxCiBQQVNTIGZvbyBpcyAnUEFTUycKIFBBU1MgYmFyIGlz
ICdQQVNTJwpJbmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3BhcnNlci1zeW50YXgt
Y2hlY2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3BhcnNl
ci1zeW50YXgtY2hlY2suanMJKHJldmlzaW9uIDE5MjUyNSkKKysrIExheW91dFRlc3RzL2pzL3Nj
cmlwdC10ZXN0cy9wYXJzZXItc3ludGF4LWNoZWNrLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NTYs
NiArNTU2LDI5IEBAIGludmFsaWQoIjEgJSAtLSIpOwogaW52YWxpZCgiMSAlIFxuKysiKTsKIGlu
dmFsaWQoIjEgJSBcbi0tIik7CiAKK2RlYnVnKCJSZXN0IHBhcmFtZXRlciIpOwordmFsaWQoImZ1
bmN0aW9uIGZvbyguLi5hKSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oYSwgLi4uYikgeyB9
Iik7Cit2YWxpZCgiZnVuY3Rpb24gZm9vKGEgPSAyMCwgLi4uYikgeyB9Iik7Cit2YWxpZCgiZnVu
Y3Rpb24gZm9vKGEsIGIsIGMsIGQsIGUsIGYsIGcsIC4uLmgpIHsgfSIpOworaW52YWxpZCgiZnVu
Y3Rpb24gZm9vKGEsIC4uLmIsIGMpIHsgfSIpCitpbnZhbGlkKCJmdW5jdGlvbiBmb28oYSwgLi4u
YiwgKSB7IH0iKQoraW52YWxpZCgiZnVuY3Rpb24gZm9vKGEsIC4uLmEpIHsgfSIpOworaW52YWxp
ZCgiZnVuY3Rpb24gZm9vKC4uLmEsIC4uLmIpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9v
KC4uLmIsIC4uLmIpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmIgIC4uLmIpIHsg
fSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9vKGEsIGEsIC4uLmIpIHsgfSIpOworaW52YWxpZCgi
ZnVuY3Rpb24gZm9vKC4uLntifSkgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uW2Jd
KSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi4xMjMpIHsgfSIpOworaW52YWxpZCgi
ZnVuY3Rpb24gZm9vKC4uLjEyM2FiYykgeyB9Iik7Cit2YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmFi
YzEyMykgeyB9Iik7Cit2YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9Iik7CitpbnZhbGlk
KCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGZvbyguLi5sZXQpIHsgfSIpOwordmFsaWQoImZ1bmN0
aW9uIGZvbyguLi55aWVsZCkgeyB9Iik7CitpbnZhbGlkKCIndXNlIHN0cmljdCc7IGZ1bmN0aW9u
IGZvbyguLi55aWVsZCkgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uaWYpIHsgfSIp
OworCiAKIAogdHJ5IHsgZXZhbCgiYS5iLmMgPSB7fTsiKTsgfSBjYXRjaChlMSkgeyBlPWUxOyBz
aG91bGRCZSgiZS5saW5lIiwgIjEiKSB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265823</attachid>
            <date>2015-11-18 18:33:32 -0800</date>
            <delta_ts>2015-11-19 12:07:19 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>58737</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxNS0xMS0xOCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbRVM2XSBBZGQgc3VwcG9ydCBmb3IgcmVzdCBwYXJhbWV0ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyByZXN0
IHBhcmFtZXRlcnMgZnJvbSB0aGUgRVM2IHNwZWMuCisgICAgICAgIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb24tZGVm
aW5pdGlvbnMKKworICAgICAgICBXZSBpbXBsZW1lbnQgdGhlIHJlc3QgcGFyYW1ldGVyIGFzIGEg
bmV3IEFTVCBub2RlLiBUaGlzIEFTVCBub2RlCisgICAgICAgIGxvd2VycyB0byAib3BfbmV3X2Fy
cmF5IFgsIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkgWCIuIE5vdGUKKyAgICAgICAgdGhh
dCB0aGUgb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSBvcGNvZGUgZG9lcyBub3QgaGF2ZSBh
IHJlc3VsdC4KKyAgICAgICAgVGhlIGJ1bGsgb2YgdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRpbmcg
b3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheS4KKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1l
bnRzIHRoaXMgaW4gYWxsIGZvdXIgdGllcnMgaW4gYSBzdHJhaWdodCBmb3J3YXJkIHdheS4KKyAg
ICAgICAgVGhlIG9wY29kZSBpcyBpbXBsZW1lbnRlZCBhcyBhIEMgY2FsbCB0aGF0IHdpbGwgcmVh
ZCB0aGUgcGVydGluZW50CisgICAgICAgIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxsIGZyYW1lIGFu
ZCBmaWxsIHRoZW0gaW50byB0aGUgYXJyYXkuCisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUxpc3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAg
ICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0
cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0
dXBGdW5jdGlvblNjb3BlU3RhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
aW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVyKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cDoKKyAgICAgICAgKEpTQzo6QmluZGluZ05vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKToK
KyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJz
KToKKyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OnRvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmJpbmRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlc3RQ
YXJhbWV0ZXJOb2RlOjplbWl0KToKKyAgICAgICAgKEpTQzo6U3ByZWFkRXhwcmVzc2lvbk5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEVwb2NoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6ZHVtcENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpw
cm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNs
b25lZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlRmlsbFJlc3RQ
YXJhbWV0ZXJBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Ny
ZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBw
YXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCaW5k
aW5nTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZXN0UGFyYW1l
dGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6c2V0RW5kT2Zmc2V0KToKKyAgICAgICAg
KiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nTm9kZTo6
QmluZGluZ05vZGUpOgorICAgICAgICAoSlNDOjpSZXN0UGFyYW1ldGVyTm9kZTo6UmVzdFBhcmFt
ZXRlck5vZGUpOgorICAgICAgICAoSlNDOjpEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGU6OkRl
c3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6Cisg
ICAgICAgIChKU0M6OkRlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZTo6aXNCaW5kaW5nTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZTo6aXNSZXN0UGFyYW1ldGVyKToK
KyAgICAgICAgKEpTQzo6RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlOjplbWl0RGlyZWN0QmluZGlu
Zyk6CisgICAgICAgIChKU0M6OlJlc3RQYXJhbWV0ZXJOb2RlOjpuYW1lKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6ZGVjbGFyZVJlc3RPck5vcm1hbFBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpjcmVhdGVCaW5kaW5nUGF0dGVybik6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpzdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyOjppc1ZhbGlkU3RyaWN0TW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6ZGVjbGFy
ZVBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6YnJlYWtJc1ZhbGlkKToKKyAgICAg
ICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpvcGVyYXRvclN0YWNrUG9wKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHRlc3RzL2VzNi55YW1sOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1hbmQtZGVmYXVsdC1hcmd1bWVudHMuanM6IEFkZGVk
LgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHNob3VsZFRocm93VERaKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgIChiYXopOgorICAgICAgICAoaS5zaG91bGRUaHJvd1REWik6CisgICAg
ICAgICogdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWJhc2ljcy5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChj
YXB0dXJlKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChqYXopOgorICAgICAgICAoa2F6KToK
KyAgICAgICAgKHJheik6CisgICAgICAgIChyZXN0TGVuZ3RoKToKKyAgICAgICAgKHRlc3RBcmd1
bWVudHNPYmplY3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxp
bmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChiYXIpOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChqYXopOgorCiAyMDE1LTExLTE4ICBT
YWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFRoZXJlIGlzIGEgYnVn
IHdoZW4gZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBtaXhlZCB3aXRoIGRlc3RydWN0dXJp
bmcgcGFyYW1ldGVyIHZhbHVlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNyArMTI4LDggQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2VudW1lcmF0b3Jf
Z2VuZXJpY19wbmFtZSIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfdG9faW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9sb2FkX2Fycm93ZnVuY3Rpb25fdGhpcyIsICJsZW5ndGgiIDogMiB9LAotICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfYXNzZXJ0IiwgImxlbmd0aCIgOiAzIH0KKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2Fzc2VydCIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSIsICJsZW5ndGgiOiAzIH0KICAg
ICAgICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw4IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICBj
YXNlIG9wX2plcV9udWxsOgogICAgIGNhc2Ugb3Bfam5lcV9udWxsOgogICAgIGNhc2Ugb3BfZGVj
OgotICAgIGNhc2Ugb3BfaW5jOiB7CisgICAgY2FzZSBvcF9pbmM6IAorICAgIGNhc2Ugb3BfZmls
bF9yZXN0X3BhcmFtZXRlcl9hcnJheTogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjQ3LDYgKzI0OCw3IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZU9mZnNldChDb2RlQmwKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwogICAgIHN3aXRjaCAob3Bjb2RlSUQp
IHsKICAgICAvLyBUaGVzZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2FzZSBvcF9maWxs
X3Jlc3RfcGFyYW1ldGVyX2FycmF5OgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgogICAgIGNh
c2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTkyNjAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4MSw2ICs3ODEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29k
ZSgKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9maWxsX3Jl
c3RfcGFyYW1ldGVyX2FycmF5OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAgICBzaXplX3Qg
YXJndW1lbnRPZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8c2l6ZV90PigoKytpdCktPnUucG9pbnRlcik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV6dSIsIGFyZ3VtZW50
T2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
Y3JlYXRlX3RoaXM6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTkyNjAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDYgKzc1LDEzIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIHUu
anNDZWxsLmNsZWFyKCk7CiAgICAgICAgIHUub3BlcmFuZCA9IG9wZXJhbmQ7CiAgICAgfQorICAg
IEluc3RydWN0aW9uKHVuc2lnbmVkIHVuc2lnbmVkVmFsdWUpCisgICAgeworICAgICAgICAvLyBX
ZSBoYXZlIHRvIGluaXRpYWxpemUgb25lIG9mIHRoZSBwb2ludGVyIG1lbWJlcnMgdG8gZW5zdXJl
IHRoYXQKKyAgICAgICAgLy8gdGhlIGVudGlyZSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgaW4gNjQt
Yml0LgorICAgICAgICB1LmpzQ2VsbC5jbGVhcigpOworICAgICAgICB1LnVuc2lnbmVkVmFsdWUg
PSB1bnNpZ25lZFZhbHVlOworICAgIH0KIAogICAgIEluc3RydWN0aW9uKFB1dEJ5SWRGbGFncyBm
bGFncykKICAgICB7CkBAIC0xMTIsNiArMTE5LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAg
ICB1bmlvbiB7CiAgICAgICAgIE9wY29kZSBvcGNvZGU7CiAgICAgICAgIGludCBvcGVyYW5kOwor
ICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZFZhbHVlOwogICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gc3RydWN0dXJlOwogICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsK
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4gc3ltYm9sVGFibGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDYgKzcwLDkgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAog
ICAgIGlmIChtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMpCiAgICAgICAgIGluaXRpYWxpemVW
YXJpYWJsZSh2YXJpYWJsZShwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSwgbV9hcmd1bWVudHNS
ZWdpc3Rlcik7CiAKKyAgICBpZiAobV9yZXN0UGFyYW1ldGVyKQorICAgICAgICBtX3Jlc3RQYXJh
bWV0ZXItPmVtaXQoKnRoaXMpOworCiAgICAgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGVtcCA9IG5ld1RlbXBvcmFyeSgpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2xvYmFs
U2NvcGU7CkBAIC0yNzIsOCArMjc1LDE0IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgogICAg
IG1fcGFyYW1ldGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3Bh
Y2UgZm9yICJ0aGlzIgogICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0
UGFyYW1ldGVyKCktPmluZGV4KCkpOyAvLyB0aGlzCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGluaXRpYWxpemVOZXh0UGFyYW1l
dGVyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKKyAg
ICAgICAgaWYgKHBhdHRlcm4tPmlzUmVzdFBhcmFtZXRlcigpKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9yZXN0UGFyYW1ldGVyKTsKKyAgICAgICAgICAgIG1fcmVzdFBhcmFtZXRl
ciA9IHN0YXRpY19jYXN0PFJlc3RQYXJhbWV0ZXJOb2RlKj4ocGF0dGVybik7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsKKyAgICB9CiAgICAg
CiAgICAgLy8gRmlndXJlIG91dCBzb21lIGludGVyZXN0aW5nIGZhY3RzIGFib3V0IG91ciBhcmd1
bWVudHMuCiAgICAgYm9vbCBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lID0gZmFsc2U7CkBAIC0z
MDcsNyArMzE2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgog
ICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVyLT5yZWYoKTsKICAgICB9CiAgICAgCi0gICAgaWYg
KG5lZWRzQXJndW1lbnRzICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYmICFwYXJhbWV0
ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSkgeworICAgIGlmIChuZWVkc0FyZ3VtZW50
cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSAmJiAhcGFyYW1ldGVycy5oYXNEZWZhdWx0
UGFyYW1ldGVyVmFsdWVzKCkgJiYgIW1fcmVzdFBhcmFtZXRlcikgewogICAgICAgICAvLyBJZiB3
ZSBjYXB0dXJlZCBhbnkgZm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVuIHdlIHVzZSBTY29w
ZWRBcmd1bWVudHMuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyB1c2UgRGlyZWN0QXJndW1lbnRz
LiBXaXRoIFNjb3BlZEFyZ3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFyZ3VtZW50cyBpbnRv
IHRoZQogICAgICAgICAvLyBhY3RpdmF0aW9uLgpAQCAtMzg5LDcgKzM5OCw3IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgKGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgfHwg
cGFyYW1ldGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpKSB7CisgICAgaWYgKG5lZWRz
QXJndW1lbnRzICYmIChjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpIHx8IHBhcmFtZXRlcnMuaGFz
RGVmYXVsdFBhcmFtZXRlclZhbHVlcygpIHx8ICEhbV9yZXN0UGFyYW1ldGVyKSkgewogICAgICAg
ICAvLyBBbGxvY2F0ZSBhbiBvdXQtb2YtYmFuZHMgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICAg
ZW1pdE9wY29kZShvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwpAQCAtNzA3
LDYgKzcxNiw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgICAgIHN0ZDo6cGFpcjxEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9k
ZSo+IHBhcmFtZXRlciA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgICAgICAgICBpZiAocGFyYW1l
dGVyLmZpcnN0LT5pc1Jlc3RQYXJhbWV0ZXIoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwYXJhbWV0ZXJWYWx1ZSA9ICZyZWdpc3Rl
ckZvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxICsgaSkpOwogICAgICAgICAgICAgZW1p
dE1vdmUodGVtcC5nZXQoKSwgcGFyYW1ldGVyVmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgaWYg
KHBhcmFtZXRlci5zZWNvbmQpIHsKQEAgLTc2NCw3ICs3NzUsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbml0aWFsaXplRGVmYXVsCiAgICAgICAgIC8vIElmIHdlIGhhdmUgZGVmYXVsdCBw
YXJhbWV0ZXIgdmFsdWVzLCB3ZSBoYW5kbGUgdGhpcyBjYXNlIGFib3ZlLgogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewogICAgICAgICAg
ICAgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5m
aXJzdDsKLSAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSAmJiAhcGF0dGVybi0+aXNSZXN0
UGFyYW1ldGVyKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcGFyYW1l
dGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkp
KTsKICAgICAgICAgICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUoKnRoaXMsIHBhcmFtZXRlclZh
bHVlLmdldCgpKTsKICAgICAgICAgICAgIH0KQEAgLTM4MTMsNCArMzgyNCwxNSBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5DCiAgICAgfQogfQogCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc3RQYXJhbWV0ZXIoUmVnaXN0ZXJJRCogcmVzdWx0
LCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwKQoreworICAgIGVtaXROZXdBcnJheShyZXN1
bHQsIG51bGxwdHIsIDApOworCisgICAgZW1pdE9wY29kZShvcF9maWxsX3Jlc3RfcGFyYW1ldGVy
X2FycmF5KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzdWx0LT5pbmRleCgpKTsKKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJl
dmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDYgKzU5OCw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXRlcmF0b3JOZXh0KFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogaXRlcmF0b3IsIGNvbnN0IFRocm93YWJsZUV4cHJlc3Npb25E
YXRhKiBub2RlKTsKICAgICAgICAgdm9pZCBlbWl0SXRlcmF0b3JDbG9zZShSZWdpc3RlcklEKiBp
dGVyYXRvciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogCisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRSZXN0UGFyYW1ldGVyKFJlZ2lzdGVySUQqIHJlc3VsdCwgdW5zaWdu
ZWQgbnVtUGFyYW1ldGVyc1RvU2tpcCk7CisKICAgICAgICAgYm9vbCBlbWl0UmVhZE9ubHlFeGNl
cHRpb25JZk5lZWRlZChjb25zdCBWYXJpYWJsZSYpOwogCiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5
IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVuIGVtaXR0ZWQuCkBAIC04MjgsNiArODMwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gRnVuY3Rpb25WYXJpYWJsZVR5cGUgOiB1
aW50OF90IHsgTm9ybWFsRnVuY3Rpb25WYXJpYWJsZSwgR2xvYmFsRnVuY3Rpb25WYXJpYWJsZSB9
OwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPEZ1bmN0aW9uTWV0YWRhdGFOb2RlKiwgRnVuY3Rp
b25WYXJpYWJsZVR5cGU+PiBtX2Z1bmN0aW9uc1RvSW5pdGlhbGl6ZTsKICAgICAgICAgYm9vbCBt
X25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMgeyBmYWxzZSB9OworICAgICAgICBSZXN0UGFyYW1l
dGVyTm9kZSogbV9yZXN0UGFyYW1ldGVyIHsgbnVsbHB0ciB9OwogICAgICAgICAKICAgICAgICAg
VmVjdG9yPFRyeVJhbmdlPiBtX3RyeVJhbmdlczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFRy
eURhdGEsIDg+IG1fdHJ5RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM5OCw2ICszMzk4LDM1IEBAIHZvaWQgQmluZGluZ05vZGU6OmNvbGxlY3RC
b3VuZElkZW50aWZpZXIKICAgICBpZGVudGlmaWVycy5hcHBlbmQobV9ib3VuZFByb3BlcnR5KTsK
IH0KICAgICAKK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJz
KFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMpIGNvbnN0Cit7CisgICAgaWRlbnRpZmll
cnMuYXBwZW5kKG1fbmFtZSk7Cit9Cit2b2lkIFJlc3RQYXJhbWV0ZXJOb2RlOjp0b1N0cmluZyhT
dHJpbmdCdWlsZGVyJiBidWlsZGVyKSBjb25zdAoreworICAgIGJ1aWxkZXIuYXBwZW5kKG1fbmFt
ZS5zdHJpbmcoKSk7Cit9Cit2b2lkIFJlc3RQYXJhbWV0ZXJOb2RlOjpiaW5kVmFsdWUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQordm9pZCBSZXN0UGFyYW1ldGVyTm9kZTo6ZW1pdChCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yKQoreworICAgIFZhcmlhYmxlIHZhciA9IGdlbmVyYXRvci52YXJp
YWJsZShtX25hbWUpOworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHZhci5sb2NhbCgpKSB7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0UmVzdFBhcmFtZXRlcihsb2NhbCwgbV9udW1QYXJhbWV0
ZXJzVG9Ta2lwKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShsb2NhbCwgdmFy
LCBtX2Rpdm90U3RhcnQsIG1fZGl2b3RFbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3RQYXJhbWV0ZXJBcnJheSA9IGdlbmVyYXRvci5lbWl0
UmVzdFBhcmFtZXRlcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIG1fbnVtUGFyYW1ldGVyc1Rv
U2tpcCk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZShyZXN0UGFyYW1ldGVyQXJyYXku
Z2V0KCksIHZhciwgbV9kaXZvdFN0YXJ0LCBtX2Rpdm90RW5kKTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShudWxscHRyLCB2YXIpOwor
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdEVuZCwgbV9kaXZvdFN0YXJ0
LCBtX2Rpdm90RW5kKTsKKyAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCks
IHZhciwgcmVzdFBhcmFtZXRlckFycmF5LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkg
PyBUaHJvd0lmTm90Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6YXRpb24p
OworfQorCisKIFJlZ2lzdGVySUQqIFNwcmVhZEV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTkyNjAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTA4LDYgKzI1MDgsOSBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgog
ICAgICAgICBicmVhazsKIAorICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheToKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrOiB7CiAgICAgICAgIC8vIFNp
bXBsaWZ5IG91dCBjaGVja3MgdGhhdCBkb24ndCBhY3R1YWxseSBkbyBjaGVja2luZy4KICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMwLDYgKzMzMzAsMTMgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFw
aChOZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgIH0KKworICAg
ICAgICBjYXNlIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6IHsKKyAgICAgICAgICAgIG5v
dGljZUFyZ3VtZW50c1VzZSgpOworICAgICAgICAgICAgYWRkVG9HcmFwaChGaWxsUmVzdFBhcmFt
ZXRlckFycmF5LAorICAgICAgICAgICAgICAgIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS51bnNpZ25lZFZhbHVlKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZmlsbF9yZXN0X3Bh
cmFtZXRlcl9hcnJheSk7CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAvLyA9PT0g
Qml0d2lzZSBvcGVyYXRpb25zID09PQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
OSw2ICsyMTksNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAg
ICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDoKICAgICBjYXNlIG9wX2dldF9w
YXJlbnRfc2NvcGU6CiAgICAgY2FzZSBvcF9jYXRjaDoKKyAgICBjYXNlIG9wX2ZpbGxfcmVzdF9w
YXJhbWV0ZXJfYXJyYXk6CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogCiAg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtOTgzLDYgKzk4Mywx
MiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6IHsKKyAgICAg
ICAgcmVhZChTdGFjayk7CisgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgY2Fz
ZSBOZXdTdHJpbmdPYmplY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw2ICsyMjQsNyBAQCBib29sIGRvZXNH
QyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNl
IEdldEZyb21Bcmd1bWVudHM6CiAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKKyAgICBjYXNlIEZp
bGxSZXN0UGFyYW1ldGVyQXJyYXk6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2Ug
Q3JlYXRlQWN0aXZhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2OCw2ICsxMzY4LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheTogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMg
aGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5l
dyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTU4LDcgKzIxNTgsMTMgQEAg
c3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgbV9taXNjLmVwb2NoID0gZXBvY2gudG9VbnNp
Z25lZCgpOwogICAgIH0KLSAgICAKKworICAgIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcCgpID09IEZpbGxSZXN0UGFyYW1ldGVyQXJy
YXkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BJbmZvKTsKKyAg
ICB9CisKICAgICB2b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAg
ICAgICAgaWYgKCFjaGlsZDEoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdBcnJheUJ1ZmZlciwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCisgICAg
bWFjcm8oRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwK
ICAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAogICAgIG1hY3JvKFBo
YW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODE4LDYgKzgxOCwxNiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIGFycmF5QXNDZWxsLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVt
YmVyT2ZQYXJhbXNUb1NraXAsIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG51bWJlck9mQXJndW1lbnRzID4gbnVtYmVyT2ZQYXJhbXNUb1NraXApOyAv
LyBXZSBzaG91bGQgb25seSBjYWxsIHRoaXMgZnJvbSBKSVQgY29kZSB3aGVuIHRoaXMgY29uZGl0
aW9uIGlzIHRydWUuCisgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGFycmF5
QXNDZWxsKTsKKyAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBudW1iZXJPZkFyZ3VtZW50cyAtIG51
bWJlck9mUGFyYW1zVG9Ta2lwOworICAgIGFycmF5LT5zZXRMZW5ndGgoZXhlYywgYXJyYXlTaXpl
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspCisgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBhcmd1bWVudFN0YXJ0W2kgKyBudW1iZXJP
ZlBhcmFtc1RvU2tpcF0uanNWYWx1ZSgpKTsKK30KKwogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uT2JqZWN0SXNPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNyZWF0ZURpcgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVNj
b3BlZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3RlciogYXJndW1lbnRT
dGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSwgSlNMZXhpY2FsRW52aXJv
bm1lbnQqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1
bWVudHNEdXJpbmdFeGl0KEV4ZWNTdGF0ZSosIElubGluZUNhbGxGcmFtZSosIEpTRnVuY3Rpb24q
LCBpbnQzMl90IGFyZ3VtZW50Q291bnQpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUNsb25lZEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBSZWdpc3Rlciog
YXJndW1lbnRTdGFydCwgaW50MzJfdCBsZW5ndGgsIEpTRnVuY3Rpb24qIGNhbGxlZSk7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmlsbFJlc3RQYXJhbWV0ZXJBcnJheShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBSZWdpc3RlciogYXJndW1lbnRTdGFydCwgdW5zaWduZWQgbnVtYmVyT2ZQYXJh
bXNUb1NraXAsIHVuc2lnbmVkIGFyZ3VtZW50c0NvdW50KTsKIGRvdWJsZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkZNb2RPbkludHMoaW50MzJfdCwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwogc2l6
ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT2JqZWN0SXNPYmplY3QoRXhlY1N0YXRlKiwgSlNH
bG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25PYmplY3RJc0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzYsNiArNjc2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFy
cmF5OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVGhpcyBn
ZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBvbmx5IHByZXRlbmRzIHRvIHByb2R1Y2UgYSB2YWx1ZS4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw3IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVu
dHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgY2FzZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTkyNjAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQzOCw2ICs0NDM4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OiB7CisgICAgICAgIGNvbXBpbGVGaWxsUmVzdFBhcmFt
ZXRlckFycmF5KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIE5ld0Z1
bmN0aW9uOgogICAgIGNhc2UgTmV3QXJyb3dGdW5jdGlvbjoKICAgICAgICAgY29tcGlsZU5ld0Z1
bmN0aW9uKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NDI3LDYgKzQ0MjcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CisgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OiB7CisgICAgICAg
IGNvbXBpbGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CiAKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3QXJyb3dGdW5jdGlvbjoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM0NCw2ICs1MzQ0LDM1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGaWxsUmVz
dFBhcmFtZXRlckFycmF5KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
RmlsbFJlc3RQYXJhbWV0ZXJBcnJheSk7CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcnJh
eSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVnIGFycmF5R1BSID0gYXJyYXkuZ3By
KCk7CisKKyAgICBHUFJUZW1wb3JhcnkgYXJndW1lbnRzTGVuZ3RoKHRoaXMpOworICAgIEdQUlJl
ZyBhcmd1bWVudHNMZW5ndGhHUFIgPSBhcmd1bWVudHNMZW5ndGguZ3ByKCk7CisKKyAgICBlbWl0
R2V0TGVuZ3RoKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYXJndW1lbnRzTGVuZ3RoR1BSKTsKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbk9yRXF1YWwsIGFyZ3VtZW50c0xlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKG5vZGUt
Pm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKGFyZ3VtZW50c0xlbmd0aEdQUik7CisgICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMsIDE6SlND
ZWxsKiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50cyB0byBz
a2lwLCA0Om51bWJlciBvZiBhcmd1bWVudHMgb3Igc2l6ZV90IG1heC4KKyAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50KDQsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShhcmd1bWVudHNM
ZW5ndGhHUFIsIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDMsIFsmXSAo
R1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIobm9kZS0+bnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAoKSksIGRlc3RHUFIpOyB9KTsKKyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
KDIsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgZW1pdEdldEFyZ3VtZW50U3RhcnQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBkZXN0R1BSKTsgfSk7CisgICAgbV9qaXQuc2V0dXBBcmd1bWVudCgxLCBb
Jl0gKEdQUlJlZyBkZXN0R1BSKSB7IG1faml0Lm1vdmUoYXJyYXlHUFIsIGRlc3RHUFIpOyB9KTsK
KyAgICBtX2ppdC5zZXR1cEFyZ3VtZW50KDAsIFsmXSAoR1BSUmVnIGRlc3RHUFIpIHsgbV9qaXQu
bW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZGVzdEdQUik7IH0pOworICAgIGFwcGVu
ZENhbGwob3BlcmF0aW9uRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSk7CisgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhhcmd1bWVudHNMZW5ndGhHUFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgIG5vUmVzdWx0KG5vZGUpOworfQor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUoTm9kZSogbm9kZSkKIHsK
ICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT53YXRjaHBvaW50U2V0KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMzgsNiArMjIzOCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVu
dHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVS
ZWdFeHBFeGVjKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbChOb2RlKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsyMTAsNyBAQCBpbmxpbmUgQ2Fw
YWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJC
eUlkOgogICAgIGNhc2UgUHV0R2V0dGVyQnlWYWw6CiAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDoK
KyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBP
Sy4KICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
ICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRy
LCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FSlosIGZ1bmN0
aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnQ2NCwgaW50MzIpKSBcCiAgICAgbWFjcm8oWl9KSVRP
cGVyYXRpb25fRVNKc3MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIsIGludDY0
KSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDUlVpVWksIGZ1bmN0aW9uVHlwZSh2b2lk
VHlwZSwgaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGludDMyKSkKICAgICAKIGNsYXNz
IEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsKIHB1YmxpYzoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM3LDYgKzkzNyw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICAgICAgY29tcGlsZUNo
ZWNrV2F0Y2hkb2dUaW1lcigpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRmls
bFJlc3RQYXJhbWV0ZXJBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVGaWxsUmVzdFBhcmFtZXRl
ckFycmF5KCk7CisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBoYW50b21Mb2Nh
bDoKICAgICAgICAgY2FzZSBMb29wSGludDoKQEAgLTM1NDUsNiArMzU0OCwyOCBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkoKQorICAgIHsgICAgICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgZG9GaWxsUmVzdFBhcmFtZXRlciA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiRmlsbFJlc3RQYXJhbWV0ZXIgQyBjYWxsIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZpbGxSZXN0UGFyYW1ldGVyIGNv
bnRpbnVhdGlvbiIpKTsKKworICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAg
PSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Cisg
ICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50cyA9IGdldEFyZ3VtZW50c0xlbmd0aCgpLnZh
bHVlOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKG51
bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCisgICAgICAgICAgICB1
bnN1cmUoZG9GaWxsUmVzdFBhcmFtZXRlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGRv
RmlsbFJlc3RQYXJhbWV0ZXIsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIC8vIEFyZ3VtZW50czog
MDpleGVjLCAxOkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBh
cmd1bWVudHMgdG8gc2tpcCwgNDpudW1iZXIgb2YgYXJndW1lbnRzIG9yIHNpemVfdCBtYXguCisg
ICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GaWxs
UmVzdFBhcmFtZXRlckFycmF5KSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSksCisgICAgICAgICAgICBnZXRBcmd1bWVudHNTdGFydCgpLCBudW1iZXJPZkFyZ3VtZW50c1Rv
U2tpcCwgbnVtYmVyT2ZBcmd1bWVudHMpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Y3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9h
cmd1bWVudHMpCisgICAgICAgIERFRklORV9PUChvcF9maWxsX3Jlc3RfcGFyYW1ldGVyX2FycmF5
KQogICAgICAgICBERUZJTkVfT1Aob3BfY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfT1Aob3Bf
YXNzZXJ0KQogICAgICAgICBERUZJTkVfT1Aob3BfZGVidWcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MCw2ICs0OTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyhJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50
cyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZmlsbF9yZXN0X3BhcmFtZXRl
cl9hcnJheShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY2hlY2tfdGR6KElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9hc3NlcnQoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOTksNiArMTM5OSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfb3V0X29mX2JhbmRf
YXJnCiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZmls
bF9yZXN0X3BhcmFtZXRlcl9hcnJheShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSk7CisgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIHR5cGVkZWYgY2hhciogVW51c2Vk
UHRyOwogICAgIFZtOiBWTSoKICAgICBXczogV2F0Y2hwb2ludFNldCoKICAgICBaOiBpbnQzMl90
CisgICAgVWk6IHVpbnQzMl90CiAqLwogCiB0eXBlZGVmIENhbGxGcmFtZSogSklUX09QRVJBVElP
TiAoKkZfSklUT3BlcmF0aW9uX0VGSlpaKShFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCBFbmNvZGVk
SlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCk7CkBAIC0yMTksNiArMjIwLDcgQEAgdHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7Cit0eXBl
ZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDUlVpVWkpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIHR5cGVkZWYgY2hh
ciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRl
ZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUNs
aSkoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxOTI2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTE2NzUsNiArMTY3NSwxMiBAQCBfbGxpbnRfb3BfdG9faW5k
ZXhfc3RyaW5nOgogICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykK
ICAgICBkaXNwYXRjaCgzKQogCitfbGxpbnRfb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheToK
KyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfZmlsbF9y
ZXN0X3BhcmFtZXRlcl9hcnJheSkKKyAgICBkaXNwYXRjaCgzKQorCisKICMgTGFzdGx5LCBtYWtl
IHN1cmUgdGhhdCB3ZSBjYW4gbGluayBldmVuIHRob3VnaCB3ZSBkb24ndCBzdXBwb3J0IGFsbCBv
cGNvZGVzLgogIyBUaGVzZSBvcGNvZGVzIHNob3VsZCBuZXZlciBhcmlzZSB3aGVuIHVzaW5nIExM
SW50IG9yIGVpdGhlciBKSVQuIFdlIGFzc2VydAogIyBhcyBtdWNoLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC04MzYsNiArODM2LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJB
cmVuYSkgQmluZGluZ05vZGUoYm91bmRQcm9wZXJ0eSwgc3RhcnQsIGVuZCwgY29udGV4dCk7CiAg
ICAgfQogCisgICAgUmVzdFBhcmFtZXRlck5vZGUqIGNyZWF0ZVJlc3RQYXJhbWV0ZXIoY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgc2l6ZV90IG51bVBhcmFtZXRlcnNUb1NraXAsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFJlc3RQYXJhbWV0ZXJOb2RlKG5hbWUsIG51
bVBhcmFtZXRlcnNUb1NraXAsIHN0YXJ0LCBlbmQpOworICAgIH0KKwogICAgIHZvaWQgc2V0RW5k
T2Zmc2V0KE5vZGUqIG5vZGUsIGludCBvZmZzZXQpCiAgICAgewogICAgICAgICBub2RlLT5zZXRF
bmRPZmZzZXQob2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTm9kZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAy
MSw2ICsxMDIxLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAgICAgCisgICAg
aW5saW5lIFJlc3RQYXJhbWV0ZXJOb2RlOjpSZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlm
aWVyJiBuYW1lLCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgICAgIDogRGVzdHJ1
Y3R1cmluZ1BhdHRlcm5Ob2RlKCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBt
X251bVBhcmFtZXRlcnNUb1NraXAobnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAgICAgICAgLCBtX2Rp
dm90U3RhcnQoc3RhcnQpCisgICAgICAgICwgbV9kaXZvdEVuZChlbmQpCisgICAgeworICAgIH0K
KwogICAgIGlubGluZSBEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGU6OkRlc3RydWN0dXJpbmdB
c3NpZ25tZW50Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBEZXN0cnVjdHVy
aW5nUGF0dGVybk5vZGUqIGJpbmRpbmdzLCBFeHByZXNzaW9uTm9kZSogaW5pdGlhbGl6ZXIpCiAg
ICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9jYXRpb24pCiAgICAgICAgICwgbV9iaW5kaW5ncyhi
aW5kaW5ncykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9u
IDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk2OCw2ICsxOTY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCB0b1N0cmluZyhTdHJpbmdCdWlsZGVyJikgY29uc3QgPSAwOwogCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0JpbmRpbmdOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICAgICAgdmlydHVhbCBib29sIGlzUmVzdFBhcmFtZXRlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdERpcmVjdEJpbmRpbmcoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiwgRXhwcmVzc2lvbk5vZGUqKSB7IHJldHVybiAwOyB9
CiAgICAgICAgIAogICAgIHByb3RlY3RlZDoKQEAgLTIwNDgsNiArMjA0OSwyNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgQXNzaWdubWVudENvbnRleHQgbV9iaW5kaW5nQ29udGV4dDsKICAg
ICB9OwogCisgICAgY2xhc3MgUmVzdFBhcmFtZXRlck5vZGUgOiBwdWJsaWMgRGVzdHJ1Y3R1cmlu
Z1BhdHRlcm5Ob2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlc3RQYXJhbWV0ZXJOb2RlKGNv
bnN0IElkZW50aWZpZXImIGJvdW5kUHJvcGVydHksIHVuc2lnbmVkIG51bVBhcmFtZXRlcnNUb1Nr
aXAsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVu
ZCk7CisKKyAgICAgICAgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICAgICAgdm9pZCBlbWl0KEJ5dGVjb2RlR2VuZXJhdG9yJik7CisK
KyAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbGxlY3RCb3VuZElkZW50
aWZpZXJzKFZlY3RvcjxJZGVudGlmaWVyPiYpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICB2aXJ0
dWFsIHZvaWQgYmluZFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopIGNvbnN0
IG92ZXJyaWRlOworICAgICAgICB2aXJ0dWFsIHZvaWQgdG9TdHJpbmcoU3RyaW5nQnVpbGRlciYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1fbmFtZTsKKyAg
ICAgICAgdW5zaWduZWQgbV9udW1QYXJhbWV0ZXJzVG9Ta2lwOworICAgICAgICBKU1RleHRQb3Np
dGlvbiBtX2Rpdm90U3RhcnQ7IC8vICJmIiBpbiAiLi4uZm9vIgorICAgICAgICBKU1RleHRQb3Np
dGlvbiBtX2Rpdm90RW5kOworICAgIH07CisKICAgICBjbGFzcyBEZXN0cnVjdHVyaW5nQXNzaWdu
bWVudE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAg
RGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIERlc3Ry
dWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Npb25Ob2RlKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Nyw2
ICs2NjcsMzAgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgorYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6
ZGVjbGFyZVJlc3RPck5vcm1hbFBhcmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25z
dCBJZGVudGlmaWVyKiogZHVwbGljYXRlSWRlbnRpZmllcikKK3sKKyAgICBEZWNsYXJhdGlvblJl
c3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBkZWNsYXJlUGFyYW1ldGVyKCZuYW1lKTsKKyAg
ICBpZiAoKGRlY2xhcmF0aW9uUmVzdWx0ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJp
Y3RNb2RlKSAmJiBzdHJpY3RNb2RlKCkpIHsKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGlz
RXZhbE9yQXJndW1lbnRzKCZuYW1lKSwgIkNhbm5vdCBkZXN0cnVjdHVyZSB0byBhIHBhcmFtZXRl
ciBuYW1lICciLCBuYW1lLmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKKyAgICAgICAgaWYg
KG1fbGFzdEZ1bmN0aW9uTmFtZSAmJiBuYW1lID09ICptX2xhc3RGdW5jdGlvbk5hbWUpCisgICAg
ICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5hbWVkICci
LCBuYW1lLmltcGwoKSwgIicgYXMgaXQgc2hhZG93cyB0aGUgbmFtZSBvZiBhIHN0cmljdCBtb2Rl
IGZ1bmN0aW9uIik7CisgICAgICAgIHNlbWFudGljRmFpbHVyZUR1ZVRvS2V5d29yZCgicGFyYW1l
dGVyIG5hbWUiKTsKKyAgICAgICAgaWYgKGhhc0RlY2xhcmVkUGFyYW1ldGVyKG5hbWUpKQorICAg
ICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCAn
IiwgbmFtZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIGFzIGl0IGhhcyBhbHJlYWR5IGJlZW4g
ZGVjbGFyZWQiKTsKKyAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBhIHBhcmFt
ZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CisgICAgfQor
ICAgIGlmIChkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkRHVw
bGljYXRlRGVjbGFyYXRpb24pIHsKKyAgICAgICAgLy8gSXQncyBub3QgYWx3YXlzIGFuIGVycm9y
IHRvIGRlZmluZSBhIGR1cGxpY2F0ZSBwYXJhbWV0ZXIuCisgICAgICAgIC8vIEl0J3Mgb25seSBh
biBlcnJvciB3aGVuIHRoZXJlIGFyZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgb3IgZGVzdHJ1
Y3R1cmluZyBwYXJhbWV0ZXJzLgorICAgICAgICAvLyBXZSBub3RlIHRoaXMgdmFsdWUgbm93IHNv
IHdlIGNhbiBjaGVjayBpdCBsYXRlci4KKyAgICAgICAgaWYgKGR1cGxpY2F0ZUlkZW50aWZpZXIp
CisgICAgICAgICAgICAqZHVwbGljYXRlSWRlbnRpZmllciA9ICZuYW1lOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxh
dGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gUGFyc2VyPExl
eGVyVHlwZT46OmNyZWF0ZUJpbmRpbmdQYXR0ZXJuKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBEZXN0
cnVjdHVyaW5nS2luZCBraW5kLCBFeHBvcnRUeXBlIGV4cG9ydFR5cGUsIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIEpTVG9rZW4gdG9rZW4sIEFzc2lnbm1lbnRDb250ZXh0IGJpbmRpbmdDb250ZXh0
LCBjb25zdCBJZGVudGlmaWVyKiogZHVwbGljYXRlSWRlbnRpZmllcikKIHsKICAgICBBU1NFUlQo
IW5hbWUuaXNOdWxsKCkpOwpAQCAtNjg1LDIzICs3MDksOCBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVEZXN0cnVjCiAgICAgICAgICAgICBmYWlsSWZUcnVlKGRlY2xhcmF0aW9u
UmVzdWx0ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWREdXBsaWNhdGVEZWNsYXJhdGlvbiwg
IkNhbm5vdCBkZWNsYXJlIGEgbGV4aWNhbCB2YXJpYWJsZSB0d2ljZTogJyIsIG5hbWUuaW1wbCgp
LCAiJyIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChraW5kID09IERlc3RydWN0dXJlVG9Q
YXJhbWV0ZXJzKSB7Ci0gICAgICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJhdGlvblJl
c3VsdCA9IGRlY2xhcmVQYXJhbWV0ZXIoJm5hbWUpOwotICAgICAgICBpZiAoKGRlY2xhcmF0aW9u
UmVzdWx0ICYgRGVjbGFyYXRpb25SZXN1bHQ6OkludmFsaWRTdHJpY3RNb2RlKSAmJiBzdHJpY3RN
b2RlKCkpIHsKLSAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc0V2YWxPckFyZ3VtZW50
cygmbmFtZSksICJDYW5ub3QgZGVzdHJ1Y3R1cmUgdG8gYSBwYXJhbWV0ZXIgbmFtZSAnIiwgbmFt
ZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7Ci0gICAgICAgICAgICBpZiAobV9sYXN0RnVu
Y3Rpb25OYW1lICYmIG5hbWUgPT0gKm1fbGFzdEZ1bmN0aW9uTmFtZSkKLSAgICAgICAgICAgICAg
ICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5hbWVkICciLCBuYW1l
LmltcGwoKSwgIicgYXMgaXQgc2hhZG93cyB0aGUgbmFtZSBvZiBhIHN0cmljdCBtb2RlIGZ1bmN0
aW9uIik7Ci0gICAgICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoInBhcmFtZXRl
ciBuYW1lIik7Ci0gICAgICAgICAgICBpZiAoaGFzRGVjbGFyZWRQYXJhbWV0ZXIobmFtZSkpCi0g
ICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBu
YW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIGFzIGl0IGhhcyBhbHJlYWR5
IGJlZW4gZGVjbGFyZWQiKTsKLSAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xh
cmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9u
UmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIEl0
J3Mgbm90IGFsd2F5cyBhbiBlcnJvciB0byBkZWZpbmUgYSBkdXBsaWNhdGUgcGFyYW1ldGVyLgot
ICAgICAgICAgICAgLy8gSXQncyBvbmx5IGFuIGVycm9yIHdoZW4gdGhlcmUgYXJlIGRlZmF1bHQg
cGFyYW1ldGVyIHZhbHVlcyBvciBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMuCi0gICAgICAgICAg
ICAvLyBXZSBub3RlIHRoaXMgdmFsdWUgbm93IHNvIHdlIGNhbiBjaGVjayBpdCBsYXRlci4KLSAg
ICAgICAgICAgIGlmIChkdXBsaWNhdGVJZGVudGlmaWVyKQotICAgICAgICAgICAgICAgICpkdXBs
aWNhdGVJZGVudGlmaWVyID0gJm5hbWU7Ci0gICAgICAgIH0KKyAgICAgICAgZGVjbGFyZVJlc3RP
ck5vcm1hbFBhcmFtZXRlcihuYW1lLCBkdXBsaWNhdGVJZGVudGlmaWVyKTsKKyAgICAgICAgcHJv
cGFnYXRlRXJyb3IoKTsKICAgICB9CiAKICAgICBpZiAoZXhwb3J0VHlwZSA9PSBFeHBvcnRUeXBl
OjpFeHBvcnRlZCkgewpAQCAtMTUwMiwzMiArMTUxMSw0NSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVt
cGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZv
cm1hbFBhcmFtZXRlcnMoVHJlZUJ1aWxkZXImIGNvbnRleHQsIFRyZWVGb3JtYWxQYXJhbWV0ZXJM
aXN0IGxpc3QsIHVuc2lnbmVkJiBwYXJhbWV0ZXJDb3VudCkKIHsKLSNkZWZpbmUgZmFpbEZyb21E
dXBsaWNhdGUoKSBcCisjZGVmaW5lIGZhaWxJZkR1cGxpY2F0ZUlmVmlvbGF0aW9uKCkgXAogICAg
IGlmIChkdXBsaWNhdGVQYXJhbWV0ZXIpIHtcCiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShk
ZWZhdWx0VmFsdWUsICJEdXBsaWNhdGUgcGFyYW1ldGVyICciLCBkdXBsaWNhdGVQYXJhbWV0ZXIt
PmltcGwoKSwgIicgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gd2l0aCBkZWZhdWx0IHBhcmFtZXRl
ciB2YWx1ZXMiKTtcCiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShoYXNEZXN0cnVjdHVyaW5n
UGF0dGVybiwgIkR1cGxpY2F0ZSBwYXJhbWV0ZXIgJyIsIGR1cGxpY2F0ZVBhcmFtZXRlci0+aW1w
bCgpLCAiJyBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiB3aXRoIGRlc3RydWN0dXJpbmcgcGFyYW1l
dGVycyIpO1wKKyAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKGlzUmVzdFBhcmFtZXRlciwgIkR1
cGxpY2F0ZSBwYXJhbWV0ZXIgJyIsIGR1cGxpY2F0ZVBhcmFtZXRlci0+aW1wbCgpLCAiJyBub3Qg
YWxsb3dlZCBpbiBmdW5jdGlvbiB3aXRoIGEgcmVzdCBwYXJhbWV0ZXIiKTtcCiAgICAgfQogCi0g
ICAgY29uc3QgSWRlbnRpZmllciogZHVwbGljYXRlUGFyYW1ldGVyID0gbnVsbHB0cjsKICAgICBi
b29sIGhhc0Rlc3RydWN0dXJpbmdQYXR0ZXJuID0gZmFsc2U7Ci0gICAgYXV0byBwYXJhbWV0ZXIg
PSBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0dXJlVG9QYXJhbWV0
ZXJzLCBFeHBvcnRUeXBlOjpOb3RFeHBvcnRlZCwgJmR1cGxpY2F0ZVBhcmFtZXRlciwgJmhhc0Rl
c3RydWN0dXJpbmdQYXR0ZXJuKTsKLSAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3Qg
cGFyc2UgcGFyYW1ldGVyIHBhdHRlcm4iKTsKLSAgICBhdXRvIGRlZmF1bHRWYWx1ZSA9IHBhcnNl
RGVmYXVsdFZhbHVlRm9yRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCk7Ci0gICAgcHJvcGFn
YXRlRXJyb3IoKTsKLSAgICBmYWlsRnJvbUR1cGxpY2F0ZSgpOwotICAgIGNvbnRleHQuYXBwZW5k
UGFyYW1ldGVyKGxpc3QsIHBhcmFtZXRlciwgZGVmYXVsdFZhbHVlKTsKLSAgICBwYXJhbWV0ZXJD
b3VudCsrOwotICAgIHdoaWxlIChjb25zdW1lKENPTU1BKSkgewotICAgICAgICBwYXJhbWV0ZXIg
PSBwYXJzZURlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQsIERlc3RydWN0dXJlVG9QYXJhbWV0
ZXJzLCBFeHBvcnRUeXBlOjpOb3RFeHBvcnRlZCwgJmR1cGxpY2F0ZVBhcmFtZXRlciwgJmhhc0Rl
c3RydWN0dXJpbmdQYXR0ZXJuKTsKKyAgICBib29sIGlzUmVzdFBhcmFtZXRlciA9IGZhbHNlOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGR1cGxpY2F0ZVBhcmFtZXRlciA9IG51bGxwdHI7CisgICAg
ZG8geworICAgICAgICBUcmVlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4gcGFyYW1ldGVyID0gMDsKKyAg
ICAgICAgVHJlZUV4cHJlc3Npb24gZGVmYXVsdFZhbHVlID0gMDsKKworICAgICAgICBpZiAobWF0
Y2goRE9URE9URE9UKSkgeworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZmFpbElm
RmFsc2UobWF0Y2hTcGVjSWRlbnRpZmllcigpLCAiUmVzdCBwYXJhbWV0ZXIgJy4uLicgc2hvdWxk
IGJlIGZvbGxvd2VkIGJ5IGEgdmFyaWFibGUgaWRlbnRpZmllciIpOworICAgICAgICAgICAgZGVj
bGFyZVJlc3RPck5vcm1hbFBhcmFtZXRlcigqbV90b2tlbi5tX2RhdGEuaWRlbnQsICZkdXBsaWNh
dGVQYXJhbWV0ZXIpOworICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKKyAgICAgICAgICAg
IEpTVGV4dFBvc2l0aW9uIGlkZW50aWZpZXJTdGFydCA9IHRva2VuU3RhcnRQb3NpdGlvbigpOwor
ICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gaWRlbnRpZmllckVuZCA9IHRva2VuRW5kUG9zaXRp
b24oKTsKKyAgICAgICAgICAgIHBhcmFtZXRlciA9IGNvbnRleHQuY3JlYXRlUmVzdFBhcmFtZXRl
cigqbV90b2tlbi5tX2RhdGEuaWRlbnQsIHBhcmFtZXRlckNvdW50LCBpZGVudGlmaWVyU3RhcnQs
IGlkZW50aWZpZXJFbmQpOworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZmFpbElm
VHJ1ZShtYXRjaChDT01NQSksICJSZXN0IHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIGxhc3QgcGFy
YW1ldGVyIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24iKTsgLy8gTGV0J3MgaGF2ZSBhIGdvb2Qg
ZXJyb3IgbWVzc2FnZSBmb3IgdGhpcyBjb21tb24gY2FzZS4KKyAgICAgICAgICAgIGlzUmVzdFBh
cmFtZXRlciA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGFyYW1ldGVyID0g
cGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVy
cywgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0
cnVjdHVyaW5nUGF0dGVybik7CiAgICAgICAgIGZhaWxJZkZhbHNlKHBhcmFtZXRlciwgIkNhbm5v
dCBwYXJzZSBwYXJhbWV0ZXIgcGF0dGVybiIpOwotICAgICAgICBkZWZhdWx0VmFsdWUgPSBwYXJz
ZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQpOworICAgICAgICBp
ZiAoIWlzUmVzdFBhcmFtZXRlcikKKyAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHBhcnNlRGVm
YXVsdFZhbHVlRm9yRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCk7CiAgICAgICAgIHByb3Bh
Z2F0ZUVycm9yKCk7Ci0gICAgICAgIGZhaWxGcm9tRHVwbGljYXRlKCk7CisgICAgICAgIGZhaWxJ
ZkR1cGxpY2F0ZUlmVmlvbGF0aW9uKCk7CiAgICAgICAgIGNvbnRleHQuYXBwZW5kUGFyYW1ldGVy
KGxpc3QsIHBhcmFtZXRlciwgZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgcGFyYW1ldGVyQ291bnQr
KzsKLSAgICB9CisgICAgICAgIGlmICghaXNSZXN0UGFyYW1ldGVyKQorICAgICAgICAgICAgcGFy
YW1ldGVyQ291bnQrKzsKKyAgICB9IHdoaWxlICghaXNSZXN0UGFyYW1ldGVyICYmIGNvbnN1bWUo
Q09NTUEpKTsKKwogICAgIHJldHVybiB0cnVlOwotI3VuZGVmIGZhaWxGcm9tRHVwbGljYXRlCisj
dW5kZWYgZmFpbElmRHVwbGljYXRlSWZWaW9sYXRpb24KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IExleGVyVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2
aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAzNCw2ICsxMDM0LDggQEAgcHJpdmF0ZToKICAgICBib29sIHN0
cmljdE1vZGUoKSB7IHJldHVybiBjdXJyZW50U2NvcGUoKS0+c3RyaWN0TW9kZSgpOyB9CiAgICAg
Ym9vbCBpc1ZhbGlkU3RyaWN0TW9kZSgpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5pc1ZhbGlk
U3RyaWN0TW9kZSgpOyB9CiAgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmVQYXJhbWV0
ZXIoY29uc3QgSWRlbnRpZmllciogaWRlbnQpIHsgcmV0dXJuIGN1cnJlbnRTY29wZSgpLT5kZWNs
YXJlUGFyYW1ldGVyKGlkZW50KTsgfQorICAgIGJvb2wgZGVjbGFyZVJlc3RPck5vcm1hbFBhcmFt
ZXRlcihjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgSWRlbnRpZmllcioqKTsKKwogICAgIGJvb2wg
YnJlYWtJc1ZhbGlkKCkKICAgICB7CiAgICAgICAgIFNjb3BlUmVmIGN1cnJlbnQgPSBjdXJyZW50
U2NvcGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hl
Y2tlci5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEZ1bmN0aW9uRXhwciwgQ2xhc3NFeHByLCBTdXBlckV4cHIsIEJyYWNrZXRFeHBy
LCBEb3RFeHByLCBDYWxsRXhwciwKICAgICAgICAgTmV3RXhwciwgUHJlRXhwciwgUG9zdEV4cHIs
IFVuYXJ5RXhwciwgQmluYXJ5RXhwciwKICAgICAgICAgQ29uZGl0aW9uYWxFeHByLCBBc3NpZ25t
ZW50RXhwciwgVHlwZW9mRXhwciwgTmV3VGFyZ2V0RXhwciwKLSAgICAgICAgRGVsZXRlRXhwciwg
QXJyYXlMaXRlcmFsRXhwciwgQmluZGluZ0Rlc3RydWN0dXJpbmcsCisgICAgICAgIERlbGV0ZUV4
cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZXN0cnVjdHVyaW5nLCBSZXN0UGFyYW1ldGVy
LAogICAgICAgICBBcnJheURlc3RydWN0dXJpbmcsIE9iamVjdERlc3RydWN0dXJpbmcsIFNvdXJj
ZUVsZW1lbnRzUmVzdWx0LAogICAgICAgICBGdW5jdGlvbkJvZHlSZXN1bHQsIFNwcmVhZEV4cHIs
IEFyZ3VtZW50c1Jlc3VsdCwKICAgICAgICAgUHJvcGVydHlMaXN0UmVzdWx0LCBBcmd1bWVudHNM
aXN0UmVzdWx0LCBFbGVtZW50c0xpc3RSZXN1bHQsCkBAIC0xMzUsNiArMTM1LDcgQEAgcHVibGlj
OgogICAgIHR5cGVkZWYgaW50IERlc3RydWN0dXJpbmdQYXR0ZXJuOwogICAgIHR5cGVkZWYgRGVz
dHJ1Y3R1cmluZ1BhdHRlcm4gQXJyYXlQYXR0ZXJuOwogICAgIHR5cGVkZWYgRGVzdHJ1Y3R1cmlu
Z1BhdHRlcm4gT2JqZWN0UGF0dGVybjsKKyAgICB0eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJu
IFJlc3RQYXR0ZXJuOwogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgQ3JlYXRlc0FTVCA9IGZhbHNl
OwogICAgIHN0YXRpYyBjb25zdCBib29sIE5lZWRzRnJlZVZhcmlhYmxlSW5mbyA9IGZhbHNlOwpA
QCAtMzQ2LDYgKzM0NywxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gQmluZGlu
Z0Rlc3RydWN0dXJpbmc7CiAgICAgfQorICAgIFJlc3RQYXR0ZXJuIGNyZWF0ZVJlc3RQYXJhbWV0
ZXIoY29uc3QgSWRlbnRpZmllciYsIHNpemVfdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mLCBjb25z
dCBKU1RleHRQb3NpdGlvbiYpCisgICAgeyAKKyAgICAgICAgcmV0dXJuIFJlc3RQYXJhbWV0ZXI7
CisgICAgfQogCiAgICAgYm9vbCBpc0JpbmRpbmdOb2RlKERlc3RydWN0dXJpbmdQYXR0ZXJuIHBh
dHRlcm4pCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MDEsNCArNzAxLDIwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQog
ICAgIFJFVFVSTihyZXNvbHZlZFNjb3BlKTsKIH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkpCit7CisgICAgQkVHSU4oKTsKKyAgICB1bnNpZ25l
ZCBudW1QYXJhbXNUb1NraXAgPSBwY1syXS51LnVuc2lnbmVkVmFsdWU7CisgICAgdW5zaWduZWQg
bnVtQXJndW1lbnRzVG9GdW5jdGlvbiA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAo
bnVtQXJndW1lbnRzVG9GdW5jdGlvbiA8PSBudW1QYXJhbXNUb1NraXApCisgICAgICAgIEVORCgp
OworCisgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KE9QKDEpLmpzVmFsdWUo
KSk7CisgICAgc2l6ZV90IGFycmF5U2l6ZSA9IG51bUFyZ3VtZW50c1RvRnVuY3Rpb24gLSBudW1Q
YXJhbXNUb1NraXA7CisgICAgYXJyYXktPnNldExlbmd0aChleGVjLCBhcnJheVNpemUpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspCisgICAgICAgIGFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCBpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpICsgbnVtUGFy
YW1zVG9Ta2lwKSk7CisgICAgRU5EKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJl
dmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNiArMjkzLDcgQEAgU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9hc3NlcnQpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX3B1c2hfd2l0aF9zY29wZSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX3Jlc29sdmVfc2NvcGUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9maWxs
X3Jlc3RfcGFyYW1ldGVyX2FycmF5KTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMTA4NSwx
NSArMTA4NSwxNSBAQAogLSBwYXRoOiBlczYvUmVnRXhwX3lfYW5kX3VfZmxhZ3NfeV9mbGFnX2xh
c3RJbmRleC5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvcmVzdF9wYXJhbWV0
ZXJzX2FyZ3VtZW50c19vYmplY3RfaW50ZXJhY3Rpb24uanMKLSAgY21kOiBydW5FUzYgOmZhaWwK
KyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvcmVzdF9wYXJhbWV0ZXJzX2Jhc2lj
X2Z1bmN0aW9uYWxpdHkuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5v
cm1hbAogLSBwYXRoOiBlczYvcmVzdF9wYXJhbWV0ZXJzX2NhbnRfYmVfdXNlZF9pbl9zZXR0ZXJz
LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDog
ZXM2L3Jlc3RfcGFyYW1ldGVyc19mdW5jdGlvbl9sZW5ndGhfcHJvcGVydHkuanMKLSAgY21kOiBy
dW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvcmVzdF9wYXJh
bWV0ZXJzX25ld19GdW5jdGlvbl9zdXBwb3J0LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNt
ZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1NldF9pdGVyYXRvcl9jbG9zaW5nLmpzCiAg
IGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9TZXRfU2V0W1N5bWJvbC5zcGVjaWVzXS5q
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRl
ci1hbmQtZGVmYXVsdC1hcmd1bWVudHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1hbmQtZGVmYXVsdC1hcmd1bWVudHMu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jl
c3QtcGFyYW1ldGVyLWFuZC1kZWZhdWx0LWFyZ3VtZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM2IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIikKK30KK25vSW5saW5lKGFzc2VydCk7CisK
K2Z1bmN0aW9uIHNob3VsZFRocm93VERaKGZ1bmMpIHsKKyAgICB2YXIgaGFzVGhyb3duID0gZmFs
c2U7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2goZSkgeworICAgICAg
ICBpZiAoZS5uYW1lLmluZGV4T2YoIlJlZmVyZW5jZUVycm9yIikgIT09IC0xKQorICAgICAgICAg
ICAgaGFzVGhyb3duID0gdHJ1ZTsKKyAgICB9CisgICAgYXNzZXJ0KGhhc1Rocm93bik7Cit9Citu
b0lubGluZShzaG91bGRUaHJvd1REWik7CisKK2Z1bmN0aW9uIGZvbyhhID0gZnVuY3Rpb24oKSB7
IHJldHVybiBjOyB9LCBiID0gYSgpLCAuLi5jKSB7CisgICAgcmV0dXJuIGEoKTsKK30KK25vSW5s
aW5lKGZvbyk7CisKK2Z1bmN0aW9uIGJheihhID0gZnVuY3Rpb24oKSB7IHJldHVybiBiOyB9LCAu
Li5iKSB7CisgICAgcmV0dXJuIGEoKTsKK30KKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBp
KyspIHsKKyAgICBzaG91bGRUaHJvd1REWihmdW5jdGlvbigpIHsgZm9vKHVuZGVmaW5lZCwgdW5k
ZWZpbmVkLCAxMCwgMjApOyB9KTsKKyAgICBsZXQgbyA9IHt4OiAyMH07CisgICAgbGV0IHJlc3Vs
dCA9IGJheih1bmRlZmluZWQsIDEwLCBvLCAiYmF6Iik7CisgICAgYXNzZXJ0KHJlc3VsdC5sZW5n
dGggPT09IDMpOworICAgIGFzc2VydChyZXN1bHRbMF0gPT09IDEwKTsKKyAgICBhc3NlcnQocmVz
dWx0WzFdID09PSBvKTsKKyAgICBhc3NlcnQocmVzdWx0WzJdID09PSAiYmF6Iik7Cit9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWJhc2lj
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jl
c3QtcGFyYW1ldGVyLWJhc2ljcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYmFzaWNzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODggQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0
KTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmIpIHsKKyAgICByZXR1cm4gYjsgICAgCit9Citub0lu
bGluZShmb28pOworCitmdW5jdGlvbiBiYXIoYSwgLi4uYikgeworICAgIHJldHVybiBhICsgYlsw
XTsKK30KK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGJheihhLCAuLi5iKSB7CisgICAgZnVu
Y3Rpb24gY2FwdHVyZSgpIHsgcmV0dXJuIGI7IH0KKyAgICBhc3NlcnQoYlswXSA9PT0gY2FwdHVy
ZSgpWzBdKTsKKyAgICByZXR1cm4gYSArIGJbMF07Cit9Citub0lubGluZShiYXopOworCitmdW5j
dGlvbiBqYXooYSwgLi4uYikgeworICAgIGZ1bmN0aW9uIGNhcHR1cmUoKSB7IHJldHVybiBhICsg
YlswXTsgfQorICAgIGFzc2VydChjYXB0dXJlKCkgPT09IGEgKyBiWzBdKTsKKyAgICByZXR1cm4g
YSArIGJbMF07Cit9Citub0lubGluZShqYXopOworCitmdW5jdGlvbiBrYXooYSA9IDEwLCAuLi5i
KSB7CisgICAgcmV0dXJuIGEgKyBiWzBdCit9Citub0lubGluZShrYXopOworCitmdW5jdGlvbiBy
YXooYSA9IDEwLCAuLi5iKSB7CisgICAgZnVuY3Rpb24gY2FwdHVyZSgpIHsgcmV0dXJuIGEgKyBi
WzBdOyB9CisgICAgYXNzZXJ0KGNhcHR1cmUoKSA9PT0gYSArIGJbMF0pOworICAgIHJldHVybiBh
ICsgYlswXTsKK30KK25vSW5saW5lKHJheik7CisKK2Z1bmN0aW9uIHJlc3RMZW5ndGgoYSwgLi4u
YikgeworICAgIHJldHVybiBiLmxlbmd0aDsKK30KK25vSW5saW5lKHJlc3RMZW5ndGgpOworCitm
dW5jdGlvbiB0ZXN0QXJndW1lbnRzT2JqZWN0KC4uLmFyZ3MpIHsKKyAgICBhc3NlcnQoYXJncy5s
ZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJn
cy5sZW5ndGg7IGkrKykKKyAgICAgICAgYXNzZXJ0KGFyZ3NbaV0gPT09IGFyZ3VtZW50c1tpXSk7
Cit9Citub0lubGluZSh0ZXN0QXJndW1lbnRzT2JqZWN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IGExID0gZm9vKDEwLCAyMCk7CisgICAgYXNzZXJ0KGEx
IGluc3RhbmNlb2YgQXJyYXkpOworICAgIGFzc2VydChhMS5sZW5ndGggPT09IDEpOworICAgIGFz
c2VydChhMVswXSA9PT0gMjApOworCisgICAgbGV0IGEyID0gZm9vKDEwKTsKKyAgICBhc3NlcnQo
YTIgaW5zdGFuY2VvZiBBcnJheSk7CisgICAgYXNzZXJ0KGEyLmxlbmd0aCA9PT0gMCk7CisKKyAg
ICBsZXQgYTMgPSBiYXIoMTAsIDIwKTsKKyAgICBhc3NlcnQoYTMgPT09IDMwKTsKKworICAgIGxl
dCBhNCA9IGJheigxMCwgMjApOworICAgIGFzc2VydChhNCA9PT0gMzApOworCisgICAgbGV0IGE1
ID0gamF6KCJoZWxsbyIsICJ3b3JsZCIpOworICAgIGFzc2VydChhNSA9PT0gImhlbGxvd29ybGQi
KTsKKworICAgIGxldCBhNiA9IGtheih1bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTYgPT09
IDUwKTsKKworICAgIGxldCBhNyA9IGtheih1bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTcg
PT09IDUwKTsKKworICAgIGFzc2VydChyZXN0TGVuZ3RoKCkgPT09IDApOworICAgIGFzc2VydChy
ZXN0TGVuZ3RoKDEpID09PSAwKTsKKyAgICBhc3NlcnQocmVzdExlbmd0aCgxLCAxKSA9PT0gMSk7
CisgICAgYXNzZXJ0KHJlc3RMZW5ndGgoMSwgMSwgMSkgPT09IDIpOworICAgIGFzc2VydChyZXN0
TGVuZ3RoKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEpID09PSAyMCk7CisKKyAgICBsZXQgb2JqID0ge2ZvbzogNDB9OworICAgIHRl
c3RBcmd1bWVudHNPYmplY3QoImhlbGxvIiwgb2JqLCAxMDAsIDEyLjM0LCAid29ybGQiLCBvYmos
IFsxLCAyLCAzXSk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3Jlc3QtcGFyYW1ldGVyLWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxpbmVkLmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1p
bmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKK2Z1bmN0aW9uIGFzc2Vy
dChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRp
b24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLnJlc3QpIHsKKyAg
ICByZXR1cm4gcmVzdDsKK30KKworZnVuY3Rpb24gZm9vKGEsIGIsIGMpIHsKKyAgICByZXR1cm4g
YmFyKGEsIGIsIGMpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDsgaSsrKSB7CisgICAgbGV0IHJlc3VsdCA9IGZvbygxMCwgMjAsIDMwKTsKKyAgICBhc3Nl
cnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMTApOwor
ICAgIGFzc2VydChyZXN1bHRbMV0gPT09IDIwKTsKKyAgICBhc3NlcnQocmVzdWx0WzJdID09PSAz
MCk7Cit9CisKK2Z1bmN0aW9uIGJheiguLi5yZXN0KSB7CisgICAgcmV0dXJuIHJlc3Q7Cit9Citm
dW5jdGlvbiBqYXooYSwgYiwgYykgeworICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwgQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7Cit9Citub0lubGluZShqYXopOworCitm
b3IgKGxldCBpID0gMDsgaSA8IDUwMDAwOyBpKyspIHsKKyAgICBsZXQgcmVzdWx0ID0gamF6KDEw
LCAyMCwgMzApOworICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICBhc3NlcnQo
cmVzdWx0WzBdID09PSAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gMjApOworICAgIGFz
c2VydChyZXN1bHRbMl0gPT09IDMwKTsKK30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjYwMykKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE1LTExLTE4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtF
UzZdIEFkZCBzdXBwb3J0IGZvciByZXN0IHBhcmFtZXRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NDA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9wYXJzZXItc3ludGF4LWNoZWNrLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvcGFyc2VyLXN5bnRheC1jaGVjay5q
czoKKyAgICAgICAgKGNhdGNoKToKKwogMjAxNS0xMS0xOCAgRXJpYyBDYXJsc29uICA8ZXJpYy5j
YXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVN0cmVhbTogSW1wbGVtZW50IE1lZGlh
RGV2aWNlcy5nZXRTdXBwb3J0ZWRDb25zdHJhaW50cwpJbmRleDogTGF5b3V0VGVzdHMvanMvcGFy
c2VyLXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcGFyc2VyLXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE5MjYwMykKKysr
IExheW91dFRlc3RzL2pzL3BhcnNlci1zeW50YXgtY2hlY2stZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC05MjksNiArOTI5LDQ5IEBAIFBBU1MgSW52YWxpZDogIjEgJSAKIC0tIgogUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgMSAlIAogLS0gfSIKK1Jlc3QgcGFyYW1ldGVyCitQ
QVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oLi4uYSkgeyB9IgorUEFTUyBWYWxpZDogICAiZnVu
Y3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmEpIHsgfSB9IgorUEFTUyBWYWxpZDogICAiZnVu
Y3Rpb24gZm9vKGEsIC4uLmIpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7IGZ1
bmN0aW9uIGZvbyhhLCAuLi5iKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyhh
ID0gMjAsIC4uLmIpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9u
IGZvbyhhID0gMjAsIC4uLmIpIHsgfSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZm9vKGEs
IGIsIGMsIGQsIGUsIGYsIGcsIC4uLmgpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYo
KSB7IGZ1bmN0aW9uIGZvbyhhLCBiLCBjLCBkLCBlLCBmLCBnLCAuLi5oKSB7IH0gfSIKK1BBU1Mg
SW52YWxpZDogImZ1bmN0aW9uIGZvbyhhLCAuLi5iLCBjKSB7IH0iCitQQVNTIEludmFsaWQ6ICJm
dW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oYSwgLi4uYiwgYykgeyB9IH0iCitQQVNTIEludmFs
aWQ6ICJmdW5jdGlvbiBmb28oYSwgLi4uYiwgKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlv
biBmKCkgeyBmdW5jdGlvbiBmb28oYSwgLi4uYiwgKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1
bmN0aW9uIGZvbyhhLCAuLi5hKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBm
dW5jdGlvbiBmb28oYSwgLi4uYSkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28o
Li4uYSwgLi4uYikgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24g
Zm9vKC4uLmEsIC4uLmIpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLmIs
IC4uLmIpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbygu
Li5iLCAuLi5iKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi5iICAuLi5i
KSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uYiAg
Li4uYikgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oYSwgYSwgLi4uYikgeyB9
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKGEsIGEsIC4uLmIp
IHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLntifSkgeyB9IgorUEFTUyBJ
bnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLntifSkgeyB9IH0iCitQQVNT
IEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uW2JdKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5j
dGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uW2JdKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1
bmN0aW9uIGZvbyguLi4xMjMpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1
bmN0aW9uIGZvbyguLi4xMjMpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4u
LjEyM2FiYykgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9v
KC4uLjEyM2FiYykgeyB9IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oLi4uYWJjMTIz
KSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uYWJj
MTIzKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyguLi5sZXQpIHsgfSIKK1BB
U1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5sZXQpIHsgfSB9Igor
UEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0iCitQ
QVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyAndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGZvbygu
Li5sZXQpIHsgfSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0i
CitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4ueWllbGQpIHsg
fSB9IgorUEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4ueWllbGQp
IHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7ICd1c2Ugc3RyaWN0JzsgZnVuY3Rp
b24gZm9vKC4uLnlpZWxkKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi5p
ZikgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmlm
KSB7IH0gfSIKIFBBU1MgZS5saW5lIGlzIDEKIFBBU1MgZm9vIGlzICdQQVNTJwogUEFTUyBiYXIg
aXMgJ1BBU1MnCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcGFyc2VyLXN5bnRh
eC1jaGVjay5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcGFy
c2VyLXN5bnRheC1jaGVjay5qcwkocmV2aXNpb24gMTkyNjAzKQorKysgTGF5b3V0VGVzdHMvanMv
c2NyaXB0LXRlc3RzL3BhcnNlci1zeW50YXgtY2hlY2suanMJKHdvcmtpbmcgY29weSkKQEAgLTU1
Niw2ICs1NTYsMjkgQEAgaW52YWxpZCgiMSAlIC0tIik7CiBpbnZhbGlkKCIxICUgXG4rKyIpOwog
aW52YWxpZCgiMSAlIFxuLS0iKTsKIAorZGVidWcoIlJlc3QgcGFyYW1ldGVyIik7Cit2YWxpZCgi
ZnVuY3Rpb24gZm9vKC4uLmEpIHsgfSIpOwordmFsaWQoImZ1bmN0aW9uIGZvbyhhLCAuLi5iKSB7
IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oYSA9IDIwLCAuLi5iKSB7IH0iKTsKK3ZhbGlkKCJm
dW5jdGlvbiBmb28oYSwgYiwgYywgZCwgZSwgZiwgZywgLi4uaCkgeyB9Iik7CitpbnZhbGlkKCJm
dW5jdGlvbiBmb28oYSwgLi4uYiwgYykgeyB9IikKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyhhLCAu
Li5iLCApIHsgfSIpCitpbnZhbGlkKCJmdW5jdGlvbiBmb28oYSwgLi4uYSkgeyB9Iik7CitpbnZh
bGlkKCJmdW5jdGlvbiBmb28oLi4uYSwgLi4uYikgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBm
b28oLi4uYiwgLi4uYikgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uYiAgLi4uYikg
eyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oYSwgYSwgLi4uYikgeyB9Iik7CitpbnZhbGlk
KCJmdW5jdGlvbiBmb28oLi4ue2J9KSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi5b
Yl0pIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9vKC4uLjEyMykgeyB9Iik7CitpbnZhbGlk
KCJmdW5jdGlvbiBmb28oLi4uMTIzYWJjKSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oLi4u
YWJjMTIzKSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0iKTsKK2ludmFs
aWQoIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9Iik7Cit2YWxpZCgiZnVu
Y3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0iKTsKK2ludmFsaWQoIid1c2Ugc3RyaWN0JzsgZnVuY3Rp
b24gZm9vKC4uLnlpZWxkKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi5pZikgeyB9
Iik7CisKIAogCiB0cnkgeyBldmFsKCJhLmIuYyA9IHt9OyIpOyB9IGNhdGNoKGUxKSB7IGU9ZTE7
IHNob3VsZEJlKCJlLmxpbmUiLCAiMSIpIH0K
</data>
<flag name="review"
          id="290848"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265880</attachid>
            <date>2015-11-19 12:07:19 -0800</date>
            <delta_ts>2015-11-19 12:26:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>59940</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxNS0xMS0xOCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbRVM2XSBBZGQgc3VwcG9ydCBmb3IgcmVzdCBwYXJhbWV0ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyByZXN0
IHBhcmFtZXRlcnMgZnJvbSB0aGUgRVM2IHNwZWMuCisgICAgICAgIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb24tZGVm
aW5pdGlvbnMKKworICAgICAgICBXZSBpbXBsZW1lbnQgdGhlIHJlc3QgcGFyYW1ldGVyIGFzIGEg
bmV3IEFTVCBub2RlLiBUaGlzIEFTVCBub2RlCisgICAgICAgIGxvd2VycyB0byAib3BfbmV3X2Fy
cmF5IFgsIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkgWCIuIE5vdGUKKyAgICAgICAgdGhh
dCB0aGUgb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSBvcGNvZGUgZG9lcyBub3QgaGF2ZSBh
IHJlc3VsdC4KKyAgICAgICAgVGhlIGJ1bGsgb2YgdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRpbmcg
b3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheS4KKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1l
bnRzIHRoaXMgaW4gYWxsIGZvdXIgdGllcnMgaW4gYSBzdHJhaWdodCBmb3J3YXJkIHdheS4KKyAg
ICAgICAgVGhlIG9wY29kZSBpcyBpbXBsZW1lbnRlZCBhcyBhIEMgY2FsbCB0aGF0IHdpbGwgcmVh
ZCB0aGUgcGVydGluZW50CisgICAgICAgIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxsIGZyYW1lIGFu
ZCBmaWxsIHRoZW0gaW50byB0aGUgYXJyYXkuCisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUxpc3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAg
ICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0
cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0
dXBGdW5jdGlvblNjb3BlU3RhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
aW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVyKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cDoKKyAgICAgICAgKEpTQzo6QmluZGluZ05vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKToK
KyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJz
KToKKyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OnRvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmJpbmRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlc3RQ
YXJhbWV0ZXJOb2RlOjplbWl0KToKKyAgICAgICAgKEpTQzo6U3ByZWFkRXhwcmVzc2lvbk5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEVwb2NoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6ZHVtcENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpw
cm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNs
b25lZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlRmlsbFJlc3RQ
YXJhbWV0ZXJBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Ny
ZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBw
YXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCaW5k
aW5nTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZXN0UGFyYW1l
dGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6c2V0RW5kT2Zmc2V0KToKKyAgICAgICAg
KiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nTm9kZTo6
QmluZGluZ05vZGUpOgorICAgICAgICAoSlNDOjpSZXN0UGFyYW1ldGVyTm9kZTo6UmVzdFBhcmFt
ZXRlck5vZGUpOgorICAgICAgICAoSlNDOjpEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGU6OkRl
c3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6Cisg
ICAgICAgIChKU0M6OkRlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZTo6aXNCaW5kaW5nTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZTo6aXNSZXN0UGFyYW1ldGVyKToK
KyAgICAgICAgKEpTQzo6RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlOjplbWl0RGlyZWN0QmluZGlu
Zyk6CisgICAgICAgIChKU0M6OlJlc3RQYXJhbWV0ZXJOb2RlOjpuYW1lKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6ZGVjbGFyZVJlc3RPck5vcm1hbFBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpjcmVhdGVCaW5kaW5nUGF0dGVybik6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpzdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyOjppc1ZhbGlkU3RyaWN0TW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6ZGVjbGFy
ZVBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6YnJlYWtJc1ZhbGlkKToKKyAgICAg
ICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpvcGVyYXRvclN0YWNrUG9wKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHRlc3RzL2VzNi55YW1sOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1hbmQtZGVmYXVsdC1hcmd1bWVudHMuanM6IEFkZGVk
LgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHNob3VsZFRocm93VERaKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgIChiYXopOgorICAgICAgICAoaS5zaG91bGRUaHJvd1REWik6CisgICAg
ICAgICogdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWJhc2ljcy5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChj
YXB0dXJlKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChqYXopOgorICAgICAgICAoa2F6KToK
KyAgICAgICAgKHJheik6CisgICAgICAgIChyZXN0TGVuZ3RoKToKKyAgICAgICAgKHRlc3RBcmd1
bWVudHNPYmplY3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxp
bmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChiYXIpOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChqYXopOgorCiAyMDE1LTExLTE4ICBT
YWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFRoZXJlIGlzIGEgYnVn
IHdoZW4gZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBtaXhlZCB3aXRoIGRlc3RydWN0dXJp
bmcgcGFyYW1ldGVyIHZhbHVlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNyArMTI4LDggQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2VudW1lcmF0b3Jf
Z2VuZXJpY19wbmFtZSIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfdG9faW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9sb2FkX2Fycm93ZnVuY3Rpb25fdGhpcyIsICJsZW5ndGgiIDogMiB9LAotICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfYXNzZXJ0IiwgImxlbmd0aCIgOiAzIH0KKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2Fzc2VydCIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSIsICJsZW5ndGgiOiAzIH0KICAg
ICAgICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MCw3ICs3MCw4IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICBj
YXNlIG9wX2plcV9udWxsOgogICAgIGNhc2Ugb3Bfam5lcV9udWxsOgogICAgIGNhc2Ugb3BfZGVj
OgotICAgIGNhc2Ugb3BfaW5jOiB7CisgICAgY2FzZSBvcF9pbmM6IAorICAgIGNhc2Ugb3BfZmls
bF9yZXN0X3BhcmFtZXRlcl9hcnJheTogewogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjQ3LDYgKzI0OCw3IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZU9mZnNldChDb2RlQmwKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5n
ZXRPcGNvZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwogICAgIHN3aXRjaCAob3Bjb2RlSUQp
IHsKICAgICAvLyBUaGVzZSBkb24ndCBkZWZpbmUgYW55dGhpbmcuCisgICAgY2FzZSBvcF9maWxs
X3Jlc3RfcGFyYW1ldGVyX2FycmF5OgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgogICAgIGNh
c2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTkyNjAz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4MSw2ICs3ODEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29k
ZSgKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9maWxsX3Jl
c3RfcGFyYW1ldGVyX2FycmF5OiB7CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dGYoIiVzLCAiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CisgICAgICAgICAgICBzaXplX3Qg
YXJndW1lbnRPZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8c2l6ZV90PigoKytpdCktPnUucG9pbnRlcik7
CisgICAgICAgICAgICBvdXQucHJpbnRmKCJBcmd1bWVudHNPZmZzZXQ6ICV6dSIsIGFyZ3VtZW50
T2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
Y3JlYXRlX3RoaXM6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTkyNjAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDYgKzc1LDEzIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIHUu
anNDZWxsLmNsZWFyKCk7CiAgICAgICAgIHUub3BlcmFuZCA9IG9wZXJhbmQ7CiAgICAgfQorICAg
IEluc3RydWN0aW9uKHVuc2lnbmVkIHVuc2lnbmVkVmFsdWUpCisgICAgeworICAgICAgICAvLyBX
ZSBoYXZlIHRvIGluaXRpYWxpemUgb25lIG9mIHRoZSBwb2ludGVyIG1lbWJlcnMgdG8gZW5zdXJl
IHRoYXQKKyAgICAgICAgLy8gdGhlIGVudGlyZSBzdHJ1Y3QgaXMgaW5pdGlhbGl6ZWQgaW4gNjQt
Yml0LgorICAgICAgICB1LmpzQ2VsbC5jbGVhcigpOworICAgICAgICB1LnVuc2lnbmVkVmFsdWUg
PSB1bnNpZ25lZFZhbHVlOworICAgIH0KIAogICAgIEluc3RydWN0aW9uKFB1dEJ5SWRGbGFncyBm
bGFncykKICAgICB7CkBAIC0xMTIsNiArMTE5LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAg
ICB1bmlvbiB7CiAgICAgICAgIE9wY29kZSBvcGNvZGU7CiAgICAgICAgIGludCBvcGVyYW5kOwor
ICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZFZhbHVlOwogICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN0cnVjdHVyZT4gc3RydWN0dXJlOwogICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsK
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4gc3ltYm9sVGFibGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDYgKzcwLDkgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAog
ICAgIGlmIChtX25lZWRUb0luaXRpYWxpemVBcmd1bWVudHMpCiAgICAgICAgIGluaXRpYWxpemVW
YXJpYWJsZSh2YXJpYWJsZShwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSwgbV9hcmd1bWVudHNS
ZWdpc3Rlcik7CiAKKyAgICBpZiAobV9yZXN0UGFyYW1ldGVyKQorICAgICAgICBtX3Jlc3RQYXJh
bWV0ZXItPmVtaXQoKnRoaXMpOworCiAgICAgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
dGVtcCA9IG5ld1RlbXBvcmFyeSgpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZ2xvYmFs
U2NvcGU7CkBAIC0yNzIsOCArMjc1LDE0IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJlIG5vdGVkLgogICAg
IG1fcGFyYW1ldGVycy5ncm93KHBhcmFtZXRlcnMuc2l6ZSgpICsgMSk7IC8vIHJlc2VydmUgc3Bh
Y2UgZm9yICJ0aGlzIgogICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KGluaXRpYWxpemVOZXh0
UGFyYW1ldGVyKCktPmluZGV4KCkpOyAvLyB0aGlzCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGluaXRpYWxpemVOZXh0UGFyYW1l
dGVyKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgYXV0byBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKKyAg
ICAgICAgaWYgKHBhdHRlcm4tPmlzUmVzdFBhcmFtZXRlcigpKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9yZXN0UGFyYW1ldGVyKTsKKyAgICAgICAgICAgIG1fcmVzdFBhcmFtZXRl
ciA9IHN0YXRpY19jYXN0PFJlc3RQYXJhbWV0ZXJOb2RlKj4ocGF0dGVybik7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgaW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKTsKKyAgICB9CiAgICAg
CiAgICAgLy8gRmlndXJlIG91dCBzb21lIGludGVyZXN0aW5nIGZhY3RzIGFib3V0IG91ciBhcmd1
bWVudHMuCiAgICAgYm9vbCBjYXB0dXJlc0FueUFyZ3VtZW50QnlOYW1lID0gZmFsc2U7CkBAIC0z
MDcsNyArMzE2LDE0IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgbV9hcmd1bWVudHNSZWdpc3Rlci0+cmVmKCk7CiAgICAgfQogICAgIAotICAgIGlm
IChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSAmJiAhcGFyYW1l
dGVycy5oYXNEZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpIHsKKyAgICAvLyBodHRwOi8vd3d3LmVj
bWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wL2luZGV4Lmh0bWwjc2VjLWZ1bmN0aW9u
ZGVjbGFyYXRpb25pbnN0YW50aWF0aW9uCisgICAgLy8gVGhpcyBpbXBsZW1lbnRzIElzU2ltcGxl
UGFyYW1ldGVyTGlzdCBpbiB0aGUgRWNtYSAyMDE1IHNwZWMuCisgICAgLy8gSWYgSXNTaW1wbGVQ
YXJhbWV0ZXJMaXN0IGlzIGZhbHNlLCB3ZSB3aWxsIGNyZWF0ZSBhIHN0cmljdC1tb2RlIGxpa2Ug
YXJndW1lbnRzIG9iamVjdC4KKyAgICAvLyBJc1NpbXBsZVBhcmFtZXRlckxpc3QgaXMgZmFsc2Ug
aWYgdGhlIGFyZ3VtZW50IGxpc3QgY29udGFpbnMgYW55IGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVl
cywKKyAgICAvLyBhIHJlc3QgcGFyYW1ldGVyLCBvciBhbnkgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJu
cy4KKyAgICAvLyBGSVhNRTogVGFrZSBpbnRvIGFjY291bnQgZGVzdHJ1Y3R1cmluZyB0byBtYWtl
IGlzU2ltcGxlUGFyYW1ldGVyTGlzdCBmYWxzZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MTQ1MAorICAgIGJvb2wgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0ID0gIXBh
cmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpICYmICFtX3Jlc3RQYXJhbWV0ZXI7
CisgICAgaWYgKG5lZWRzQXJndW1lbnRzICYmICFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYm
IGlzU2ltcGxlUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbnkg
Zm9ybWFsIHBhcmFtZXRlciBieSBuYW1lLCB0aGVuIHdlIHVzZSBTY29wZWRBcmd1bWVudHMuIE90
aGVyd2lzZSB3ZQogICAgICAgICAvLyB1c2UgRGlyZWN0QXJndW1lbnRzLiBXaXRoIFNjb3BlZEFy
Z3VtZW50cywgd2UgbGlmdCBhbGwgb2Ygb3VyIGFyZ3VtZW50cyBpbnRvIHRoZQogICAgICAgICAv
LyBhY3RpdmF0aW9uLgpAQCAtMzg5LDcgKzQwNSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobmVlZHNB
cmd1bWVudHMgJiYgKGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgfHwgcGFyYW1ldGVycy5oYXNE
ZWZhdWx0UGFyYW1ldGVyVmFsdWVzKCkpKSB7CisgICAgaWYgKG5lZWRzQXJndW1lbnRzICYmIChj
b2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpIHx8ICFpc1NpbXBsZVBhcmFtZXRlckxpc3QpKSB7CiAg
ICAgICAgIC8vIEFsbG9jYXRlIGFuIG91dC1vZi1iYW5kcyBhcmd1bWVudHMgb2JqZWN0LgogICAg
ICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hcmd1bWVudHNSZWdpc3Rlci0+aW5kZXgoKSk7CkBA
IC03MDcsNiArNzIzLDggQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZURlZmF1
bAogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IG5ld1RlbXBvcmFyeSgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewog
ICAgICAgICAgICAgc3RkOjpwYWlyPERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSosIEV4cHJlc3Np
b25Ob2RlKj4gcGFyYW1ldGVyID0gcGFyYW1ldGVycy5hdChpKTsKKyAgICAgICAgICAgIGlmIChw
YXJhbWV0ZXIuZmlyc3QtPmlzUmVzdFBhcmFtZXRlcigpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBhcmFtZXRlclZhbHVlID0gJnJl
Z2lzdGVyRm9yKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEgKyBpKSk7CiAgICAgICAgICAg
ICBlbWl0TW92ZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXJWYWx1ZS5nZXQoKSk7CiAgICAgICAgICAg
ICBpZiAocGFyYW1ldGVyLnNlY29uZCkgewpAQCAtNzY0LDcgKzc4Miw3IEBAIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBkZWZh
dWx0IHBhcmFtZXRlciB2YWx1ZXMsIHdlIGhhbmRsZSB0aGlzIGNhc2UgYWJvdmUuCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7CiAgICAg
ICAgICAgICBEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqIHBhdHRlcm4gPSBwYXJhbWV0ZXJzLmF0
KGkpLmZpcnN0OwotICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5pc0JpbmRpbmdOb2RlKCkpIHsK
KyAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpICYmICFwYXR0ZXJuLT5p
c1Jlc3RQYXJhbWV0ZXIoKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBw
YXJhbWV0ZXJWYWx1ZSA9ICZyZWdpc3RlckZvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
ICsgaSkpOwogICAgICAgICAgICAgICAgIHBhdHRlcm4tPmJpbmRWYWx1ZSgqdGhpcywgcGFyYW1l
dGVyVmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgfQpAQCAtMzgxMyw0ICszODMxLDE1IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmludmFsaWRhdGVGb3JJbkMKICAgICB9CiB9CiAKK1JlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzdFBhcmFtZXRlcihSZWdpc3RlcklEKiBy
ZXN1bHQsIHVuc2lnbmVkIG51bVBhcmFtZXRlcnNUb1NraXApCit7CisgICAgZW1pdE5ld0FycmF5
KHJlc3VsdCwgbnVsbHB0ciwgMCk7CisKKyAgICBlbWl0T3Bjb2RlKG9wX2ZpbGxfcmVzdF9wYXJh
bWV0ZXJfYXJyYXkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXN1bHQtPmluZGV4KCkp
OworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsNiArNTk4LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJdGVyYXRvck5leHQoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgY29uc3QgVGhyb3dhYmxlRXhwcmVz
c2lvbkRhdGEqIG5vZGUpOwogICAgICAgICB2b2lkIGVtaXRJdGVyYXRvckNsb3NlKFJlZ2lzdGVy
SUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSk7CiAKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc3RQYXJhbWV0ZXIoUmVnaXN0ZXJJRCogcmVzdWx0LCB1
bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKwogICAgICAgICBib29sIGVtaXRSZWFkT25s
eUV4Y2VwdGlvbklmTmVlZGVkKGNvbnN0IFZhcmlhYmxlJik7CiAKICAgICAgICAgLy8gU3RhcnQg
YSB0cnkgYmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KQEAgLTgyOCw2ICs4
MzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW51bSBGdW5jdGlvblZhcmlhYmxlVHlw
ZSA6IHVpbnQ4X3QgeyBOb3JtYWxGdW5jdGlvblZhcmlhYmxlLCBHbG9iYWxGdW5jdGlvblZhcmlh
YmxlIH07CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8RnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBG
dW5jdGlvblZhcmlhYmxlVHlwZT4+IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplOwogICAgICAgICBi
b29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cyB7IGZhbHNlIH07CisgICAgICAgIFJlc3RQ
YXJhbWV0ZXJOb2RlKiBtX3Jlc3RQYXJhbWV0ZXIgeyBudWxscHRyIH07CiAgICAgICAgIAogICAg
ICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTkyNjAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzk4LDYgKzMzOTgsMzUgQEAgdm9pZCBCaW5kaW5nTm9kZTo6Y29s
bGVjdEJvdW5kSWRlbnRpZmllcgogICAgIGlkZW50aWZpZXJzLmFwcGVuZChtX2JvdW5kUHJvcGVy
dHkpOwogfQogICAgIAordm9pZCBSZXN0UGFyYW1ldGVyTm9kZTo6Y29sbGVjdEJvdW5kSWRlbnRp
ZmllcnMoVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycykgY29uc3QKK3sKKyAgICBpZGVu
dGlmaWVycy5hcHBlbmQobV9uYW1lKTsKK30KK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OnRvU3Ry
aW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAgYnVpbGRlci5hcHBlbmQo
bV9uYW1lLnN0cmluZygpKTsKK30KK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OmJpbmRWYWx1ZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9Cit2b2lkIFJlc3RQYXJhbWV0ZXJOb2RlOjplbWl0KEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCit7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9y
LnZhcmlhYmxlKG1fbmFtZSk7CisgICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2Fs
KCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKGxvY2FsLCBtX251bVBh
cmFtZXRlcnNUb1NraXApOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxvY2Fs
LCB2YXIsIG1fZGl2b3RTdGFydCwgbV9kaXZvdEVuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdFBhcmFtZXRlckFycmF5ID0gZ2VuZXJhdG9y
LmVtaXRSZXN0UGFyYW1ldGVyKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgbV9udW1QYXJhbWV0
ZXJzVG9Ta2lwKTsKKyAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJlc3RQYXJhbWV0ZXJB
cnJheS5nZXQoKSwgdmFyLCBtX2Rpdm90U3RhcnQsIG1fZGl2b3RFbmQpOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZh
cik7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90RW5kLCBtX2Rpdm90
U3RhcnQsIG1fZGl2b3RFbmQpOworICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5n
ZXQoKSwgdmFyLCByZXN0UGFyYW1ldGVyQXJyYXkuZ2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1v
ZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXph
dGlvbik7Cit9CisKKwogUmVnaXN0ZXJJRCogU3ByZWFkRXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKQogewogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTI2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MDgsNiArMjUwOCw5IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1
cm46CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5Ogor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgIGNhc2UgQ2hlY2s6IHsKICAgICAgICAg
Ly8gU2ltcGxpZnkgb3V0IGNoZWNrcyB0aGF0IGRvbid0IGFjdHVhbGx5IGRvIGNoZWNraW5nLgog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMzAsNiArMzMzMCwxMyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRU
b0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfcmVnZXhwKTsKICAgICAgICAgfQor
CisgICAgICAgIGNhc2Ugb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheTogeworICAgICAgICAg
ICAgbm90aWNlQXJndW1lbnRzVXNlKCk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZpbGxSZXN0
UGFyYW1ldGVyQXJyYXksCisgICAgICAgICAgICAgICAgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51LnVuc2lnbmVkVmFsdWUpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9maWxsX3Jl
c3RfcGFyYW1ldGVyX2FycmF5KTsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIC8v
ID09PSBCaXR3aXNlIG9wZXJhdGlvbnMgPT09CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE5LDYgKzIxOSw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2Rl
SUQKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3Bf
Z2V0X3BhcmVudF9zY29wZToKICAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfZmlsbF9y
ZXN0X3BhcmFtZXRlcl9hcnJheToKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7
CiAKICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05ODMsNiAr
OTgzLDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheTogewor
ICAgICAgICByZWFkKFN0YWNrKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAg
ICBjYXNlIE5ld1N0cmluZ09iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw3IEBAIGJvb2wg
ZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldFN0YWNrOgogICAg
IGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKICAgICBjYXNlIFB1dFRvQXJndW1lbnRzOgorICAgIGNh
c2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY4LDYgKzEz
NjgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAg
ICAgY2FzZSBGaWxsUmVzdFBhcmFtZXRlckFycmF5OiB7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBj
YXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBm
b3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNTgsNyArMjE1OCwx
MyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBtX21pc2MuZXBvY2ggPSBlcG9jaC50
b1Vuc2lnbmVkKCk7CiAgICAgfQotICAgIAorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wKCkgPT0gRmlsbFJlc3RQYXJhbWV0
ZXJBcnJheSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcEluZm8p
OworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
ewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNiArMjYyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld0FycmF5QnVmZmVyLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhOZXdUeXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhGaWxsUmVzdFBhcmFtZXRlckFycmF5LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgXAogICAgIC8qIFN1cHBvcnQgZm9yIGFsbG9jYXRpb24gc2lua2luZy4gKi9cCiAgICAgbWFj
cm8oUGhhbnRvbU5ld09iamVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTgsNiArODE4LDE2IEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVDbG8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRmlsbFJlc3RQYXJhbWV0ZXJBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogYXJyYXlBc0NlbGwsIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25l
ZCBudW1iZXJPZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZBcmd1bWVudHMgPiBudW1iZXJPZlBhcmFtc1RvU2tp
cCk7IC8vIFdlIHNob3VsZCBvbmx5IGNhbGwgdGhpcyBmcm9tIEpJVCBjb2RlIHdoZW4gdGhpcyBj
b25kaXRpb24gaXMgdHJ1ZS4KKyAgICBKU0FycmF5KiBhcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4o
YXJyYXlBc0NlbGwpOworICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9IG51bWJlck9mQXJndW1lbnRz
IC0gbnVtYmVyT2ZQYXJhbXNUb1NraXA7CisgICAgYXJyYXktPnNldExlbmd0aChleGVjLCBhcnJh
eVNpemUpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykKKyAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIGFyZ3VtZW50U3RhcnRbaSArIG51
bWJlck9mUGFyYW1zVG9Ta2lwXS5qc1ZhbHVlKCkpOworfQorCiBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb2JqZWN0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ3JlYXRlRGlyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlU2NvcGVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZ2lzdGVyKiBhcmd1
bWVudFN0YXJ0LCBpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlLCBKU0xleGljYWxF
bnZpcm9ubWVudCopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUNsb25l
ZEFyZ3VtZW50c0R1cmluZ0V4aXQoRXhlY1N0YXRlKiwgSW5saW5lQ2FsbEZyYW1lKiwgSlNGdW5j
dGlvbiosIGludDMyX3QgYXJndW1lbnRDb3VudCk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIFJlZ2lz
dGVyKiBhcmd1bWVudFN0YXJ0LCBpbnQzMl90IGxlbmd0aCwgSlNGdW5jdGlvbiogY2FsbGVlKTsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GaWxsUmVzdFBhcmFtZXRlckFycmF5KEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBudW1iZXJP
ZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQgYXJndW1lbnRzQ291bnQpOwogZG91YmxlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7
CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Niw2ICs2NzYsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgRXhpdE9L
OgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICBjYXNlIEZpbGxSZXN0UGFyYW1l
dGVyQXJyYXk6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBU
aGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IG9ubHkgcHJldGVuZHMgdG8gcHJvZHVjZSBhIHZh
bHVlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNiArMzIyLDcgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgUGhhbnRvbUNsb25lZEFy
Z3VtZW50czoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEZvcndhcmRW
YXJhcmdzOgorICAgIGNhc2UgRmlsbFJlc3RQYXJhbWV0ZXJBcnJheToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAx
OTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDM4LDYgKzQ0MzgsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAg
ICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6IHsKKyAgICAgICAgY29tcGlsZUZpbGxSZXN0
UGFyYW1ldGVyQXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2Ug
TmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgogICAgICAgICBjb21waWxl
TmV3RnVuY3Rpb24obm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ0MjcsNiArNDQyNywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6IHsKKyAg
ICAgICAgY29tcGlsZUZpbGxSZXN0UGFyYW1ldGVyQXJyYXkobm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KIAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0
aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzQ0LDYgKzUzNDQsMzQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZp
bGxSZXN0UGFyYW1ldGVyQXJyYXkoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBGaWxsUmVzdFBhcmFtZXRlckFycmF5KTsKKworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGFycmF5KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZWcgYXJyYXlHUFIgPSBhcnJh
eS5ncHIoKTsKKworICAgIEdQUlRlbXBvcmFyeSBhcmd1bWVudHNMZW5ndGgodGhpcyk7CisgICAg
R1BSUmVnIGFyZ3VtZW50c0xlbmd0aEdQUiA9IGFyZ3VtZW50c0xlbmd0aC5ncHIoKTsKKworICAg
IEdQUlRlbXBvcmFyeSBhcmd1bWVudHNTdGFydCh0aGlzKTsKKyAgICBHUFJSZWcgYXJndW1lbnRz
U3RhcnRHUFIgPSBhcmd1bWVudHNTdGFydC5ncHIoKTsKKworICAgIGVtaXRHZXRMZW5ndGgobm9k
ZS0+b3JpZ2luLnNlbWFudGljLCBhcmd1bWVudHNMZW5ndGhHUFIpOworICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JF
cXVhbCwgYXJndW1lbnRzTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIobm9kZS0+bnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAoKSkpOworCisgICAgZW1pdEdldEFyZ3VtZW50U3RhcnQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBhcmd1bWVudHNTdGFydEdQUik7CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnMoYXJndW1lbnRzTGVuZ3RoR1BSLCBhcmd1bWVudHNTdGFydEdQUik7CisgICAgLy8gQXJndW1l
bnRzOiAwOmV4ZWMsIDE6SlNDZWxsKiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVy
IG9mIGFyZ3VtZW50cyB0byBza2lwLCA0Om51bWJlciBvZiBhcmd1bWVudHMgb3Igc2l6ZV90IG1h
eC4KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZpbGxSZXN0UGFyYW1ldGVyQXJyYXksIGFy
cmF5R1BSLCBhcmd1bWVudHNTdGFydEdQUiwgVHJ1c3RlZEltbTMyKG5vZGUtPm51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwKCkpLCBhcmd1bWVudHNMZW5ndGhHUFIpOworICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMoYXJndW1lbnRzTGVuZ3RoR1BSKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqIG5vZGUpCiB7CiAg
ICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+d2F0Y2hwb2ludFNldCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIxLDYgKzEyMjEsMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNSVWlVaSBvcGVyYXRpb24sIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0KQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IGFyZzMsIGFyZzQpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAg
IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CkBA
IC0yMjM4LDYgKzIyNDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlUHV0VG9Bcmd1bWVu
dHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lk
IGNvbXBpbGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVO
b3RpZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoTm9kZSopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTkyNjAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTAsNiArMjEwLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgIGNhc2UgUHV0R2V0dGVyU2V0dGVyQnlJZDoKICAgICBjYXNlIFB1dEdl
dHRlckJ5VmFsOgogICAgIGNhc2UgUHV0U2V0dGVyQnlWYWw6CisgICAgY2FzZSBGaWxsUmVzdFBh
cmFtZXRlckFycmF5OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsxMzAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oWl9KSVRPcGVy
YXRpb25fRUdDLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBc
CiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0
ciwgaW50NjQsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VTSnNzLCBmdW5j
dGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FQ1JVaVVpLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRy
LCBpbnRQdHIsIGludDMyLCBpbnQzMikpCiAgICAgCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5
IDogcHVibGljIENvbW1vblZhbHVlcyB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkyNjAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzNyw2ICs5MzcsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNr
V2F0Y2hkb2dUaW1lcjoKICAgICAgICAgICAgIGNvbXBpbGVDaGVja1dhdGNoZG9nVGltZXIoKTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZpbGxSZXN0UGFyYW1ldGVyQXJyYXk6
CisgICAgICAgICAgICBjb21waWxlRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSgpOworICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6CiAgICAgICAgIGNhc2UgTG9v
cEhpbnQ6CkBAIC0zNTQ1LDYgKzM1NDgsMjggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVGaWxsUmVzdFBh
cmFtZXRlckFycmF5KCkKKyAgICB7ICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGRv
RmlsbFJlc3RQYXJhbWV0ZXIgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZpbGxSZXN0UGFyYW1l
dGVyIEMgY2FsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJGaWxsUmVzdFBhcmFtZXRlciBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgTFZhbHVlIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gbV9vdXQuY29uc3RJbnQzMiht
X25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpOworICAgICAgICBMVmFsdWUgbnVtYmVy
T2ZBcmd1bWVudHMgPSBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZTsKKworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92ZShudW1iZXJPZkFyZ3VtZW50cywgbnVt
YmVyT2ZBcmd1bWVudHNUb1NraXApLAorICAgICAgICAgICAgdW5zdXJlKGRvRmlsbFJlc3RQYXJh
bWV0ZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkb0ZpbGxSZXN0UGFyYW1ldGVyLCBj
b250aW51YXRpb24pOworICAgICAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFy
cmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6
bnVtYmVyIG9mIGFyZ3VtZW50cyBvciBzaXplX3QgbWF4LgorICAgICAgICB2bUNhbGwoCisgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmlsbFJlc3RQYXJhbWV0ZXJBcnJheSks
IG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgZ2V0
QXJndW1lbnRzU3RhcnQoKSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAsIG51bWJlck9mQXJndW1l
bnRzKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KICAgICAKICAgICB2b2lk
IGNvbXBpbGVOZXdPYmplY3QoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1l
bnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCiAgICAg
ICAgIERFRklORV9PUChvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKQorICAgICAgICBE
RUZJTkVfT1Aob3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSkKICAgICAgICAgREVGSU5FX09Q
KG9wX2NoZWNrX3RkeikKICAgICAgICAgREVGSU5FX09QKG9wX2Fzc2VydCkKICAgICAgICAgREVG
SU5FX09QKG9wX2RlYnVnKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAx
OTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OTAsNiArNDkwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfYXNzZXJ0KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9kZWJ1ZyhJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzk5LDYgKzEzOTksMTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZwogICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJy
YXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENh
bGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2ZpbGxf
cmVzdF9wYXJhbWV0ZXJfYXJyYXkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtOTIsNiArOTIsNyBAQCB0eXBlZGVmIGNoYXIqIFVudXNlZFB0cjsKICAgICBWbTogVk0qCiAg
ICAgV3M6IFdhdGNocG9pbnRTZXQqCiAgICAgWjogaW50MzJfdAorICAgIFVpOiB1aW50MzJfdAog
Ki8KIAogdHlwZWRlZiBDYWxsRnJhbWUqIEpJVF9PUEVSQVRJT04gKCpGX0pJVE9wZXJhdGlvbl9F
RkpaWikoRXhlY1N0YXRlKiwgQ2FsbEZyYW1lKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGlu
dDMyX3QpOwpAQCAtMjE5LDYgKzIyMCw3IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RVZtKShFeGVjU3RhdGUqLCBWTSopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJ
VE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElP
TiAoKlZfSklUT3BlcmF0aW9uX1opKGludDMyX3QpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FQ1JVaVVpKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBSZWdpc3Rl
ciosIHVpbnQzMl90LCB1aW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQ
X0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElP
TiAoKlBfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVkZWYgY2hh
ciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VDbGkpKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjc1LDYgKzE2NzUsMTIgQEAgX2xsaW50X29wX3RvX2luZGV4X3N0cmluZzoKICAgICBjYWxs
U2xvd1BhdGgoX3Nsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCiAgICAgZGlzcGF0Y2goMykKIAor
X2xsaW50X29wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXk6CisgICAgdHJhY2VFeGVjdXRpb24o
KQorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkp
CisgICAgZGlzcGF0Y2goMykKKworCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxp
bmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bj
b2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBX
ZSBhc3NlcnQKICMgYXMgbXVjaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
QVNUQnVpbGRlci5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODM2LDYgKzgzNiwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpbmRpbmdOb2RlKGJv
dW5kUHJvcGVydHksIHN0YXJ0LCBlbmQsIGNvbnRleHQpOwogICAgIH0KIAorICAgIFJlc3RQYXJh
bWV0ZXJOb2RlKiBjcmVhdGVSZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIHNp
emVfdCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChtX3Bh
cnNlckFyZW5hKSBSZXN0UGFyYW1ldGVyTm9kZShuYW1lLCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBz
dGFydCwgZW5kKTsKKyAgICB9CisKICAgICB2b2lkIHNldEVuZE9mZnNldChOb2RlKiBub2RlLCBp
bnQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgbm9kZS0+c2V0RW5kT2Zmc2V0KG9mZnNldCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMu
aAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
Q29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsNiArMTAyMSwxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogICAgIAorICAgIGlubGluZSBSZXN0UGFyYW1ldGVy
Tm9kZTo6UmVzdFBhcmFtZXRlck5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgdW5zaWduZWQg
bnVtUGFyYW1ldGVyc1RvU2tpcCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kKQorICAgICAgICA6IERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSgp
CisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV9udW1QYXJhbWV0ZXJzVG9Ta2lw
KG51bVBhcmFtZXRlcnNUb1NraXApCisgICAgICAgICwgbV9kaXZvdFN0YXJ0KHN0YXJ0KQorICAg
ICAgICAsIG1fZGl2b3RFbmQoZW5kKQorICAgIHsKKyAgICB9CisKICAgICBpbmxpbmUgRGVzdHJ1
Y3R1cmluZ0Fzc2lnbm1lbnROb2RlOjpEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBiaW5k
aW5ncywgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyKQogICAgICAgICA6IEV4cHJlc3Npb25O
b2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fYmluZGluZ3MoYmluZGluZ3MpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NjgsNiAr
MTk2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgdG9TdHJpbmco
U3RyaW5nQnVpbGRlciYpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5k
aW5nTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1Jlc3RQYXJhbWV0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXREaXJlY3RCaW5kaW5nKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCosIEV4cHJlc3Npb25Ob2RlKikgeyByZXR1cm4gMDsgfQogICAgICAgICAKICAgICBwcm90
ZWN0ZWQ6CkBAIC0yMDQ4LDYgKzIwNDksMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFz
c2lnbm1lbnRDb250ZXh0IG1fYmluZGluZ0NvbnRleHQ7CiAgICAgfTsKIAorICAgIGNsYXNzIFJl
c3RQYXJhbWV0ZXJOb2RlIDogcHVibGljIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSB7CisgICAg
cHVibGljOgorICAgICAgICBSZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyJiBib3Vu
ZFByb3BlcnR5LCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpOworCisgICAgICAgIGJvb2wg
aXNSZXN0UGFyYW1ldGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
ICAgIHZvaWQgZW1pdChCeXRlY29kZUdlbmVyYXRvciYpOworCisgICAgICAgIGNvbnN0IElkZW50
aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0Qm91bmRJZGVudGlmaWVycyhWZWN0b3I8SWRlbnRp
Zmllcj4mKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJpbmRWYWx1ZShC
eXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHRvU3RyaW5nKFN0cmluZ0J1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX25hbWU7CisgICAgICAgIHVuc2lnbmVkIG1fbnVt
UGFyYW1ldGVyc1RvU2tpcDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdFN0YXJ0OyAv
LyAiZiIgaW4gIi4uLmZvbyIKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdEVuZDsKKyAg
ICB9OworCiAgICAgY2xhc3MgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnROb2RlIDogcHVibGljIEV4
cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlc3RydWN0dXJpbmdBc3NpZ25t
ZW50Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUq
LCBFeHByZXNzaW9uTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Q
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDMwIEBAIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IExleGVyVHlwZT4KK2Jvb2wgUGFyc2VyPExleGVyVHlwZT46OmRlY2xhcmVSZXN0T3JOb3JtYWxQ
YXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgSWRlbnRpZmllcioqIGR1cGxp
Y2F0ZUlkZW50aWZpZXIpCit7CisgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9u
UmVzdWx0ID0gZGVjbGFyZVBhcmFtZXRlcigmbmFtZSk7CisgICAgaWYgKChkZWNsYXJhdGlvblJl
c3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkU3RyaWN0TW9kZSkgJiYgc3RyaWN0TW9k
ZSgpKSB7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc0V2YWxPckFyZ3VtZW50cygmbmFt
ZSksICJDYW5ub3QgZGVzdHJ1Y3R1cmUgdG8gYSBwYXJhbWV0ZXIgbmFtZSAnIiwgbmFtZS5pbXBs
KCksICInIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIGlmIChtX2xhc3RGdW5jdGlvbk5hbWUg
JiYgbmFtZSA9PSAqbV9sYXN0RnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgc2VtYW50aWNGYWls
KCJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGFz
IGl0IHNoYWRvd3MgdGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbiIpOworICAgICAg
ICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoInBhcmFtZXRlciBuYW1lIik7CisgICAgICAg
IGlmIChoYXNEZWNsYXJlZFBhcmFtZXRlcihuYW1lKSkKKyAgICAgICAgICAgIHNlbWFudGljRmFp
bCgiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBp
biBzdHJpY3QgbW9kZSBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIik7CisgICAgICAg
IHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUu
aW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOworICAgIH0KKyAgICBpZiAoZGVjbGFyYXRpb25S
ZXN1bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZER1cGxpY2F0ZURlY2xhcmF0aW9uKSB7
CisgICAgICAgIC8vIEl0J3Mgbm90IGFsd2F5cyBhbiBlcnJvciB0byBkZWZpbmUgYSBkdXBsaWNh
dGUgcGFyYW1ldGVyLgorICAgICAgICAvLyBJdCdzIG9ubHkgYW4gZXJyb3Igd2hlbiB0aGVyZSBh
cmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIG9yIGRlc3RydWN0dXJpbmcgcGFyYW1ldGVycy4K
KyAgICAgICAgLy8gV2Ugbm90ZSB0aGlzIHZhbHVlIG5vdyBzbyB3ZSBjYW4gY2hlY2sgaXQgbGF0
ZXIuCisgICAgICAgIGlmIChkdXBsaWNhdGVJZGVudGlmaWVyKQorICAgICAgICAgICAgKmR1cGxp
Y2F0ZUlkZW50aWZpZXIgPSAmbmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRl
cj4gVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJuIFBhcnNlcjxMZXhlclR5cGU+OjpjcmVhdGVCaW5k
aW5nUGF0dGVybihUcmVlQnVpbGRlciYgY29udGV4dCwgRGVzdHJ1Y3R1cmluZ0tpbmQga2luZCwg
RXhwb3J0VHlwZSBleHBvcnRUeXBlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1Rva2VuIHRv
a2VuLCBBc3NpZ25tZW50Q29udGV4dCBiaW5kaW5nQ29udGV4dCwgY29uc3QgSWRlbnRpZmllcioq
IGR1cGxpY2F0ZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFuYW1lLmlzTnVsbCgpKTsKQEAg
LTY4NSwyMyArNzA5LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1
YwogICAgICAgICAgICAgZmFpbElmVHJ1ZShkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9u
UmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb24sICJDYW5ub3QgZGVjbGFyZSBhIGxl
eGljYWwgdmFyaWFibGUgdHdpY2U6ICciLCBuYW1lLmltcGwoKSwgIiciKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAoa2luZCA9PSBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycykgewotICAgICAg
ICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBkZWNsYXJlUGFyYW1l
dGVyKCZuYW1lKTsKLSAgICAgICAgaWYgKChkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9u
UmVzdWx0OjpJbnZhbGlkU3RyaWN0TW9kZSkgJiYgc3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNFdmFsT3JBcmd1bWVudHMoJm5hbWUpLCAiQ2Fubm90IGRl
c3RydWN0dXJlIHRvIGEgcGFyYW1ldGVyIG5hbWUgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJp
Y3QgbW9kZSIpOwotICAgICAgICAgICAgaWYgKG1fbGFzdEZ1bmN0aW9uTmFtZSAmJiBuYW1lID09
ICptX2xhc3RGdW5jdGlvbk5hbWUpCi0gICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5u
b3QgZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGFzIGl0IHNo
YWRvd3MgdGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbiIpOwotICAgICAgICAgICAg
c2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKCJwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICAg
ICAgaWYgKGhhc0RlY2xhcmVkUGFyYW1ldGVyKG5hbWUpKQotICAgICAgICAgICAgICAgIHNlbWFu
dGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUuaW1wbCgp
LCAiJyBpbiBzdHJpY3QgbW9kZSBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIik7Ci0g
ICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5hbWVk
ICciLCBuYW1lLmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoZGVjbGFyYXRpb25SZXN1bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZER1cGxp
Y2F0ZURlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAvLyBJdCdzIG5vdCBhbHdheXMgYW4gZXJy
b3IgdG8gZGVmaW5lIGEgZHVwbGljYXRlIHBhcmFtZXRlci4KLSAgICAgICAgICAgIC8vIEl0J3Mg
b25seSBhbiBlcnJvciB3aGVuIHRoZXJlIGFyZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgb3Ig
ZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgLy8gV2Ugbm90ZSB0aGlzIHZh
bHVlIG5vdyBzbyB3ZSBjYW4gY2hlY2sgaXQgbGF0ZXIuCi0gICAgICAgICAgICBpZiAoZHVwbGlj
YXRlSWRlbnRpZmllcikKLSAgICAgICAgICAgICAgICAqZHVwbGljYXRlSWRlbnRpZmllciA9ICZu
YW1lOwotICAgICAgICB9CisgICAgICAgIGRlY2xhcmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIobmFt
ZSwgZHVwbGljYXRlSWRlbnRpZmllcik7CisgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CiAgICAg
fQogCiAgICAgaWYgKGV4cG9ydFR5cGUgPT0gRXhwb3J0VHlwZTo6RXhwb3J0ZWQpIHsKQEAgLTE1
MDIsMzIgKzE1MTEsNDUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVt
ZQogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVp
bGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVC
dWlsZGVyJiBjb250ZXh0LCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0LCB1bnNpZ25lZCYg
cGFyYW1ldGVyQ291bnQpCiB7Ci0jZGVmaW5lIGZhaWxGcm9tRHVwbGljYXRlKCkgXAorI2RlZmlu
ZSBmYWlsSWZEdXBsaWNhdGVJZlZpb2xhdGlvbigpIFwKICAgICBpZiAoZHVwbGljYXRlUGFyYW1l
dGVyKSB7XAogICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZGVmYXVsdFZhbHVlLCAiRHVwbGlj
YXRlIHBhcmFtZXRlciAnIiwgZHVwbGljYXRlUGFyYW1ldGVyLT5pbXBsKCksICInIG5vdCBhbGxv
d2VkIGluIGZ1bmN0aW9uIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIik7XAogICAgICAg
ICBzZW1hbnRpY0ZhaWxJZlRydWUoaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4sICJEdXBsaWNhdGUg
cGFyYW1ldGVyICciLCBkdXBsaWNhdGVQYXJhbWV0ZXItPmltcGwoKSwgIicgbm90IGFsbG93ZWQg
aW4gZnVuY3Rpb24gd2l0aCBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMiKTtcCisgICAgICAgIHNl
bWFudGljRmFpbElmVHJ1ZShpc1Jlc3RQYXJhbWV0ZXIsICJEdXBsaWNhdGUgcGFyYW1ldGVyICci
LCBkdXBsaWNhdGVQYXJhbWV0ZXItPmltcGwoKSwgIicgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24g
d2l0aCBhIHJlc3QgcGFyYW1ldGVyIik7XAogICAgIH0KIAotICAgIGNvbnN0IElkZW50aWZpZXIq
IGR1cGxpY2F0ZVBhcmFtZXRlciA9IG51bGxwdHI7CiAgICAgYm9vbCBoYXNEZXN0cnVjdHVyaW5n
UGF0dGVybiA9IGZhbHNlOwotICAgIGF1dG8gcGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5n
UGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywgRXhwb3J0VHlwZTo6Tm90
RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVjdHVyaW5nUGF0dGVybik7
Ci0gICAgZmFpbElmRmFsc2UocGFyYW1ldGVyLCAiQ2Fubm90IHBhcnNlIHBhcmFtZXRlciBwYXR0
ZXJuIik7Ci0gICAgYXV0byBkZWZhdWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3Ry
dWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQpOwotICAgIHByb3BhZ2F0ZUVycm9yKCk7Ci0gICAgZmFp
bEZyb21EdXBsaWNhdGUoKTsKLSAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJh
bWV0ZXIsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgcGFyYW1ldGVyQ291bnQrKzsKLSAgICB3aGlsZSAo
Y29uc3VtZShDT01NQSkpIHsKLSAgICAgICAgcGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5n
UGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywgRXhwb3J0VHlwZTo6Tm90
RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVjdHVyaW5nUGF0dGVybik7
CisgICAgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIgPSBmYWxzZTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBkdXBsaWNhdGVQYXJhbWV0ZXIgPSBudWxscHRyOworICAgIGRvIHsKKyAgICAgICAgVHJlZURl
c3RydWN0dXJpbmdQYXR0ZXJuIHBhcmFtZXRlciA9IDA7CisgICAgICAgIFRyZWVFeHByZXNzaW9u
IGRlZmF1bHRWYWx1ZSA9IDA7CisKKyAgICAgICAgaWYgKG1hdGNoKERPVERPVERPVCkpIHsKKyAg
ICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoU3BlY0lkZW50
aWZpZXIoKSwgIlJlc3QgcGFyYW1ldGVyICcuLi4nIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIHZh
cmlhYmxlIGlkZW50aWZpZXIiKTsKKyAgICAgICAgICAgIGRlY2xhcmVSZXN0T3JOb3JtYWxQYXJh
bWV0ZXIoKm1fdG9rZW4ubV9kYXRhLmlkZW50LCAmZHVwbGljYXRlUGFyYW1ldGVyKTsKKyAgICAg
ICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CisgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBpZGVu
dGlmaWVyU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIEpTVGV4dFBv
c2l0aW9uIGlkZW50aWZpZXJFbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBw
YXJhbWV0ZXIgPSBjb250ZXh0LmNyZWF0ZVJlc3RQYXJhbWV0ZXIoKm1fdG9rZW4ubV9kYXRhLmlk
ZW50LCBwYXJhbWV0ZXJDb3VudCwgaWRlbnRpZmllclN0YXJ0LCBpZGVudGlmaWVyRW5kKTsKKyAg
ICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWUobWF0Y2goQ09NTUEpLCAi
UmVzdCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBsYXN0IHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9u
IGRlY2xhcmF0aW9uIik7IC8vIExldCdzIGhhdmUgYSBnb29kIGVycm9yIG1lc3NhZ2UgZm9yIHRo
aXMgY29tbW9uIGNhc2UuCisgICAgICAgICAgICBpc1Jlc3RQYXJhbWV0ZXIgPSB0cnVlOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1Bh
dHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4
cG9ydGVkLCAmZHVwbGljYXRlUGFyYW1ldGVyLCAmaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOwog
ICAgICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVyIHBh
dHRlcm4iKTsKLSAgICAgICAgZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0
cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKKyAgICAgICAgaWYgKCFpc1Jlc3RQYXJhbWV0ZXIp
CisgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0
dXJpbmdQYXR0ZXJuKGNvbnRleHQpOwogICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwotICAgICAg
ICBmYWlsRnJvbUR1cGxpY2F0ZSgpOworICAgICAgICBmYWlsSWZEdXBsaWNhdGVJZlZpb2xhdGlv
bigpOwogICAgICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJhbWV0ZXIsIGRl
ZmF1bHRWYWx1ZSk7Ci0gICAgICAgIHBhcmFtZXRlckNvdW50Kys7Ci0gICAgfQorICAgICAgICBp
ZiAoIWlzUmVzdFBhcmFtZXRlcikKKyAgICAgICAgICAgIHBhcmFtZXRlckNvdW50Kys7CisgICAg
fSB3aGlsZSAoIWlzUmVzdFBhcmFtZXRlciAmJiBjb25zdW1lKENPTU1BKSk7CisKICAgICByZXR1
cm4gdHJ1ZTsKLSN1bmRlZiBmYWlsRnJvbUR1cGxpY2F0ZQorI3VuZGVmIGZhaWxJZkR1cGxpY2F0
ZUlmVmlvbGF0aW9uCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MzQsNiArMTAzNCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4g
Y3VycmVudFNjb3BlKCktPnN0cmljdE1vZGUoKTsgfQogICAgIGJvb2wgaXNWYWxpZFN0cmljdE1v
ZGUoKSB7IHJldHVybiBjdXJyZW50U2NvcGUoKS0+aXNWYWxpZFN0cmljdE1vZGUoKTsgfQogICAg
IERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJlUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIq
IGlkZW50KSB7IHJldHVybiBjdXJyZW50U2NvcGUoKS0+ZGVjbGFyZVBhcmFtZXRlcihpZGVudCk7
IH0KKyAgICBib29sIGRlY2xhcmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IElkZW50aWZpZXIqKik7CisKICAgICBib29sIGJyZWFrSXNWYWxpZCgpCiAgICAg
ewogICAgICAgICBTY29wZVJlZiBjdXJyZW50ID0gY3VycmVudFNjb3BlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTky
NjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkV4
cHIsIENsYXNzRXhwciwgU3VwZXJFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIs
CiAgICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4
cHIsCiAgICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVvZkV4cHIs
IE5ld1RhcmdldEV4cHIsCi0gICAgICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJp
bmRpbmdEZXN0cnVjdHVyaW5nLAorICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHBy
LCBCaW5kaW5nRGVzdHJ1Y3R1cmluZywgUmVzdFBhcmFtZXRlciwKICAgICAgICAgQXJyYXlEZXN0
cnVjdHVyaW5nLCBPYmplY3REZXN0cnVjdHVyaW5nLCBTb3VyY2VFbGVtZW50c1Jlc3VsdCwKICAg
ICAgICAgRnVuY3Rpb25Cb2R5UmVzdWx0LCBTcHJlYWRFeHByLCBBcmd1bWVudHNSZXN1bHQsCiAg
ICAgICAgIFByb3BlcnR5TGlzdFJlc3VsdCwgQXJndW1lbnRzTGlzdFJlc3VsdCwgRWxlbWVudHNM
aXN0UmVzdWx0LApAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIGludCBE
ZXN0cnVjdHVyaW5nUGF0dGVybjsKICAgICB0eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJuIEFy
cmF5UGF0dGVybjsKICAgICB0eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJuIE9iamVjdFBhdHRl
cm47CisgICAgdHlwZWRlZiBEZXN0cnVjdHVyaW5nUGF0dGVybiBSZXN0UGF0dGVybjsKIAogICAg
IHN0YXRpYyBjb25zdCBib29sIENyZWF0ZXNBU1QgPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBOZWVkc0ZyZWVWYXJpYWJsZUluZm8gPSBmYWxzZTsKQEAgLTM0Niw2ICszNDcsMTAgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIEJpbmRpbmdEZXN0cnVjdHVyaW5nOwogICAg
IH0KKyAgICBSZXN0UGF0dGVybiBjcmVhdGVSZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIm
LCBzaXplX3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mKQor
ICAgIHsgCisgICAgICAgIHJldHVybiBSZXN0UGFyYW1ldGVyOworICAgIH0KIAogICAgIGJvb2wg
aXNCaW5kaW5nTm9kZShEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuKQogICAgIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDQgKzcwMSwyMCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBSRVRVUk4ocmVzb2x2ZWRT
Y29wZSk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9maWxsX3Jlc3RfcGFyYW1ldGVy
X2FycmF5KQoreworICAgIEJFR0lOKCk7CisgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0g
cGNbMl0udS51bnNpZ25lZFZhbHVlOworICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50c1RvRnVuY3Rp
b24gPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKG51bUFyZ3VtZW50c1RvRnVuY3Rp
b24gPD0gbnVtUGFyYW1zVG9Ta2lwKQorICAgICAgICBFTkQoKTsKKworICAgIEpTQXJyYXkqIGFy
cmF5ID0ganNDYXN0PEpTQXJyYXkqPihPUCgxKS5qc1ZhbHVlKCkpOworICAgIHNpemVfdCBhcnJh
eVNpemUgPSBudW1Bcmd1bWVudHNUb0Z1bmN0aW9uIC0gbnVtUGFyYW1zVG9Ta2lwOworICAgIGFy
cmF5LT5zZXRMZW5ndGgoZXhlYywgYXJyYXlTaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFycmF5U2l6ZTsgaSsrKQorICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSArIG51bVBhcmFtc1RvU2tpcCkpOworICAgIEVO
RCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjkzLDYgKzI5Myw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
YXNzZXJ0KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxf
ZW52aXJvbm1lbnQpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXNoX3dpdGhf
c2NvcGUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJh
eSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvZXM2LnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L2VzNi55YW1sCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvZXM2LnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTEwODUsMTUgKzEwODUsMTUgQEAKIC0gcGF0
aDogZXM2L1JlZ0V4cF95X2FuZF91X2ZsYWdzX3lfZmxhZ19sYXN0SW5kZXguanMKICAgY21kOiBy
dW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L3Jlc3RfcGFyYW1ldGVyc19hcmd1bWVudHNfb2JqZWN0
X2ludGVyYWN0aW9uLmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3Jt
YWwKIC0gcGF0aDogZXM2L3Jlc3RfcGFyYW1ldGVyc19iYXNpY19mdW5jdGlvbmFsaXR5LmpzCi0g
IGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L3Jl
c3RfcGFyYW1ldGVyc19jYW50X2JlX3VzZWRfaW5fc2V0dGVycy5qcwotICBjbWQ6IHJ1bkVTNiA6
ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNf
ZnVuY3Rpb25fbGVuZ3RoX3Byb3BlcnR5LmpzCi0gIGNtZDogcnVuRVM2IDpmYWlsCisgIGNtZDog
cnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L3Jlc3RfcGFyYW1ldGVyc19uZXdfRnVuY3Rpb25f
c3VwcG9ydC5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAt
IHBhdGg6IGVzNi9TZXRfaXRlcmF0b3JfY2xvc2luZy5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFpbAog
LSBwYXRoOiBlczYvU2V0X1NldFtTeW1ib2wuc3BlY2llc10uanMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYW5kLWRlZmF1bHQtYXJndW1l
bnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cmVzdC1wYXJhbWV0ZXItYW5kLWRlZmF1bHQtYXJndW1lbnRzLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1hbmQtZGVm
YXVsdC1hcmd1bWVudHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorZnVuY3Rp
b24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFk
IGFzc2VydGlvbiIpCit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBzaG91bGRUaHJv
d1REWihmdW5jKSB7CisgICAgdmFyIGhhc1Rocm93biA9IGZhbHNlOworICAgIHRyeSB7CisgICAg
ICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgaWYgKGUubmFtZS5pbmRleE9m
KCJSZWZlcmVuY2VFcnJvciIpICE9PSAtMSkKKyAgICAgICAgICAgIGhhc1Rocm93biA9IHRydWU7
CisgICAgfQorICAgIGFzc2VydChoYXNUaHJvd24pOworfQorbm9JbmxpbmUoc2hvdWxkVGhyb3dU
RFopOworCitmdW5jdGlvbiBmb28oYSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gYzsgfSwgYiA9IGEo
KSwgLi4uYykgeworICAgIHJldHVybiBhKCk7Cit9Citub0lubGluZShmb28pOworCitmdW5jdGlv
biBiYXooYSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gYjsgfSwgLi4uYikgeworICAgIHJldHVybiBh
KCk7Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgc2hvdWxkVGhy
b3dURFooZnVuY3Rpb24oKSB7IGZvbyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgMTAsIDIwKTsgfSk7
CisgICAgbGV0IG8gPSB7eDogMjB9OworICAgIGxldCByZXN1bHQgPSBiYXoodW5kZWZpbmVkLCAx
MCwgbywgImJheiIpOworICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICBhc3Nl
cnQocmVzdWx0WzBdID09PSAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gbyk7CisgICAg
YXNzZXJ0KHJlc3VsdFsyXSA9PT0gImJheiIpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1iYXNpY3MuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1iYXNpY3Mu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jl
c3QtcGFyYW1ldGVyLWJhc2ljcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBAQAor
ZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiQmFkIGFzc2VydGlvbiIpCit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiBmb28o
YSwgLi4uYikgeworICAgIHJldHVybiBiOyAgICAKK30KK25vSW5saW5lKGZvbyk7CisKK2Z1bmN0
aW9uIGJhcihhLCAuLi5iKSB7CisgICAgcmV0dXJuIGEgKyBiWzBdOworfQorbm9JbmxpbmUoYmFy
KTsKKworZnVuY3Rpb24gYmF6KGEsIC4uLmIpIHsKKyAgICBmdW5jdGlvbiBjYXB0dXJlKCkgeyBy
ZXR1cm4gYjsgfQorICAgIGFzc2VydChiWzBdID09PSBjYXB0dXJlKClbMF0pOworICAgIHJldHVy
biBhICsgYlswXTsKK30KK25vSW5saW5lKGJheik7CisKK2Z1bmN0aW9uIGpheihhLCAuLi5iKSB7
CisgICAgZnVuY3Rpb24gY2FwdHVyZSgpIHsgcmV0dXJuIGEgKyBiWzBdOyB9CisgICAgYXNzZXJ0
KGNhcHR1cmUoKSA9PT0gYSArIGJbMF0pOworICAgIHJldHVybiBhICsgYlswXTsKK30KK25vSW5s
aW5lKGpheik7CisKK2Z1bmN0aW9uIGtheihhID0gMTAsIC4uLmIpIHsKKyAgICByZXR1cm4gYSAr
IGJbMF0KK30KK25vSW5saW5lKGtheik7CisKK2Z1bmN0aW9uIHJheihhID0gMTAsIC4uLmIpIHsK
KyAgICBmdW5jdGlvbiBjYXB0dXJlKCkgeyByZXR1cm4gYSArIGJbMF07IH0KKyAgICBhc3NlcnQo
Y2FwdHVyZSgpID09PSBhICsgYlswXSk7CisgICAgcmV0dXJuIGEgKyBiWzBdOworfQorbm9Jbmxp
bmUocmF6KTsKKworZnVuY3Rpb24gcmVzdExlbmd0aChhLCAuLi5iKSB7CisgICAgcmV0dXJuIGIu
bGVuZ3RoOworfQorbm9JbmxpbmUocmVzdExlbmd0aCk7CisKK2Z1bmN0aW9uIHRlc3RBcmd1bWVu
dHNPYmplY3QoLi4uYXJncykgeworICAgIGFzc2VydChhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRz
Lmxlbmd0aCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKQorICAg
ICAgICBhc3NlcnQoYXJnc1tpXSA9PT0gYXJndW1lbnRzW2ldKTsKK30KK25vSW5saW5lKHRlc3RB
cmd1bWVudHNPYmplY3QpOworCitmdW5jdGlvbiBzdHJpY3RNb2RlTGlrZUFyZ3VtZW50c09iamVj
dChhLCAuLi5hcmdzKSB7CisgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gYSk7CisgICAgYSA9
ICJhIjsKKyAgICBhc3NlcnQoYXJndW1lbnRzWzBdICE9PSBhKTsKKyAgICBhc3NlcnQoYXJndW1l
bnRzWzBdID09PSAyMCk7CisgICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT09IDIpOworICAg
IGFzc2VydChhcmdzLmxlbmd0aCA9PT0gMSk7CisgICAgYXNzZXJ0KGFyZ3VtZW50c1sxXSA9PT0g
YXJnc1swXSk7CisgICAgYXJndW1lbnRzWzFdID0gImIiOworICAgIGFzc2VydChhcmdzWzBdICE9
PSAiYiIpOworfQorbm9JbmxpbmUoc3RyaWN0TW9kZUxpa2VBcmd1bWVudHNPYmplY3QpOworCitm
b3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICBsZXQgYTEgPSBmb28oMTAsIDIw
KTsKKyAgICBhc3NlcnQoYTEgaW5zdGFuY2VvZiBBcnJheSk7CisgICAgYXNzZXJ0KGExLmxlbmd0
aCA9PT0gMSk7CisgICAgYXNzZXJ0KGExWzBdID09PSAyMCk7CisKKyAgICBsZXQgYTIgPSBmb28o
MTApOworICAgIGFzc2VydChhMiBpbnN0YW5jZW9mIEFycmF5KTsKKyAgICBhc3NlcnQoYTIubGVu
Z3RoID09PSAwKTsKKworICAgIGxldCBhMyA9IGJhcigxMCwgMjApOworICAgIGFzc2VydChhMyA9
PT0gMzApOworCisgICAgbGV0IGE0ID0gYmF6KDEwLCAyMCk7CisgICAgYXNzZXJ0KGE0ID09PSAz
MCk7CisKKyAgICBsZXQgYTUgPSBqYXooImhlbGxvIiwgIndvcmxkIik7CisgICAgYXNzZXJ0KGE1
ID09PSAiaGVsbG93b3JsZCIpOworCisgICAgbGV0IGE2ID0ga2F6KHVuZGVmaW5lZCwgNDApOwor
ICAgIGFzc2VydChhNiA9PT0gNTApOworCisgICAgbGV0IGE3ID0ga2F6KHVuZGVmaW5lZCwgNDAp
OworICAgIGFzc2VydChhNyA9PT0gNTApOworCisgICAgYXNzZXJ0KHJlc3RMZW5ndGgoKSA9PT0g
MCk7CisgICAgYXNzZXJ0KHJlc3RMZW5ndGgoMSkgPT09IDApOworICAgIGFzc2VydChyZXN0TGVu
Z3RoKDEsIDEpID09PSAxKTsKKyAgICBhc3NlcnQocmVzdExlbmd0aCgxLCAxLCAxKSA9PT0gMik7
CisgICAgYXNzZXJ0KHJlc3RMZW5ndGgoMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg
MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkgPT09IDIwKTsKKworICAgIGxldCBvYmogPSB7
Zm9vOiA0MH07CisgICAgdGVzdEFyZ3VtZW50c09iamVjdCgiaGVsbG8iLCBvYmosIDEwMCwgMTIu
MzQsICJ3b3JsZCIsIG9iaiwgWzEsIDIsIDNdKTsKKworICAgIHN0cmljdE1vZGVMaWtlQXJndW1l
bnRzT2JqZWN0KDIwLCAzMCk7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWlubGluZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxpbmVkLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFt
ZXRlci1pbmxpbmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKK2Z1bmN0aW9u
IGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBh
c3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gYmFyKC4uLnJlc3Qp
IHsKKyAgICByZXR1cm4gcmVzdDsKK30KKworZnVuY3Rpb24gZm9vKGEsIGIsIGMpIHsKKyAgICBy
ZXR1cm4gYmFyKGEsIGIsIGMpOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IHJlc3VsdCA9IGZvbygxMCwgMjAsIDMwKTsKKyAg
ICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0g
MTApOworICAgIGFzc2VydChyZXN1bHRbMV0gPT09IDIwKTsKKyAgICBhc3NlcnQocmVzdWx0WzJd
ID09PSAzMCk7Cit9CisKK2Z1bmN0aW9uIGJheiguLi5yZXN0KSB7CisgICAgcmV0dXJuIHJlc3Q7
Cit9CitmdW5jdGlvbiBqYXooYSwgYiwgYykgeworICAgIHJldHVybiBiYXouYXBwbHkobnVsbCwg
QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7Cit9Citub0lubGluZShqYXop
OworCitmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwOyBpKyspIHsKKyAgICBsZXQgcmVzdWx0ID0g
amF6KDEwLCAyMCwgMzApOworICAgIGFzc2VydChyZXN1bHQubGVuZ3RoID09PSAzKTsKKyAgICBh
c3NlcnQocmVzdWx0WzBdID09PSAxMCk7CisgICAgYXNzZXJ0KHJlc3VsdFsxXSA9PT0gMjApOwor
ICAgIGFzc2VydChyZXN1bHRbMl0gPT09IDMwKTsKK30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MjYw
MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDE1LTExLTE4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAg
ICAgIFtFUzZdIEFkZCBzdXBwb3J0IGZvciByZXN0IHBhcmFtZXRlcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NDA4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9wYXJzZXItc3ludGF4LWNoZWNr
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvcGFyc2VyLXN5bnRheC1j
aGVjay5qczoKKyAgICAgICAgKGNhdGNoKToKKwogMjAxNS0xMS0xOCAgRXJpYyBDYXJsc29uICA8
ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVN0cmVhbTogSW1wbGVtZW50
IE1lZGlhRGV2aWNlcy5nZXRTdXBwb3J0ZWRDb25zdHJhaW50cwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcGFyc2VyLXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcGFyc2VyLXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE5MjYw
MykKKysrIExheW91dFRlc3RzL2pzL3BhcnNlci1zeW50YXgtY2hlY2stZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05MjksNiArOTI5LDQ5IEBAIFBBU1MgSW52YWxpZDogIjEgJSAKIC0t
IgogUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgMSAlIAogLS0gfSIKK1Jlc3QgcGFyYW1l
dGVyCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oLi4uYSkgeyB9IgorUEFTUyBWYWxpZDog
ICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmEpIHsgfSB9IgorUEFTUyBWYWxpZDog
ICAiZnVuY3Rpb24gZm9vKGEsIC4uLmIpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYo
KSB7IGZ1bmN0aW9uIGZvbyhhLCAuLi5iKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9u
IGZvbyhhID0gMjAsIC4uLmIpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7IGZ1
bmN0aW9uIGZvbyhhID0gMjAsIC4uLmIpIHsgfSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24g
Zm9vKGEsIGIsIGMsIGQsIGUsIGYsIGcsIC4uLmgpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0
aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyhhLCBiLCBjLCBkLCBlLCBmLCBnLCAuLi5oKSB7IH0gfSIK
K1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyhhLCAuLi5iLCBjKSB7IH0iCitQQVNTIEludmFs
aWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oYSwgLi4uYiwgYykgeyB9IH0iCitQQVNT
IEludmFsaWQ6ICJmdW5jdGlvbiBmb28oYSwgLi4uYiwgKSB7IH0iCitQQVNTIEludmFsaWQ6ICJm
dW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oYSwgLi4uYiwgKSB7IH0gfSIKK1BBU1MgSW52YWxp
ZDogImZ1bmN0aW9uIGZvbyhhLCAuLi5hKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBm
KCkgeyBmdW5jdGlvbiBmb28oYSwgLi4uYSkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlv
biBmb28oLi4uYSwgLi4uYikgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVu
Y3Rpb24gZm9vKC4uLmEsIC4uLmIpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9v
KC4uLmIsIC4uLmIpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9u
IGZvbyguLi5iLCAuLi5iKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi5i
ICAuLi5iKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28o
Li4uYiAgLi4uYikgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oYSwgYSwgLi4u
YikgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKGEsIGEs
IC4uLmIpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLntifSkgeyB9Igor
UEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLntifSkgeyB9IH0i
CitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uW2JdKSB7IH0iCitQQVNTIEludmFsaWQ6
ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uW2JdKSB7IH0gfSIKK1BBU1MgSW52YWxp
ZDogImZ1bmN0aW9uIGZvbyguLi4xMjMpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYo
KSB7IGZ1bmN0aW9uIGZvbyguLi4xMjMpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24g
Zm9vKC4uLjEyM2FiYykgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rp
b24gZm9vKC4uLjEyM2FiYykgeyB9IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oLi4u
YWJjMTIzKSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28o
Li4uYWJjMTIzKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyguLi5sZXQpIHsg
fSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5sZXQpIHsg
fSB9IgorUEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4ubGV0KSB7
IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyAndXNlIHN0cmljdCc7IGZ1bmN0aW9u
IGZvbyguLi5sZXQpIHsgfSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZm9vKC4uLnlpZWxk
KSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4ueWll
bGQpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4u
eWllbGQpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7ICd1c2Ugc3RyaWN0Jzsg
ZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZv
byguLi5pZikgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9v
KC4uLmlmKSB7IH0gfSIKIFBBU1MgZS5saW5lIGlzIDEKIFBBU1MgZm9vIGlzICdQQVNTJwogUEFT
UyBiYXIgaXMgJ1BBU1MnCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcGFyc2Vy
LXN5bnRheC1jaGVjay5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvcGFyc2VyLXN5bnRheC1jaGVjay5qcwkocmV2aXNpb24gMTkyNjAzKQorKysgTGF5b3V0VGVz
dHMvanMvc2NyaXB0LXRlc3RzL3BhcnNlci1zeW50YXgtY2hlY2suanMJKHdvcmtpbmcgY29weSkK
QEAgLTU1Niw2ICs1NTYsMjkgQEAgaW52YWxpZCgiMSAlIC0tIik7CiBpbnZhbGlkKCIxICUgXG4r
KyIpOwogaW52YWxpZCgiMSAlIFxuLS0iKTsKIAorZGVidWcoIlJlc3QgcGFyYW1ldGVyIik7Cit2
YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmEpIHsgfSIpOwordmFsaWQoImZ1bmN0aW9uIGZvbyhhLCAu
Li5iKSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oYSA9IDIwLCAuLi5iKSB7IH0iKTsKK3Zh
bGlkKCJmdW5jdGlvbiBmb28oYSwgYiwgYywgZCwgZSwgZiwgZywgLi4uaCkgeyB9Iik7CitpbnZh
bGlkKCJmdW5jdGlvbiBmb28oYSwgLi4uYiwgYykgeyB9IikKK2ludmFsaWQoImZ1bmN0aW9uIGZv
byhhLCAuLi5iLCApIHsgfSIpCitpbnZhbGlkKCJmdW5jdGlvbiBmb28oYSwgLi4uYSkgeyB9Iik7
CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uYSwgLi4uYikgeyB9Iik7CitpbnZhbGlkKCJmdW5j
dGlvbiBmb28oLi4uYiwgLi4uYikgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uYiAg
Li4uYikgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oYSwgYSwgLi4uYikgeyB9Iik7Citp
bnZhbGlkKCJmdW5jdGlvbiBmb28oLi4ue2J9KSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZv
byguLi5bYl0pIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9vKC4uLjEyMykgeyB9Iik7Citp
bnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uMTIzYWJjKSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBm
b28oLi4uYWJjMTIzKSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0iKTsK
K2ludmFsaWQoIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9Iik7Cit2YWxp
ZCgiZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0iKTsKK2ludmFsaWQoIid1c2Ugc3RyaWN0Jzsg
ZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi5p
ZikgeyB9Iik7CisKIAogCiB0cnkgeyBldmFsKCJhLmIuYyA9IHt9OyIpOyB9IGNhdGNoKGUxKSB7
IGU9ZTE7IHNob3VsZEJlKCJlLmxpbmUiLCAiMSIpIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265883</attachid>
            <date>2015-11-19 12:26:29 -0800</date>
            <delta_ts>2015-11-19 13:08:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>59296</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAxNS0xMS0xOCAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbRVM2XSBBZGQgc3VwcG9ydCBmb3IgcmVzdCBwYXJhbWV0ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyByZXN0
IHBhcmFtZXRlcnMgZnJvbSB0aGUgRVM2IHNwZWMuCisgICAgICAgIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb24tZGVm
aW5pdGlvbnMKKworICAgICAgICBXZSBpbXBsZW1lbnQgdGhlIHJlc3QgcGFyYW1ldGVyIGFzIGEg
bmV3IEFTVCBub2RlLiBUaGlzIEFTVCBub2RlCisgICAgICAgIGxvd2VycyB0byAib3BfbmV3X2Fy
cmF5IFgsIG9wX2ZpbGxfcmVzdF9wYXJhbWV0ZXJfYXJyYXkgWCIuIE5vdGUKKyAgICAgICAgdGhh
dCB0aGUgb3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSBvcGNvZGUgZG9lcyBub3QgaGF2ZSBh
IHJlc3VsdC4KKyAgICAgICAgVGhlIGJ1bGsgb2YgdGhpcyBwYXRjaCBpcyBpbXBsZW1lbnRpbmcg
b3BfZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheS4KKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1l
bnRzIHRoaXMgaW4gYWxsIGZvdXIgdGllcnMgaW4gYSBzdHJhaWdodCBmb3J3YXJkIHdheS4KKyAg
ICAgICAgVGhlIG9wY29kZSBpcyBpbXBsZW1lbnRlZCBhcyBhIEMgY2FsbCB0aGF0IHdpbGwgcmVh
ZCB0aGUgcGVydGluZW50CisgICAgICAgIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxsIGZyYW1lIGFu
ZCBmaWxsIHRoZW0gaW50byB0aGUgYXJyYXkuCisKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUxpc3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAg
ICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0
cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0
dXBGdW5jdGlvblNjb3BlU3RhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
aW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVyKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cDoKKyAgICAgICAgKEpTQzo6QmluZGluZ05vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJzKToK
KyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmNvbGxlY3RCb3VuZElkZW50aWZpZXJz
KToKKyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OnRvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmJpbmRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlc3RQ
YXJhbWV0ZXJOb2RlOjplbWl0KToKKyAgICAgICAgKEpTQzo6U3ByZWFkRXhwcmVzc2lvbk5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEVwb2NoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6ZHVtcENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RG
R09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpw
cm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNs
b25lZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVGaWxsUmVzdFBhcmFtZXRlckFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlRmlsbFJlc3RQ
YXJhbWV0ZXJBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZU5ld09iamVjdCk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Ny
ZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZmlsbF9yZXN0X3BhcmFtZXRlcl9hcnJheSk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBw
YXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVCaW5k
aW5nTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVSZXN0UGFyYW1l
dGVyKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6c2V0RW5kT2Zmc2V0KToKKyAgICAgICAg
KiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpCaW5kaW5nTm9kZTo6
QmluZGluZ05vZGUpOgorICAgICAgICAoSlNDOjpSZXN0UGFyYW1ldGVyTm9kZTo6UmVzdFBhcmFt
ZXRlck5vZGUpOgorICAgICAgICAoSlNDOjpEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGU6OkRl
c3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6Cisg
ICAgICAgIChKU0M6OkRlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZTo6aXNCaW5kaW5nTm9kZSk6Cisg
ICAgICAgIChKU0M6OkRlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZTo6aXNSZXN0UGFyYW1ldGVyKToK
KyAgICAgICAgKEpTQzo6RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlOjplbWl0RGlyZWN0QmluZGlu
Zyk6CisgICAgICAgIChKU0M6OlJlc3RQYXJhbWV0ZXJOb2RlOjpuYW1lKToKKyAgICAgICAgKiBw
YXJzZXIvUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6ZGVjbGFyZVJlc3RPck5vcm1hbFBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpjcmVhdGVCaW5kaW5nUGF0dGVybik6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUZvcm1hbFBhcmFtZXRlcnMpOgorICAgICAgICAqIHBhcnNlci9QYXJz
ZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpzdHJpY3RNb2RlKToKKyAgICAgICAgKEpTQzo6
UGFyc2VyOjppc1ZhbGlkU3RyaWN0TW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNlcjo6ZGVjbGFy
ZVBhcmFtZXRlcik6CisgICAgICAgIChKU0M6OlBhcnNlcjo6YnJlYWtJc1ZhbGlkKToKKyAgICAg
ICAgKiBwYXJzZXIvU3ludGF4Q2hlY2tlci5oOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2Vy
OjpvcGVyYXRvclN0YWNrUG9wKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHRlc3RzL2VzNi55YW1sOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1hbmQtZGVmYXVsdC1hcmd1bWVudHMuanM6IEFkZGVk
LgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHNob3VsZFRocm93VERaKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgIChiYXopOgorICAgICAgICAoaS5zaG91bGRUaHJvd1REWik6CisgICAg
ICAgICogdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWJhc2ljcy5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChj
YXB0dXJlKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChqYXopOgorICAgICAgICAoa2F6KToK
KyAgICAgICAgKHJheik6CisgICAgICAgIChyZXN0TGVuZ3RoKToKKyAgICAgICAgKHRlc3RBcmd1
bWVudHNPYmplY3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxp
bmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChiYXIpOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChqYXopOgorCiAyMDE1LTExLTE4ICBT
YWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIFRoZXJlIGlzIGEgYnVn
IHdoZW4gZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBtaXhlZCB3aXRoIGRlc3RydWN0dXJp
bmcgcGFyYW1ldGVyIHZhbHVlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNyArMTI4LDggQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2VudW1lcmF0b3Jf
Z2VuZXJpY19wbmFtZSIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfdG9faW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9sb2FkX2Fycm93ZnVuY3Rpb25fdGhpcyIsICJsZW5ndGgiIDogMiB9LAotICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfYXNzZXJ0IiwgImxlbmd0aCIgOiAzIH0KKyAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2Fzc2VydCIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfY29weV9yZXN0IiwgImxlbmd0aCI6IDMgfQogICAgICAgICBdCiAgICAgfSwK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVVc2VEZWYuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDggQEAg
dm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfamVxX251bGw6
CiAgICAgY2FzZSBvcF9qbmVxX251bGw6CiAgICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBvcF9p
bmM6IHsKKyAgICBjYXNlIG9wX2luYzogCisgICAgY2FzZSBvcF9jb3B5X3Jlc3Q6IHsKICAgICAg
ICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0Nyw2ICsyNDgsNyBA
QCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2Rl
KTsKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFu
eXRoaW5nLgorICAgIGNhc2Ugb3BfY29weV9yZXN0OgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3Bl
OgogICAgIGNhc2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZSgKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9jb3B5X3Jlc3Q6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
Y29weV9yZXN0Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCkpOworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50T2Zmc2V0ID0gYml0d2lz
ZV9jYXN0PHNpemVfdD4oKCsraXQpLT51LnBvaW50ZXIpOworICAgICAgICAgICAgb3V0LnByaW50
ZigiQXJndW1lbnRzT2Zmc2V0OiAlenUiLCBhcmd1bWVudE9mZnNldCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
c3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMyBA
QCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24gewogICAgICAgICB1LmpzQ2VsbC5jbGVhcigpOwogICAgICAg
ICB1Lm9wZXJhbmQgPSBvcGVyYW5kOwogICAgIH0KKyAgICBJbnN0cnVjdGlvbih1bnNpZ25lZCB1
bnNpZ25lZFZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBpbml0aWFsaXplIG9u
ZSBvZiB0aGUgcG9pbnRlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0CisgICAgICAgIC8vIHRoZSBl
bnRpcmUgc3RydWN0IGlzIGluaXRpYWxpemVkIGluIDY0LWJpdC4KKyAgICAgICAgdS5qc0NlbGwu
Y2xlYXIoKTsKKyAgICAgICAgdS51bnNpZ25lZFZhbHVlID0gdW5zaWduZWRWYWx1ZTsKKyAgICB9
CiAKICAgICBJbnN0cnVjdGlvbihQdXRCeUlkRmxhZ3MgZmxhZ3MpCiAgICAgewpAQCAtMTEyLDYg
KzExOSw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgdW5pb24gewogICAgICAgICBPcGNv
ZGUgb3Bjb2RlOwogICAgICAgICBpbnQgb3BlcmFuZDsKKyAgICAgICAgdW5zaWduZWQgdW5zaWdu
ZWRWYWx1ZTsKICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsK
ICAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQ7CiAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8U3ltYm9sVGFibGU+IHN5bWJvbFRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw5IEBAIFBhcnNlckVy
cm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBpZiAobV9uZWVkVG9Jbml0aWFs
aXplQXJndW1lbnRzKQogICAgICAgICBpbml0aWFsaXplVmFyaWFibGUodmFyaWFibGUocHJvcGVy
dHlOYW1lcygpLmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0ZXIpOwogCisgICAgaWYgKG1f
cmVzdFBhcmFtZXRlcikKKyAgICAgICAgbV9yZXN0UGFyYW1ldGVyLT5lbWl0KCp0aGlzKTsKKwog
ICAgIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGdsb2JhbFNjb3BlOwpAQCAtMjcyLDggKzI3NSwx
NCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgLy8gbmVl
ZGluZyBkZXN0cnVjdHVyaW5nIGFyZSBub3RlZC4KICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhwYXJh
bWV0ZXJzLnNpemUoKSArIDEpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKICAgICBtX3Ro
aXNSZWdpc3Rlci5zZXRJbmRleChpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsg
Ly8gdGhpcwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsg
KytpKQotICAgICAgICBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcGF0
dGVybiA9IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7CisgICAgICAgIGlmIChwYXR0ZXJuLT5pc1Jl
c3RQYXJhbWV0ZXIoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVzdFBhcmFt
ZXRlcik7CisgICAgICAgICAgICBtX3Jlc3RQYXJhbWV0ZXIgPSBzdGF0aWNfY2FzdDxSZXN0UGFy
YW1ldGVyTm9kZSo+KHBhdHRlcm4pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluaXRp
YWxpemVOZXh0UGFyYW1ldGVyKCk7CisgICAgfQogICAgIAogICAgIC8vIEZpZ3VyZSBvdXQgc29t
ZSBpbnRlcmVzdGluZyBmYWN0cyBhYm91dCBvdXIgYXJndW1lbnRzLgogICAgIGJvb2wgY2FwdHVy
ZXNBbnlBcmd1bWVudEJ5TmFtZSA9IGZhbHNlOwpAQCAtMzA3LDcgKzMxNiwxNCBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIG1fYXJndW1lbnRzUmVn
aXN0ZXItPnJlZigpOwogICAgIH0KICAgICAKLSAgICBpZiAobmVlZHNBcmd1bWVudHMgJiYgIWNv
ZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgJiYgIXBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRl
clZhbHVlcygpKSB7CisgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2Vj
bWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1mdW5jdGlvbmRlY2xhcmF0aW9uaW5zdGFudGlhdGlv
bgorICAgIC8vIFRoaXMgaW1wbGVtZW50cyBJc1NpbXBsZVBhcmFtZXRlckxpc3QgaW4gdGhlIEVj
bWEgMjAxNSBzcGVjLgorICAgIC8vIElmIElzU2ltcGxlUGFyYW1ldGVyTGlzdCBpcyBmYWxzZSwg
d2Ugd2lsbCBjcmVhdGUgYSBzdHJpY3QtbW9kZSBsaWtlIGFyZ3VtZW50cyBvYmplY3QuCisgICAg
Ly8gSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlIGlmIHRoZSBhcmd1bWVudCBsaXN0IGNv
bnRhaW5zIGFueSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMsCisgICAgLy8gYSByZXN0IHBhcmFt
ZXRlciwgb3IgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVybnMuCisgICAgLy8gRklYTUU6IFRha2Ug
aW50byBhY2NvdW50IGRlc3RydWN0dXJpbmcgdG8gbWFrZSBpc1NpbXBsZVBhcmFtZXRlckxpc3Qg
ZmFsc2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE0NTAKKyAg
ICBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCA9ICFwYXJhbWV0ZXJzLmhhc0RlZmF1bHRQYXJh
bWV0ZXJWYWx1ZXMoKSAmJiAhbV9yZXN0UGFyYW1ldGVyOworICAgIGlmIChuZWVkc0FyZ3VtZW50
cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSAmJiBpc1NpbXBsZVBhcmFtZXRlckxpc3Qp
IHsKICAgICAgICAgLy8gSWYgd2UgY2FwdHVyZWQgYW55IGZvcm1hbCBwYXJhbWV0ZXIgYnkgbmFt
ZSwgdGhlbiB3ZSB1c2UgU2NvcGVkQXJndW1lbnRzLiBPdGhlcndpc2Ugd2UKICAgICAgICAgLy8g
dXNlIERpcmVjdEFyZ3VtZW50cy4gV2l0aCBTY29wZWRBcmd1bWVudHMsIHdlIGxpZnQgYWxsIG9m
IG91ciBhcmd1bWVudHMgaW50byB0aGUKICAgICAgICAgLy8gYWN0aXZhdGlvbi4KQEAgLTM4OSw3
ICs0MDUsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5lZWRzQXJndW1lbnRzICYmIChjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpIHx8IHBhcmFtZXRlcnMuaGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygp
KSkgeworICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSB8fCAhaXNTaW1wbGVQYXJhbWV0ZXJMaXN0KSkgewogICAgICAgICAvLyBBbGxvY2F0ZSBhbiBv
dXQtb2YtYmFuZHMgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVh
dGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwpAQCAtNzA3LDYgKzcyMyw4IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIHN0ZDo6cGFpcjxE
ZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9kZSo+IHBhcmFtZXRlciA9IHBh
cmFtZXRlcnMuYXQoaSk7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVyLmZpcnN0LT5pc1Jlc3RQ
YXJhbWV0ZXIoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwYXJhbWV0ZXJWYWx1ZSA9ICZyZWdpc3RlckZvcih2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudCgxICsgaSkpOwogICAgICAgICAgICAgZW1pdE1vdmUodGVtcC5nZXQoKSwg
cGFyYW1ldGVyVmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5zZWNvbmQp
IHsKQEAgLTc2NCw3ICs3ODIsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXpl
RGVmYXVsCiAgICAgICAgIC8vIElmIHdlIGhhdmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLCB3
ZSBoYW5kbGUgdGhpcyBjYXNlIGFib3ZlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgRGVzdHJ1Y3R1cmluZ1Bh
dHRlcm5Ob2RlKiBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5maXJzdDsKLSAgICAgICAgICAg
IGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKSB7CisgICAgICAgICAgICBpZiAoIXBhdHRl
cm4tPmlzQmluZGluZ05vZGUoKSAmJiAhcGF0dGVybi0+aXNSZXN0UGFyYW1ldGVyKCkpIHsKICAg
ICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcGFyYW1ldGVyVmFsdWUgPSAmcmVnaXN0
ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkpKTsKICAgICAgICAgICAgICAg
ICBwYXR0ZXJuLT5iaW5kVmFsdWUoKnRoaXMsIHBhcmFtZXRlclZhbHVlLmdldCgpKTsKICAgICAg
ICAgICAgIH0KQEAgLTM4MTMsNCArMzgzMSwxNSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpp
bnZhbGlkYXRlRm9ySW5DCiAgICAgfQogfQogCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFJlc3RQYXJhbWV0ZXIoUmVnaXN0ZXJJRCogcmVzdWx0LCB1bnNpZ25lZCBudW1QYXJh
bWV0ZXJzVG9Ta2lwKQoreworICAgIGVtaXROZXdBcnJheShyZXN1bHQsIG51bGxwdHIsIDApOwor
CisgICAgZW1pdE9wY29kZShvcF9jb3B5X3Jlc3QpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChyZXN1bHQtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChudW1QYXJhbWV0
ZXJzVG9Ta2lwKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OTgsNiArNTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGVyYXRvciwgY29u
c3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogICAgICAgICB2b2lkIGVtaXRJdGVy
YXRvckNsb3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBUaHJvd2FibGVFeHByZXNzaW9u
RGF0YSogbm9kZSk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc3RQYXJhbWV0ZXIoUmVn
aXN0ZXJJRCogcmVzdWx0LCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKwogICAgICAg
ICBib29sIGVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKGNvbnN0IFZhcmlhYmxlJik7CiAK
ICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4gZW1p
dHRlZC4KQEAgLTgyOCw2ICs4MzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW51bSBG
dW5jdGlvblZhcmlhYmxlVHlwZSA6IHVpbnQ4X3QgeyBOb3JtYWxGdW5jdGlvblZhcmlhYmxlLCBH
bG9iYWxGdW5jdGlvblZhcmlhYmxlIH07CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8RnVuY3Rp
b25NZXRhZGF0YU5vZGUqLCBGdW5jdGlvblZhcmlhYmxlVHlwZT4+IG1fZnVuY3Rpb25zVG9Jbml0
aWFsaXplOwogICAgICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6ZUFyZ3VtZW50cyB7IGZhbHNl
IH07CisgICAgICAgIFJlc3RQYXJhbWV0ZXJOb2RlKiBtX3Jlc3RQYXJhbWV0ZXIgeyBudWxscHRy
IH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+IG1fdHJ5UmFuZ2VzOwogICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlEYXRhOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAko
cmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzk4LDYgKzMzOTgsMzUgQEAgdm9p
ZCBCaW5kaW5nTm9kZTo6Y29sbGVjdEJvdW5kSWRlbnRpZmllcgogICAgIGlkZW50aWZpZXJzLmFw
cGVuZChtX2JvdW5kUHJvcGVydHkpOwogfQogICAgIAordm9pZCBSZXN0UGFyYW1ldGVyTm9kZTo6
Y29sbGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZpZXI+JiBpZGVudGlmaWVycykg
Y29uc3QKK3sKKyAgICBpZGVudGlmaWVycy5hcHBlbmQobV9uYW1lKTsKK30KK3ZvaWQgUmVzdFBh
cmFtZXRlck5vZGU6OnRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpIGNvbnN0Cit7Cisg
ICAgYnVpbGRlci5hcHBlbmQobV9uYW1lLnN0cmluZygpKTsKK30KK3ZvaWQgUmVzdFBhcmFtZXRl
ck5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKSBjb25zdAor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9Cit2b2lkIFJlc3RQYXJhbWV0
ZXJOb2RlOjplbWl0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCit7CisgICAgVmFyaWFi
bGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFtZSk7CisgICAgaWYgKFJlZ2lzdGVySUQq
IGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1l
dGVyKGxvY2FsLCBtX251bVBhcmFtZXRlcnNUb1NraXApOworICAgICAgICBnZW5lcmF0b3IuZW1p
dFByb2ZpbGVUeXBlKGxvY2FsLCB2YXIsIG1fZGl2b3RTdGFydCwgbV9kaXZvdEVuZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdFBhcmFtZXRl
ckFycmF5ID0gZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgbV9udW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKyAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVU
eXBlKHJlc3RQYXJhbWV0ZXJBcnJheS5nZXQoKSwgdmFyLCBtX2Rpdm90U3RhcnQsIG1fZGl2b3RF
bmQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2
ZVNjb3BlKG51bGxwdHIsIHZhcik7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyht
X2Rpdm90RW5kLCBtX2Rpdm90U3RhcnQsIG1fZGl2b3RFbmQpOworICAgIGdlbmVyYXRvci5lbWl0
UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCByZXN0UGFyYW1ldGVyQXJyYXkuZ2V0KCksIGdl
bmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5v
dEZvdW5kLCBJbml0aWFsaXphdGlvbik7Cit9CisKKwogUmVnaXN0ZXJJRCogU3ByZWFkRXhwcmVz
c2lvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKQog
ewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MDgsNiArMjUw
OCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBDb3B5UmVz
dDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrOiB7CiAgICAg
ICAgIC8vIFNpbXBsaWZ5IG91dCBjaGVja3MgdGhhdCBkb24ndCBhY3R1YWxseSBkbyBjaGVja2lu
Zy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7
ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMwLDYgKzMzMzAs
MTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
YWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2NvcHlfcmVzdDogeworICAgICAgICAgICAgbm90aWNlQXJn
dW1lbnRzVXNlKCk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKENvcHlSZXN0LAorICAgICAgICAg
ICAgICAgIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS51bnNpZ25lZFZhbHVlKSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfY29weV9yZXN0KTsKKyAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIC8vID09PSBCaXR3aXNlIG9wZXJhdGlvbnMgPT09CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5
MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50
OgogICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKICAgICBjYXNlIG9wX2NhdGNoOgorICAg
IGNhc2Ugb3BfY29weV9yZXN0OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4Myw2ICs5
ODMsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgY2FzZSBDb3B5UmVzdDogeworICAgICAgICByZWFkKFN0
YWNrKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAg
ICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoKICAgICBjYXNlIE5ld1N0cmlu
Z09iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJl
dmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgR2V0RnJvbUFy
Z3VtZW50czoKICAgICBjYXNlIFB1dFRvQXJndW1lbnRzOgorICAgIGNhc2UgQ29weVJlc3Q6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24g
MTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2OCw2ICsxMzY4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgQ29weVJlc3Q6IHsKKyAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZl
IHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8g
YWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxOTI2MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjE1OCw3ICsyMTU4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIG1fbWlzYy5l
cG9jaCA9IGVwb2NoLnRvVW5zaWduZWQoKTsKICAgICB9Ci0gICAgCisKKyAgICB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpCisgICAgeworICAgICAgICBBU1NFUlQob3AoKSA9PSBD
b3B5UmVzdCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcEluZm8p
OworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAgICAg
ewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNiArMjYyLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld0FycmF5QnVmZmVyLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhOZXdUeXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhDb3B5UmVzdCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBT
dXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAogICAgIG1hY3JvKFBoYW50b21OZXdP
YmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkyNjAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODE4LDYgKzgxOCwxNiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkNvcHlSZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhcnJheUFzQ2VsbCwgUmVn
aXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9mUGFyYW1zVG9Ta2lwLCB1bnNp
Z25lZCBudW1iZXJPZkFyZ3VtZW50cykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZkFy
Z3VtZW50cyA+IG51bWJlck9mUGFyYW1zVG9Ta2lwKTsgLy8gV2Ugc2hvdWxkIG9ubHkgY2FsbCB0
aGlzIGZyb20gSklUIGNvZGUgd2hlbiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLgorICAgIEpTQXJy
YXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihhcnJheUFzQ2VsbCk7CisgICAgdW5zaWduZWQg
YXJyYXlTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMgLSBudW1iZXJPZlBhcmFtc1RvU2tpcDsKKyAg
ICBhcnJheS0+c2V0TGVuZ3RoKGV4ZWMsIGFycmF5U2l6ZSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKQorICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaSwgYXJndW1lbnRTdGFydFtpICsgbnVtYmVyT2ZQYXJhbXNUb1NraXBdLmpzVmFsdWUo
KSk7Cit9CisKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvYmpl
Y3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYg
KzEwMyw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVEaXIKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBK
U0Z1bmN0aW9uKiBjYWxsZWUsIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CiBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChFeGVjU3Rh
dGUqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50MzJfdCBhcmd1bWVudENvdW50
KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIGludDMyX3Qg
bGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvcHlSZXN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiBhcmd1bWVudFN0YXJ0LCB1
bnNpZ25lZCBudW1iZXJPZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQgYXJndW1lbnRzQ291bnQpOwog
ZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQzMl90LCBpbnQzMl90
KSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25PYmplY3RJc09i
amVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsK
IHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3Niw2ICs2NzYsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAg
ICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgorICAgICAgICBjYXNl
IENvcHlSZXN0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8g
VGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBvbmx5IHByZXRlbmRzIHRvIHByb2R1Y2UgYSB2
YWx1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYgKzMyMiw3IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFBoYW50b21DbG9uZWRB
cmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIENvcHlSZXN0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGNhc2UgQm90dG9tVmFsdWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0MzgsNiArNDQzOCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgQ29weVJl
c3Q6IHsKKyAgICAgICAgY29tcGlsZUNvcHlSZXN0KG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3QXJyb3dGdW5jdGlvbjoK
ICAgICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxOTI2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDI3LDYgKzQ0MjcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1l
bnRzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBDb3B5UmVzdDogewor
ICAgICAgICBjb21waWxlQ29weVJlc3Qobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAog
ICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzQ0LDYgKzUzNDQsMzQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNvcHlSZXN0KE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29weVJlc3QpOworCisgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYXJyYXkodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlJl
ZyBhcnJheUdQUiA9IGFycmF5LmdwcigpOworCisgICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50c0xl
bmd0aCh0aGlzKTsKKyAgICBHUFJSZWcgYXJndW1lbnRzTGVuZ3RoR1BSID0gYXJndW1lbnRzTGVu
Z3RoLmdwcigpOworCisgICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50c1N0YXJ0KHRoaXMpOworICAg
IEdQUlJlZyBhcmd1bWVudHNTdGFydEdQUiA9IGFyZ3VtZW50c1N0YXJ0LmdwcigpOworCisgICAg
ZW1pdEdldExlbmd0aChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGFyZ3VtZW50c0xlbmd0aEdQUik7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW5PckVxdWFsLCBhcmd1bWVudHNMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMihu
b2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSk7CisKKyAgICBlbWl0R2V0QXJndW1lbnRT
dGFydChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGFyZ3VtZW50c1N0YXJ0R1BSKTsKKyAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhhcmd1bWVudHNMZW5ndGhHUFIsIGFyZ3VtZW50c1N0YXJ0R1BS
KTsKKyAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50
cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6bnVtYmVyIG9mIGFyZ3Vt
ZW50cyBvciBzaXplX3QgbWF4LgorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3Qs
IGFycmF5R1BSLCBhcmd1bWVudHNTdGFydEdQUiwgVHJ1c3RlZEltbTMyKG5vZGUtPm51bWJlck9m
QXJndW1lbnRzVG9Ta2lwKCkpLCBhcmd1bWVudHNMZW5ndGhHUFIpOworICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoYXJndW1lbnRzTGVuZ3RoR1BSKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBub1Jlc3VsdChub2RlKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqIG5vZGUpCiB7
CiAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+d2F0Y2hwb2ludFNldCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIxLDYgKzEyMjEsMTIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNSVWlVaSBvcGVyYXRpb24sIEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIEdQUlJlZyBhcmc0KQor
ICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMsIGFyZzQpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwor
ICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7
CkBAIC0yMjM4LDYgKzIyNDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlUHV0VG9Bcmd1
bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVDb3B5UmVzdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTm90aWZ5V3JpdGUo
Tm9kZSopOwogICAgIGJvb2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjEwLDYgKzIxMCw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAK
ICAgICBjYXNlIFB1dEdldHRlclNldHRlckJ5SWQ6CiAgICAgY2FzZSBQdXRHZXR0ZXJCeVZhbDoK
ICAgICBjYXNlIFB1dFNldHRlckJ5VmFsOgorICAgIGNhc2UgQ29weVJlc3Q6CiAgICAgICAgIC8v
IFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxOTI2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnku
aAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0aW9uVHlwZShp
bnQzMiwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlv
bl9FSlosIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnQ2NCwgaW50MzIpKSBcCiAgICAg
bWFjcm8oWl9KSVRPcGVyYXRpb25fRVNKc3MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBp
bnRQdHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDUlVpVWksIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGludDMyKSkK
ICAgICAKIGNsYXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsK
IHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTM3LDYgKzkzNyw5
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgICAgICAg
ICAgY29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcigpOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29weVJlc3Q6CisgICAgICAgICAgICBjb21waWxlQ29weVJlc3QoKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOgogICAgICAgICBjYXNl
IExvb3BIaW50OgpAQCAtMzU0NSw2ICszNTQ4LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlQ29weVJl
c3QoKQorICAgIHsgICAgICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgZG9Db3B5UmVzdCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29weVJlc3QgQyBjYWxsIikpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZpbGxSZXN0UGFy
YW1ldGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKSk7CisgICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50cyA9IGdldEFyZ3VtZW50c0xl
bmd0aCgpLnZhbHVlOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0
LmFib3ZlKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCisgICAg
ICAgICAgICB1bnN1cmUoZG9Db3B5UmVzdCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGRv
Q29weVJlc3QsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAx
OkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBhcmd1bWVudHMg
dG8gc2tpcCwgNDpudW1iZXIgb2YgYXJndW1lbnRzIG9yIHNpemVfdCBtYXguCisgICAgICAgIHZt
Q2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Db3B5UmVzdCksIG1f
Y2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgZ2V0QXJn
dW1lbnRzU3RhcnQoKSwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAsIG51bWJlck9mQXJndW1lbnRz
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVOZXdPYmplY3QoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRz
KQogICAgICAgICBERUZJTkVfT1Aob3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCiAgICAgICAg
IERFRklORV9PUChvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKQorICAgICAgICBERUZJ
TkVfT1Aob3BfY29weV9yZXN0KQogICAgICAgICBERUZJTkVfT1Aob3BfY2hlY2tfdGR6KQogICAg
ICAgICBERUZJTkVfT1Aob3BfYXNzZXJ0KQogICAgICAgICBERUZJTkVfT1Aob3BfZGVidWcpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MCw2ICs0OTAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9kaXJlY3RfYXJn
dW1lbnRzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfc2NvcGVk
X2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRlX291
dF9vZl9iYW5kX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3Bf
Y29weV9yZXN0KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jaGVja190ZHoo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Fzc2VydChJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM5OSw2ICsxMzk5LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFu
ZF9hcmcKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9j
b3B5X3Jlc3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2NvcHlfcmVzdCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5
Miw3IEBAIHR5cGVkZWYgY2hhciogVW51c2VkUHRyOwogICAgIFZtOiBWTSoKICAgICBXczogV2F0
Y2hwb2ludFNldCoKICAgICBaOiBpbnQzMl90CisgICAgVWk6IHVpbnQzMl90CiAqLwogCiB0eXBl
ZGVmIENhbGxGcmFtZSogSklUX09QRVJBVElPTiAoKkZfSklUT3BlcmF0aW9uX0VGSlpaKShFeGVj
U3RhdGUqLCBDYWxsRnJhbWUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCk7CkBA
IC0yMTksNiArMjIwLDcgQEAgdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJh
dAogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNT
dGF0ZSosIFZNKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9u
X0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fWikoaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0aW9uX0VDUlVpVWkpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiwgdWludDMy
X3QsIHVpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0
aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRP
cGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BF
UkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUNsaSkoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE2NzUsNiAr
MTY3NSwxMiBAQCBfbGxpbnRfb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhbGxTbG93UGF0aChf
c2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKICAgICBkaXNwYXRjaCgzKQogCitfbGxpbnRfb3Bf
Y29weV9yZXN0OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3df
cGF0aF9jb3B5X3Jlc3QpCisgICAgZGlzcGF0Y2goMykKKworCiAjIExhc3RseSwgbWFrZSBzdXJl
IHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rl
cy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBv
ciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMgbXVjaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCShyZXZpc2lvbiAxOTI2MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODM2
LDYgKzgzNiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEp
IEJpbmRpbmdOb2RlKGJvdW5kUHJvcGVydHksIHN0YXJ0LCBlbmQsIGNvbnRleHQpOwogICAgIH0K
IAorICAgIFJlc3RQYXJhbWV0ZXJOb2RlKiBjcmVhdGVSZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50
aWZpZXImIG5hbWUsIHNpemVfdCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBSZXN0UGFyYW1ldGVyTm9kZShuYW1lLCBudW1QYXJh
bWV0ZXJzVG9Ta2lwLCBzdGFydCwgZW5kKTsKKyAgICB9CisKICAgICB2b2lkIHNldEVuZE9mZnNl
dChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgbm9kZS0+c2V0RW5kT2Zm
c2V0KG9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsNiAr
MTAyMSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogICAgIAorICAgIGlubGlu
ZSBSZXN0UGFyYW1ldGVyTm9kZTo6UmVzdFBhcmFtZXRlck5vZGUoY29uc3QgSWRlbnRpZmllciYg
bmFtZSwgdW5zaWduZWQgbnVtUGFyYW1ldGVyc1RvU2tpcCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kKQorICAgICAgICA6IERlc3RydWN0dXJp
bmdQYXR0ZXJuTm9kZSgpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV9udW1Q
YXJhbWV0ZXJzVG9Ta2lwKG51bVBhcmFtZXRlcnNUb1NraXApCisgICAgICAgICwgbV9kaXZvdFN0
YXJ0KHN0YXJ0KQorICAgICAgICAsIG1fZGl2b3RFbmQoZW5kKQorICAgIHsKKyAgICB9CisKICAg
ICBpbmxpbmUgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnROb2RlOjpEZXN0cnVjdHVyaW5nQXNzaWdu
bWVudE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRGVzdHJ1Y3R1cmluZ1Bh
dHRlcm5Ob2RlKiBiaW5kaW5ncywgRXhwcmVzc2lvbk5vZGUqIGluaXRpYWxpemVyKQogICAgICAg
ICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQogICAgICAgICAsIG1fYmluZGluZ3MoYmluZGlu
Z3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTI2
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NjgsNiArMTk2OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IHZvaWQgdG9TdHJpbmcoU3RyaW5nQnVpbGRlciYpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNCaW5kaW5nTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXREaXJlY3RCaW5kaW5nKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCosIEV4cHJlc3Npb25Ob2RlKikgeyByZXR1cm4gMDsgfQogICAg
ICAgICAKICAgICBwcm90ZWN0ZWQ6CkBAIC0yMDQ4LDYgKzIwNDksMjcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEFzc2lnbm1lbnRDb250ZXh0IG1fYmluZGluZ0NvbnRleHQ7CiAgICAgfTsK
IAorICAgIGNsYXNzIFJlc3RQYXJhbWV0ZXJOb2RlIDogcHVibGljIERlc3RydWN0dXJpbmdQYXR0
ZXJuTm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBSZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJ
ZGVudGlmaWVyJiBib3VuZFByb3BlcnR5LCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpOwor
CisgICAgICAgIGJvb2wgaXNSZXN0UGFyYW1ldGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgICAgIHZvaWQgZW1pdChCeXRlY29kZUdlbmVyYXRvciYpOworCisgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0Qm91bmRJZGVudGlmaWVy
cyhWZWN0b3I8SWRlbnRpZmllcj4mKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKSBjb25zdCBvdmVy
cmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRvU3RyaW5nKFN0cmluZ0J1aWxkZXImKSBjb25z
dCBvdmVycmlkZTsKKworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBtX25hbWU7CisgICAgICAg
IHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVyc1RvU2tpcDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24g
bV9kaXZvdFN0YXJ0OyAvLyAiZiIgaW4gIi4uLmZvbyIKKyAgICAgICAgSlNUZXh0UG9zaXRpb24g
bV9kaXZvdEVuZDsKKyAgICB9OworCiAgICAgY2xhc3MgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnRO
b2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlc3Ry
dWN0dXJpbmdBc3NpZ25tZW50Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBEZXN0cnVjdHVy
aW5nUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3
LDMwIEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK2Jvb2wgUGFyc2VyPExleGVyVHlwZT46OmRlY2xh
cmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgSWRl
bnRpZmllcioqIGR1cGxpY2F0ZUlkZW50aWZpZXIpCit7CisgICAgRGVjbGFyYXRpb25SZXN1bHRN
YXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0gZGVjbGFyZVBhcmFtZXRlcigmbmFtZSk7CisgICAgaWYg
KChkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkU3RyaWN0TW9k
ZSkgJiYgc3RyaWN0TW9kZSgpKSB7CisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc0V2YWxP
ckFyZ3VtZW50cygmbmFtZSksICJDYW5ub3QgZGVzdHJ1Y3R1cmUgdG8gYSBwYXJhbWV0ZXIgbmFt
ZSAnIiwgbmFtZS5pbXBsKCksICInIGluIHN0cmljdCBtb2RlIik7CisgICAgICAgIGlmIChtX2xh
c3RGdW5jdGlvbk5hbWUgJiYgbmFtZSA9PSAqbV9sYXN0RnVuY3Rpb25OYW1lKQorICAgICAgICAg
ICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFt
ZS5pbXBsKCksICInIGFzIGl0IHNoYWRvd3MgdGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5j
dGlvbiIpOworICAgICAgICBzZW1hbnRpY0ZhaWx1cmVEdWVUb0tleXdvcmQoInBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgIGlmIChoYXNEZWNsYXJlZFBhcmFtZXRlcihuYW1lKSkKKyAgICAgICAg
ICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5h
bWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlY2xh
cmVkIik7CisgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIg
bmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOworICAgIH0KKyAgICBp
ZiAoZGVjbGFyYXRpb25SZXN1bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZER1cGxpY2F0
ZURlY2xhcmF0aW9uKSB7CisgICAgICAgIC8vIEl0J3Mgbm90IGFsd2F5cyBhbiBlcnJvciB0byBk
ZWZpbmUgYSBkdXBsaWNhdGUgcGFyYW1ldGVyLgorICAgICAgICAvLyBJdCdzIG9ubHkgYW4gZXJy
b3Igd2hlbiB0aGVyZSBhcmUgZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIG9yIGRlc3RydWN0dXJp
bmcgcGFyYW1ldGVycy4KKyAgICAgICAgLy8gV2Ugbm90ZSB0aGlzIHZhbHVlIG5vdyBzbyB3ZSBj
YW4gY2hlY2sgaXQgbGF0ZXIuCisgICAgICAgIGlmIChkdXBsaWNhdGVJZGVudGlmaWVyKQorICAg
ICAgICAgICAgKmR1cGxpY2F0ZUlkZW50aWZpZXIgPSAmbmFtZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJuIFBhcnNlcjxMZXhlclR5
cGU+OjpjcmVhdGVCaW5kaW5nUGF0dGVybihUcmVlQnVpbGRlciYgY29udGV4dCwgRGVzdHJ1Y3R1
cmluZ0tpbmQga2luZCwgRXhwb3J0VHlwZSBleHBvcnRUeXBlLCBjb25zdCBJZGVudGlmaWVyJiBu
YW1lLCBKU1Rva2VuIHRva2VuLCBBc3NpZ25tZW50Q29udGV4dCBiaW5kaW5nQ29udGV4dCwgY29u
c3QgSWRlbnRpZmllcioqIGR1cGxpY2F0ZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFuYW1l
LmlzTnVsbCgpKTsKQEAgLTY4NSwyMyArNzA5LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRGVzdHJ1YwogICAgICAgICAgICAgZmFpbElmVHJ1ZShkZWNsYXJhdGlvblJlc3Vs
dCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb24sICJDYW5u
b3QgZGVjbGFyZSBhIGxleGljYWwgdmFyaWFibGUgdHdpY2U6ICciLCBuYW1lLmltcGwoKSwgIici
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoa2luZCA9PSBEZXN0cnVjdHVyZVRvUGFyYW1l
dGVycykgewotICAgICAgICBEZWNsYXJhdGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQg
PSBkZWNsYXJlUGFyYW1ldGVyKCZuYW1lKTsKLSAgICAgICAgaWYgKChkZWNsYXJhdGlvblJlc3Vs
dCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkU3RyaWN0TW9kZSkgJiYgc3RyaWN0TW9kZSgp
KSB7Ci0gICAgICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaXNFdmFsT3JBcmd1bWVudHMoJm5h
bWUpLCAiQ2Fubm90IGRlc3RydWN0dXJlIHRvIGEgcGFyYW1ldGVyIG5hbWUgJyIsIG5hbWUuaW1w
bCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIpOwotICAgICAgICAgICAgaWYgKG1fbGFzdEZ1bmN0aW9u
TmFtZSAmJiBuYW1lID09ICptX2xhc3RGdW5jdGlvbk5hbWUpCi0gICAgICAgICAgICAgICAgc2Vt
YW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBs
KCksICInIGFzIGl0IHNoYWRvd3MgdGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbiIp
OwotICAgICAgICAgICAgc2VtYW50aWNGYWlsdXJlRHVlVG9LZXl3b3JkKCJwYXJhbWV0ZXIgbmFt
ZSIpOwotICAgICAgICAgICAgaWYgKGhhc0RlY2xhcmVkUGFyYW1ldGVyKG5hbWUpKQotICAgICAg
ICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQg
JyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSBhcyBpdCBoYXMgYWxyZWFkeSBiZWVu
IGRlY2xhcmVkIik7Ci0gICAgICAgICAgICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZWNsYXJlIGEg
cGFyYW1ldGVyIG5hbWVkICciLCBuYW1lLmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoZGVjbGFyYXRpb25SZXN1bHQgJiBEZWNsYXJhdGlvblJlc3Vs
dDo6SW52YWxpZER1cGxpY2F0ZURlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAvLyBJdCdzIG5v
dCBhbHdheXMgYW4gZXJyb3IgdG8gZGVmaW5lIGEgZHVwbGljYXRlIHBhcmFtZXRlci4KLSAgICAg
ICAgICAgIC8vIEl0J3Mgb25seSBhbiBlcnJvciB3aGVuIHRoZXJlIGFyZSBkZWZhdWx0IHBhcmFt
ZXRlciB2YWx1ZXMgb3IgZGVzdHJ1Y3R1cmluZyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgLy8g
V2Ugbm90ZSB0aGlzIHZhbHVlIG5vdyBzbyB3ZSBjYW4gY2hlY2sgaXQgbGF0ZXIuCi0gICAgICAg
ICAgICBpZiAoZHVwbGljYXRlSWRlbnRpZmllcikKLSAgICAgICAgICAgICAgICAqZHVwbGljYXRl
SWRlbnRpZmllciA9ICZuYW1lOwotICAgICAgICB9CisgICAgICAgIGRlY2xhcmVSZXN0T3JOb3Jt
YWxQYXJhbWV0ZXIobmFtZSwgZHVwbGljYXRlSWRlbnRpZmllcik7CisgICAgICAgIHByb3BhZ2F0
ZUVycm9yKCk7CiAgICAgfQogCiAgICAgaWYgKGV4cG9ydFR5cGUgPT0gRXhwb3J0VHlwZTo6RXhw
b3J0ZWQpIHsKQEAgLTE1MDIsMzIgKzE1MTEsNDUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZQogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRl
IDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JtYWxQ
YXJhbWV0ZXJzKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBs
aXN0LCB1bnNpZ25lZCYgcGFyYW1ldGVyQ291bnQpCiB7Ci0jZGVmaW5lIGZhaWxGcm9tRHVwbGlj
YXRlKCkgXAorI2RlZmluZSBmYWlsSWZEdXBsaWNhdGVJZlZpb2xhdGlvbigpIFwKICAgICBpZiAo
ZHVwbGljYXRlUGFyYW1ldGVyKSB7XAogICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZGVmYXVs
dFZhbHVlLCAiRHVwbGljYXRlIHBhcmFtZXRlciAnIiwgZHVwbGljYXRlUGFyYW1ldGVyLT5pbXBs
KCksICInIG5vdCBhbGxvd2VkIGluIGZ1bmN0aW9uIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFs
dWVzIik7XAogICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoaGFzRGVzdHJ1Y3R1cmluZ1BhdHRl
cm4sICJEdXBsaWNhdGUgcGFyYW1ldGVyICciLCBkdXBsaWNhdGVQYXJhbWV0ZXItPmltcGwoKSwg
Iicgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gd2l0aCBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMi
KTtcCisgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc1Jlc3RQYXJhbWV0ZXIsICJEdXBsaWNh
dGUgcGFyYW1ldGVyICciLCBkdXBsaWNhdGVQYXJhbWV0ZXItPmltcGwoKSwgIicgbm90IGFsbG93
ZWQgaW4gZnVuY3Rpb24gd2l0aCBhIHJlc3QgcGFyYW1ldGVyIik7XAogICAgIH0KIAotICAgIGNv
bnN0IElkZW50aWZpZXIqIGR1cGxpY2F0ZVBhcmFtZXRlciA9IG51bGxwdHI7CiAgICAgYm9vbCBo
YXNEZXN0cnVjdHVyaW5nUGF0dGVybiA9IGZhbHNlOwotICAgIGF1dG8gcGFyYW1ldGVyID0gcGFy
c2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywg
RXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVj
dHVyaW5nUGF0dGVybik7Ci0gICAgZmFpbElmRmFsc2UocGFyYW1ldGVyLCAiQ2Fubm90IHBhcnNl
IHBhcmFtZXRlciBwYXR0ZXJuIik7Ci0gICAgYXV0byBkZWZhdWx0VmFsdWUgPSBwYXJzZURlZmF1
bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQpOwotICAgIHByb3BhZ2F0ZUVy
cm9yKCk7Ci0gICAgZmFpbEZyb21EdXBsaWNhdGUoKTsKLSAgICBjb250ZXh0LmFwcGVuZFBhcmFt
ZXRlcihsaXN0LCBwYXJhbWV0ZXIsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgcGFyYW1ldGVyQ291bnQr
KzsKLSAgICB3aGlsZSAoY29uc3VtZShDT01NQSkpIHsKLSAgICAgICAgcGFyYW1ldGVyID0gcGFy
c2VEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywg
RXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQsICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVj
dHVyaW5nUGF0dGVybik7CisgICAgYm9vbCBpc1Jlc3RQYXJhbWV0ZXIgPSBmYWxzZTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBkdXBsaWNhdGVQYXJhbWV0ZXIgPSBudWxscHRyOworICAgIGRvIHsK
KyAgICAgICAgVHJlZURlc3RydWN0dXJpbmdQYXR0ZXJuIHBhcmFtZXRlciA9IDA7CisgICAgICAg
IFRyZWVFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZSA9IDA7CisKKyAgICAgICAgaWYgKG1hdGNoKERP
VERPVERPVCkpIHsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNl
KG1hdGNoU3BlY0lkZW50aWZpZXIoKSwgIlJlc3QgcGFyYW1ldGVyICcuLi4nIHNob3VsZCBiZSBm
b2xsb3dlZCBieSBhIHZhcmlhYmxlIGlkZW50aWZpZXIiKTsKKyAgICAgICAgICAgIGRlY2xhcmVS
ZXN0T3JOb3JtYWxQYXJhbWV0ZXIoKm1fdG9rZW4ubV9kYXRhLmlkZW50LCAmZHVwbGljYXRlUGFy
YW1ldGVyKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CisgICAgICAgICAgICBKU1Rl
eHRQb3NpdGlvbiBpZGVudGlmaWVyU3RhcnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICAg
ICAgICAgIEpTVGV4dFBvc2l0aW9uIGlkZW50aWZpZXJFbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7
CisgICAgICAgICAgICBwYXJhbWV0ZXIgPSBjb250ZXh0LmNyZWF0ZVJlc3RQYXJhbWV0ZXIoKm1f
dG9rZW4ubV9kYXRhLmlkZW50LCBwYXJhbWV0ZXJDb3VudCwgaWRlbnRpZmllclN0YXJ0LCBpZGVu
dGlmaWVyRW5kKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWUo
bWF0Y2goQ09NTUEpLCAiUmVzdCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHRoZSBsYXN0IHBhcmFtZXRl
ciBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIik7IC8vIExldCdzIGhhdmUgYSBnb29kIGVycm9y
IG1lc3NhZ2UgZm9yIHRoaXMgY29tbW9uIGNhc2UuCisgICAgICAgICAgICBpc1Jlc3RQYXJhbWV0
ZXIgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNl
RGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29udGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMsIEV4
cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCAmZHVwbGljYXRlUGFyYW1ldGVyLCAmaGFzRGVzdHJ1Y3R1
cmluZ1BhdHRlcm4pOwogICAgICAgICBmYWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFy
c2UgcGFyYW1ldGVyIHBhdHRlcm4iKTsKLSAgICAgICAgZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZh
dWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5nUGF0dGVybihjb250ZXh0KTsKKyAgICAgICAgaWYgKCFp
c1Jlc3RQYXJhbWV0ZXIpCisgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBwYXJzZURlZmF1bHRW
YWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0ZXJuKGNvbnRleHQpOwogICAgICAgICBwcm9wYWdhdGVF
cnJvcigpOwotICAgICAgICBmYWlsRnJvbUR1cGxpY2F0ZSgpOworICAgICAgICBmYWlsSWZEdXBs
aWNhdGVJZlZpb2xhdGlvbigpOwogICAgICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0
LCBwYXJhbWV0ZXIsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgIHBhcmFtZXRlckNvdW50Kys7Ci0g
ICAgfQorICAgICAgICBpZiAoIWlzUmVzdFBhcmFtZXRlcikKKyAgICAgICAgICAgIHBhcmFtZXRl
ckNvdW50Kys7CisgICAgfSB3aGlsZSAoIWlzUmVzdFBhcmFtZXRlciAmJiBjb25zdW1lKENPTU1B
KSk7CisKICAgICByZXR1cm4gdHJ1ZTsKLSN1bmRlZiBmYWlsRnJvbUR1cGxpY2F0ZQorI3VuZGVm
IGZhaWxJZkR1cGxpY2F0ZUlmVmlvbGF0aW9uCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhl
clR5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9u
IDE5MjYwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMzQsNiArMTAzNCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdHJpY3RN
b2RlKCkgeyByZXR1cm4gY3VycmVudFNjb3BlKCktPnN0cmljdE1vZGUoKTsgfQogICAgIGJvb2wg
aXNWYWxpZFN0cmljdE1vZGUoKSB7IHJldHVybiBjdXJyZW50U2NvcGUoKS0+aXNWYWxpZFN0cmlj
dE1vZGUoKTsgfQogICAgIERlY2xhcmF0aW9uUmVzdWx0TWFzayBkZWNsYXJlUGFyYW1ldGVyKGNv
bnN0IElkZW50aWZpZXIqIGlkZW50KSB7IHJldHVybiBjdXJyZW50U2NvcGUoKS0+ZGVjbGFyZVBh
cmFtZXRlcihpZGVudCk7IH0KKyAgICBib29sIGRlY2xhcmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIo
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IElkZW50aWZpZXIqKik7CisKICAgICBib29sIGJyZWFr
SXNWYWxpZCgpCiAgICAgewogICAgICAgICBTY29wZVJlZiBjdXJyZW50ID0gY3VycmVudFNjb3Bl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIu
aAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50
YXhDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAg
ICAgICBGdW5jdGlvbkV4cHIsIENsYXNzRXhwciwgU3VwZXJFeHByLCBCcmFja2V0RXhwciwgRG90
RXhwciwgQ2FsbEV4cHIsCiAgICAgICAgIE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFy
eUV4cHIsIEJpbmFyeUV4cHIsCiAgICAgICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4
cHIsIFR5cGVvZkV4cHIsIE5ld1RhcmdldEV4cHIsCi0gICAgICAgIERlbGV0ZUV4cHIsIEFycmF5
TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZXN0cnVjdHVyaW5nLAorICAgICAgICBEZWxldGVFeHByLCBB
cnJheUxpdGVyYWxFeHByLCBCaW5kaW5nRGVzdHJ1Y3R1cmluZywgUmVzdFBhcmFtZXRlciwKICAg
ICAgICAgQXJyYXlEZXN0cnVjdHVyaW5nLCBPYmplY3REZXN0cnVjdHVyaW5nLCBTb3VyY2VFbGVt
ZW50c1Jlc3VsdCwKICAgICAgICAgRnVuY3Rpb25Cb2R5UmVzdWx0LCBTcHJlYWRFeHByLCBBcmd1
bWVudHNSZXN1bHQsCiAgICAgICAgIFByb3BlcnR5TGlzdFJlc3VsdCwgQXJndW1lbnRzTGlzdFJl
c3VsdCwgRWxlbWVudHNMaXN0UmVzdWx0LApAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAg
ICB0eXBlZGVmIGludCBEZXN0cnVjdHVyaW5nUGF0dGVybjsKICAgICB0eXBlZGVmIERlc3RydWN0
dXJpbmdQYXR0ZXJuIEFycmF5UGF0dGVybjsKICAgICB0eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0
ZXJuIE9iamVjdFBhdHRlcm47CisgICAgdHlwZWRlZiBEZXN0cnVjdHVyaW5nUGF0dGVybiBSZXN0
UGF0dGVybjsKIAogICAgIHN0YXRpYyBjb25zdCBib29sIENyZWF0ZXNBU1QgPSBmYWxzZTsKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBOZWVkc0ZyZWVWYXJpYWJsZUluZm8gPSBmYWxzZTsKQEAgLTM0
Niw2ICszNDcsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIEJpbmRpbmdEZXN0
cnVjdHVyaW5nOwogICAgIH0KKyAgICBSZXN0UGF0dGVybiBjcmVhdGVSZXN0UGFyYW1ldGVyKGNv
bnN0IElkZW50aWZpZXImLCBzaXplX3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNU
ZXh0UG9zaXRpb24mKQorICAgIHsgCisgICAgICAgIHJldHVybiBSZXN0UGFyYW1ldGVyOworICAg
IH0KIAogICAgIGJvb2wgaXNCaW5kaW5nTm9kZShEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJu
KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDQg
KzcwMSwyMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBS
RVRVUk4ocmVzb2x2ZWRTY29wZSk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb3B5
X3Jlc3QpCit7CisgICAgQkVHSU4oKTsKKyAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBw
Y1syXS51LnVuc2lnbmVkVmFsdWU7CisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzVG9GdW5jdGlv
biA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAobnVtQXJndW1lbnRzVG9GdW5jdGlv
biA8PSBudW1QYXJhbXNUb1NraXApCisgICAgICAgIEVORCgpOworCisgICAgSlNBcnJheSogYXJy
YXkgPSBqc0Nhc3Q8SlNBcnJheSo+KE9QKDEpLmpzVmFsdWUoKSk7CisgICAgc2l6ZV90IGFycmF5
U2l6ZSA9IG51bUFyZ3VtZW50c1RvRnVuY3Rpb24gLSBudW1QYXJhbXNUb1NraXA7CisgICAgYXJy
YXktPnNldExlbmd0aChleGVjLCBhcnJheVNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJyYXlTaXplOyBpKyspCisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpICsgbnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgRU5E
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE5MjYwMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTMsNiArMjkzLDcgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9h
c3NlcnQpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9z
Y29wZSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOwor
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb3B5X3Jlc3QpOwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAkocmV2aXNp
b24gMTkyNjAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDg1LDE1ICsxMDg1LDE1IEBACiAtIHBhdGg6IGVzNi9SZWdFeHBfeV9h
bmRfdV9mbGFnc195X2ZsYWdfbGFzdEluZGV4LmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBh
dGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNfYXJndW1lbnRzX29iamVjdF9pbnRlcmFjdGlvbi5qcwot
ICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9y
ZXN0X3BhcmFtZXRlcnNfYmFzaWNfZnVuY3Rpb25hbGl0eS5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFp
bAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNfY2Fu
dF9iZV91c2VkX2luX3NldHRlcnMuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5F
UzYgOm5vcm1hbAogLSBwYXRoOiBlczYvcmVzdF9wYXJhbWV0ZXJzX2Z1bmN0aW9uX2xlbmd0aF9w
cm9wZXJ0eS5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAt
IHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNfbmV3X0Z1bmN0aW9uX3N1cHBvcnQuanMKLSAgY21k
OiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvU2V0X2l0
ZXJhdG9yX2Nsb3NpbmcuanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1NldF9T
ZXRbU3ltYm9sLnNwZWNpZXNdLmpzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWFuZC1kZWZhdWx0LWFyZ3VtZW50cy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWFu
ZC1kZWZhdWx0LWFyZ3VtZW50cy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYW5kLWRlZmF1bHQtYXJndW1lbnRzLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7Cisg
ICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQorfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gc2hvdWxkVGhyb3dURFooZnVuYykgeworICAg
IHZhciBoYXNUaHJvd24gPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAg
fSBjYXRjaChlKSB7CisgICAgICAgIGlmIChlLm5hbWUuaW5kZXhPZigiUmVmZXJlbmNlRXJyb3Ii
KSAhPT0gLTEpCisgICAgICAgICAgICBoYXNUaHJvd24gPSB0cnVlOworICAgIH0KKyAgICBhc3Nl
cnQoaGFzVGhyb3duKTsKK30KK25vSW5saW5lKHNob3VsZFRocm93VERaKTsKKworZnVuY3Rpb24g
Zm9vKGEgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGM7IH0sIGIgPSBhKCksIC4uLmMpIHsKKyAgICBy
ZXR1cm4gYSgpOworfQorbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gYmF6KGEgPSBmdW5jdGlv
bigpIHsgcmV0dXJuIGI7IH0sIC4uLmIpIHsKKyAgICByZXR1cm4gYSgpOworfQorCitmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgIHNob3VsZFRocm93VERaKGZ1bmN0aW9uKCkg
eyBmb28odW5kZWZpbmVkLCB1bmRlZmluZWQsIDEwLCAyMCk7IH0pOworICAgIGxldCBvID0ge3g6
IDIwfTsKKyAgICBsZXQgcmVzdWx0ID0gYmF6KHVuZGVmaW5lZCwgMTAsIG8sICJiYXoiKTsKKyAg
ICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0g
MTApOworICAgIGFzc2VydChyZXN1bHRbMV0gPT09IG8pOworICAgIGFzc2VydChyZXN1bHRbMl0g
PT09ICJiYXoiKTsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cmVzdC1wYXJhbWV0ZXItYmFzaWNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYmFzaWNzLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1iYXNp
Y3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDMgQEAKK2Z1bmN0aW9uIGFzc2VydChi
KSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24i
KQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gZm9vKGEsIC4uLmIpIHsKKyAgICBy
ZXR1cm4gYjsgICAgCit9Citub0lubGluZShmb28pOworCitmdW5jdGlvbiBiYXIoYSwgLi4uYikg
eworICAgIHJldHVybiBhICsgYlswXTsKK30KK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGJh
eihhLCAuLi5iKSB7CisgICAgZnVuY3Rpb24gY2FwdHVyZSgpIHsgcmV0dXJuIGI7IH0KKyAgICBh
c3NlcnQoYlswXSA9PT0gY2FwdHVyZSgpWzBdKTsKKyAgICByZXR1cm4gYSArIGJbMF07Cit9Citu
b0lubGluZShiYXopOworCitmdW5jdGlvbiBqYXooYSwgLi4uYikgeworICAgIGZ1bmN0aW9uIGNh
cHR1cmUoKSB7IHJldHVybiBhICsgYlswXTsgfQorICAgIGFzc2VydChjYXB0dXJlKCkgPT09IGEg
KyBiWzBdKTsKKyAgICByZXR1cm4gYSArIGJbMF07Cit9Citub0lubGluZShqYXopOworCitmdW5j
dGlvbiBrYXooYSA9IDEwLCAuLi5iKSB7CisgICAgcmV0dXJuIGEgKyBiWzBdCit9Citub0lubGlu
ZShrYXopOworCitmdW5jdGlvbiByYXooYSA9IDEwLCAuLi5iKSB7CisgICAgZnVuY3Rpb24gY2Fw
dHVyZSgpIHsgcmV0dXJuIGEgKyBiWzBdOyB9CisgICAgYXNzZXJ0KGNhcHR1cmUoKSA9PT0gYSAr
IGJbMF0pOworICAgIHJldHVybiBhICsgYlswXTsKK30KK25vSW5saW5lKHJheik7CisKK2Z1bmN0
aW9uIHJlc3RMZW5ndGgoYSwgLi4uYikgeworICAgIHJldHVybiBiLmxlbmd0aDsKK30KK25vSW5s
aW5lKHJlc3RMZW5ndGgpOworCitmdW5jdGlvbiB0ZXN0QXJndW1lbnRzT2JqZWN0KC4uLmFyZ3Mp
IHsKKyAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IGFyZ3VtZW50cy5sZW5ndGgpOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKKyAgICAgICAgYXNzZXJ0KGFyZ3Nb
aV0gPT09IGFyZ3VtZW50c1tpXSk7Cit9Citub0lubGluZSh0ZXN0QXJndW1lbnRzT2JqZWN0KTsK
KworZnVuY3Rpb24gc3RyaWN0TW9kZUxpa2VBcmd1bWVudHNPYmplY3QoYSwgLi4uYXJncykgewor
ICAgIGFzc2VydChhcmd1bWVudHNbMF0gPT09IGEpOworICAgIGEgPSAiYSI7CisgICAgYXNzZXJ0
KGFyZ3VtZW50c1swXSAhPT0gYSk7CisgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gMjApOwor
ICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09PSAyKTsKKyAgICBhc3NlcnQoYXJncy5sZW5n
dGggPT09IDEpOworICAgIGFzc2VydChhcmd1bWVudHNbMV0gPT09IGFyZ3NbMF0pOworICAgIGFy
Z3VtZW50c1sxXSA9ICJiIjsKKyAgICBhc3NlcnQoYXJnc1swXSAhPT0gImIiKTsKK30KK25vSW5s
aW5lKHN0cmljdE1vZGVMaWtlQXJndW1lbnRzT2JqZWN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwMDsgaSsrKSB7CisgICAgbGV0IGExID0gZm9vKDEwLCAyMCk7CisgICAgYXNzZXJ0KGEx
IGluc3RhbmNlb2YgQXJyYXkpOworICAgIGFzc2VydChhMS5sZW5ndGggPT09IDEpOworICAgIGFz
c2VydChhMVswXSA9PT0gMjApOworCisgICAgbGV0IGEyID0gZm9vKDEwKTsKKyAgICBhc3NlcnQo
YTIgaW5zdGFuY2VvZiBBcnJheSk7CisgICAgYXNzZXJ0KGEyLmxlbmd0aCA9PT0gMCk7CisKKyAg
ICBsZXQgYTMgPSBiYXIoMTAsIDIwKTsKKyAgICBhc3NlcnQoYTMgPT09IDMwKTsKKworICAgIGxl
dCBhNCA9IGJheigxMCwgMjApOworICAgIGFzc2VydChhNCA9PT0gMzApOworCisgICAgbGV0IGE1
ID0gamF6KCJoZWxsbyIsICJ3b3JsZCIpOworICAgIGFzc2VydChhNSA9PT0gImhlbGxvd29ybGQi
KTsKKworICAgIGxldCBhNiA9IGtheih1bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTYgPT09
IDUwKTsKKworICAgIGxldCBhNyA9IGtheih1bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTcg
PT09IDUwKTsKKworICAgIGFzc2VydChyZXN0TGVuZ3RoKCkgPT09IDApOworICAgIGFzc2VydChy
ZXN0TGVuZ3RoKDEpID09PSAwKTsKKyAgICBhc3NlcnQocmVzdExlbmd0aCgxLCAxKSA9PT0gMSk7
CisgICAgYXNzZXJ0KHJlc3RMZW5ndGgoMSwgMSwgMSkgPT09IDIpOworICAgIGFzc2VydChyZXN0
TGVuZ3RoKDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEpID09PSAyMCk7CisKKyAgICBsZXQgb2JqID0ge2ZvbzogNDB9OworICAgIHRl
c3RBcmd1bWVudHNPYmplY3QoImhlbGxvIiwgb2JqLCAxMDAsIDEyLjM0LCAid29ybGQiLCBvYmos
IFsxLCAyLCAzXSk7CisKKyAgICBzdHJpY3RNb2RlTGlrZUFyZ3VtZW50c09iamVjdCgyMCwgMzAp
OworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFt
ZXRlci1pbmxpbmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItaW5saW5lZC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItaW5saW5lZC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIikKK30KK25v
SW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGJhciguLi5yZXN0KSB7CisgICAgcmV0dXJuIHJl
c3Q7Cit9CisKK2Z1bmN0aW9uIGZvbyhhLCBiLCBjKSB7CisgICAgcmV0dXJuIGJhcihhLCBiLCBj
KTsKK30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykg
eworICAgIGxldCByZXN1bHQgPSBmb28oMTAsIDIwLCAzMCk7CisgICAgYXNzZXJ0KHJlc3VsdC5s
ZW5ndGggPT09IDMpOworICAgIGFzc2VydChyZXN1bHRbMF0gPT09IDEwKTsKKyAgICBhc3NlcnQo
cmVzdWx0WzFdID09PSAyMCk7CisgICAgYXNzZXJ0KHJlc3VsdFsyXSA9PT0gMzApOworfQorCitm
dW5jdGlvbiBiYXooLi4ucmVzdCkgeworICAgIHJldHVybiByZXN0OworfQorZnVuY3Rpb24gamF6
KGEsIGIsIGMpIHsKKyAgICByZXR1cm4gYmF6LmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cykpOworfQorbm9JbmxpbmUoamF6KTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCA1MDAwMDsgaSsrKSB7CisgICAgbGV0IHJlc3VsdCA9IGpheigxMCwgMjAsIDMwKTsK
KyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9
PT0gMTApOworICAgIGFzc2VydChyZXN1bHRbMV0gPT09IDIwKTsKKyAgICBhc3NlcnQocmVzdWx0
WzJdID09PSAzMCk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTI2MDMpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0xMS0xOCAg
U2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbRVM2XSBBZGQgc3Vw
cG9ydCBmb3IgcmVzdCBwYXJhbWV0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODQwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICoganMvcGFyc2VyLXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICoganMvc2NyaXB0LXRlc3RzL3BhcnNlci1zeW50YXgtY2hlY2suanM6CisgICAgICAg
IChjYXRjaCk6CisKIDIwMTUtMTEtMTggIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWVkaWFTdHJlYW06IEltcGxlbWVudCBNZWRpYURldmljZXMuZ2V0
U3VwcG9ydGVkQ29uc3RyYWludHMKSW5kZXg6IExheW91dFRlc3RzL2pzL3BhcnNlci1zeW50YXgt
Y2hlY2stZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3BhcnNlci1z
eW50YXgtY2hlY2stZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxOTI2MDMpCisrKyBMYXlvdXRUZXN0
cy9qcy9wYXJzZXItc3ludGF4LWNoZWNrLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
OTI5LDYgKzkyOSw0OSBAQCBQQVNTIEludmFsaWQ6ICIxICUgCiAtLSIKIFBBU1MgSW52YWxpZDog
ImZ1bmN0aW9uIGYoKSB7IDEgJSAKIC0tIH0iCitSZXN0IHBhcmFtZXRlcgorUEFTUyBWYWxpZDog
ICAiZnVuY3Rpb24gZm9vKC4uLmEpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGYoKSB7
IGZ1bmN0aW9uIGZvbyguLi5hKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyhh
LCAuLi5iKSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28o
YSwgLi4uYikgeyB9IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oYSA9IDIwLCAuLi5i
KSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oYSA9IDIw
LCAuLi5iKSB7IH0gfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyhhLCBiLCBjLCBkLCBl
LCBmLCBnLCAuLi5oKSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlv
biBmb28oYSwgYiwgYywgZCwgZSwgZiwgZywgLi4uaCkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJm
dW5jdGlvbiBmb28oYSwgLi4uYiwgYykgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigp
IHsgZnVuY3Rpb24gZm9vKGEsIC4uLmIsIGMpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rp
b24gZm9vKGEsIC4uLmIsICkgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVu
Y3Rpb24gZm9vKGEsIC4uLmIsICkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28o
YSwgLi4uYSkgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9v
KGEsIC4uLmEpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLmEsIC4uLmIp
IHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5hLCAu
Li5iKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi5iLCAuLi5iKSB7IH0i
CitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uYiwgLi4uYikg
eyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uYiAgLi4uYikgeyB9IgorUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmIgIC4uLmIpIHsgfSB9
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKGEsIGEsIC4uLmIpIHsgfSIKK1BBU1MgSW52
YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyhhLCBhLCAuLi5iKSB7IH0gfSIKK1BB
U1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi57Yn0pIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1
bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi57Yn0pIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAi
ZnVuY3Rpb24gZm9vKC4uLltiXSkgeyB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsg
ZnVuY3Rpb24gZm9vKC4uLltiXSkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28o
Li4uMTIzKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28o
Li4uMTIzKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi4xMjNhYmMpIHsg
fSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi4xMjNhYmMp
IHsgfSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZm9vKC4uLmFiYzEyMykgeyB9IgorUEFT
UyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmFiYzEyMykgeyB9IH0i
CitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0iCitQQVNTIFZhbGlkOiAg
ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0gfSIKK1BBU1MgSW52YWxp
ZDogIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9IgorUEFTUyBJbnZhbGlk
OiAiZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4ubGV0KSB7IH0g
fSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyguLi55aWVsZCkgeyB9IgorUEFTUyBWYWxp
ZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0gfSIKK1BBU1Mg
SW52YWxpZDogIid1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZm9vKC4uLnlpZWxkKSB7IH0iCitQQVNT
IEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyAndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGZvbyguLi55
aWVsZCkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uaWYpIHsgfSIKK1BB
U1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5pZikgeyB9IH0iCiBQ
QVNTIGUubGluZSBpcyAxCiBQQVNTIGZvbyBpcyAnUEFTUycKIFBBU1MgYmFyIGlzICdQQVNTJwpJ
bmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3BhcnNlci1zeW50YXgtY2hlY2suanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3BhcnNlci1zeW50YXgt
Y2hlY2suanMJKHJldmlzaW9uIDE5MjYwMykKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9wYXJzZXItc3ludGF4LWNoZWNrLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsNiArNTU2LDI5
IEBAIGludmFsaWQoIjEgJSAtLSIpOwogaW52YWxpZCgiMSAlIFxuKysiKTsKIGludmFsaWQoIjEg
JSBcbi0tIik7CiAKK2RlYnVnKCJSZXN0IHBhcmFtZXRlciIpOwordmFsaWQoImZ1bmN0aW9uIGZv
byguLi5hKSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oYSwgLi4uYikgeyB9Iik7Cit2YWxp
ZCgiZnVuY3Rpb24gZm9vKGEgPSAyMCwgLi4uYikgeyB9Iik7Cit2YWxpZCgiZnVuY3Rpb24gZm9v
KGEsIGIsIGMsIGQsIGUsIGYsIGcsIC4uLmgpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9v
KGEsIC4uLmIsIGMpIHsgfSIpCitpbnZhbGlkKCJmdW5jdGlvbiBmb28oYSwgLi4uYiwgKSB7IH0i
KQoraW52YWxpZCgiZnVuY3Rpb24gZm9vKGEsIC4uLmEpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rp
b24gZm9vKC4uLmEsIC4uLmIpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmIsIC4u
LmIpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmIgIC4uLmIpIHsgfSIpOworaW52
YWxpZCgiZnVuY3Rpb24gZm9vKGEsIGEsIC4uLmIpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24g
Zm9vKC4uLntifSkgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uW2JdKSB7IH0iKTsK
K2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi4xMjMpIHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24g
Zm9vKC4uLjEyM2FiYykgeyB9Iik7Cit2YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmFiYzEyMykgeyB9
Iik7Cit2YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9Iik7CitpbnZhbGlkKCIndXNlIHN0
cmljdCc7IGZ1bmN0aW9uIGZvbyguLi5sZXQpIHsgfSIpOwordmFsaWQoImZ1bmN0aW9uIGZvbygu
Li55aWVsZCkgeyB9Iik7CitpbnZhbGlkKCIndXNlIHN0cmljdCc7IGZ1bmN0aW9uIGZvbyguLi55
aWVsZCkgeyB9Iik7CitpbnZhbGlkKCJmdW5jdGlvbiBmb28oLi4uaWYpIHsgfSIpOworCiAKIAog
dHJ5IHsgZXZhbCgiYS5iLmMgPSB7fTsiKTsgfSBjYXRjaChlMSkgeyBlPWUxOyBzaG91bGRCZSgi
ZS5saW5lIiwgIjEiKSB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265891</attachid>
            <date>2015-11-19 13:08:29 -0800</date>
            <delta_ts>2015-11-19 18:38:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>59342</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNjU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NiBA
QAorMjAxNS0xMS0xOSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbRVM2XSBBZGQgc3VwcG9ydCBmb3IgcmVzdCBwYXJhbWV0ZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwOAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyByZXN0
IHBhcmFtZXRlcnMgZnJvbSB0aGUgRVM2IHNwZWMuCisgICAgICAgIGh0dHA6Ly93d3cuZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvaW5kZXguaHRtbCNzZWMtZnVuY3Rpb24tZGVm
aW5pdGlvbnMKKworICAgICAgICBXZSBpbXBsZW1lbnQgdGhlIHJlc3QgcGFyYW1ldGVyIGFzIGEg
bmV3IEFTVCBub2RlLiBUaGlzIEFTVCBub2RlCisgICAgICAgIGxvd2VycyB0byAib3BfbmV3X2Fy
cmF5IFgsIG9wX2NvcHlfcmVzdCBYIi4gTm90ZQorICAgICAgICB0aGF0IHRoZSBvcF9jb3B5X3Jl
c3Qgb3Bjb2RlIGRvZXMgbm90IGhhdmUgYSByZXN1bHQuCisgICAgICAgIFRoZSBidWxrIG9mIHRo
aXMgcGF0Y2ggaXMgaW1wbGVtZW50aW5nIG9wX2NvcHlfcmVzdC4KKyAgICAgICAgVGhpcyBwYXRj
aCBpbXBsZW1lbnRzIHRoaXMgaW4gYWxsIGZvdXIgdGllcnMgaW4gYSBzdHJhaWdodCBmb3J3YXJk
IHdheS4KKyAgICAgICAgVGhlIG9wY29kZSBpcyBpbXBsZW1lbnRlZCBhcyBhIEMgY2FsbCB0aGF0
IHdpbGwgcmVhZCB0aGUgcGVydGluZW50CisgICAgICAgIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxs
IGZyYW1lIGFuZCBmaWxsIHRoZW0gaW50byB0aGUgYXJyYXkuCisKKyAgICAgICAgKiBieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5o
OgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgIChKU0M6Okluc3RydWN0
aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFs
dWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2spOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6aW52YWxpZGF0ZUZvckluQ29udGV4dEZvckxvY2FsKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXN0UGFyYW1ldGVyKToKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ05vZGU6OmNvbGxlY3RCb3VuZElkZW50
aWZpZXJzKToKKyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmNvbGxlY3RCb3VuZElk
ZW50aWZpZXJzKToKKyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OnRvU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6OmJpbmRWYWx1ZSk6CisgICAgICAgIChK
U0M6OlJlc3RQYXJhbWV0ZXJOb2RlOjplbWl0KToKKyAgICAgICAgKEpTQzo6U3ByZWFkRXhwcmVz
c2lvbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNH
Qy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4
dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldEVw
b2NoKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6ZHVtcENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDb3B5UmVzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOb3RpZnlXcml0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToK
KyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpj
YW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb3B5UmVzdCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5ld09iamVjdCk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVu
dHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY29weV9yZXN0KToKKyAgICAgICAgKiBq
aXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1
aWxkZXI6OmNyZWF0ZUJpbmRpbmdMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
OmNyZWF0ZVJlc3RQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpzZXRFbmRP
ZmZzZXQpOgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChK
U0M6OkJpbmRpbmdOb2RlOjpCaW5kaW5nTm9kZSk6CisgICAgICAgIChKU0M6OlJlc3RQYXJhbWV0
ZXJOb2RlOjpSZXN0UGFyYW1ldGVyTm9kZSk6CisgICAgICAgIChKU0M6OkRlc3RydWN0dXJpbmdB
c3NpZ25tZW50Tm9kZTo6RGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnROb2RlKToKKyAgICAgICAgKiBw
YXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlOjpp
c0JpbmRpbmdOb2RlKToKKyAgICAgICAgKEpTQzo6RGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlOjpp
c1Jlc3RQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGU6
OmVtaXREaXJlY3RCaW5kaW5nKToKKyAgICAgICAgKEpTQzo6UmVzdFBhcmFtZXRlck5vZGU6Om5h
bWUpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8
TGV4ZXJUeXBlPjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCk6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+OjpkZWNsYXJlUmVzdE9yTm9ybWFsUGFyYW1ldGVyKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OmNyZWF0ZUJpbmRpbmdQYXR0ZXJuKToKKyAgICAg
ICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlRm9ybWFsUGFyYW1ldGVycyk6CisgICAg
ICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlNDOjpQYXJzZXI6OnN0cmljdE1vZGUp
OgorICAgICAgICAoSlNDOjpQYXJzZXI6OmlzVmFsaWRTdHJpY3RNb2RlKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyOjpkZWNsYXJlUGFyYW1ldGVyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpicmVh
a0lzVmFsaWQpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChK
U0M6OlN5bnRheENoZWNrZXI6Om9wZXJhdG9yU3RhY2tQb3ApOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAg
ICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogdGVzdHMvZXM2Lnlh
bWw6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWFuZC1kZWZhdWx0LWFy
Z3VtZW50cy5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoc2hvdWxkVGhy
b3dURFopOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChpLnNob3Vs
ZFRocm93VERaKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYmFzaWNz
LmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChmb28pOgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKGNhcHR1cmUpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGpheik6
CisgICAgICAgIChrYXopOgorICAgICAgICAocmF6KToKKyAgICAgICAgKHJlc3RMZW5ndGgpOgor
ICAgICAgICAodGVzdEFyZ3VtZW50c09iamVjdCk6CisgICAgICAgIChzdHJpY3RNb2RlTGlrZUFy
Z3VtZW50c09iamVjdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWlu
bGluZWQuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKGJhcik6CisgICAg
ICAgIChmb28pOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGpheik6CisKIDIwMTUtMTEtMTkg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGVEwtPkIzIGxvd2Vy
aW5nIHNob3VsZCBzdXBwb3J0IGxhenkgc2xvdyBwYXRocywgcGF0Y2hwb2ludHMsIGFsbCBpbnRl
Z2VyIGNvbXBhcmlzb25zLCBhbmQgbW9yZSBsb2FkL3N0b3JlcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTky
NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29u
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDggQEAKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSIsICJsZW5ndGgiIDogNCB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3BfdG9faW5kZXhfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9sb2FkX2Fycm93ZnVuY3Rpb25fdGhpcyIsICJsZW5n
dGgiIDogMiB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfYXNzZXJ0IiwgImxlbmd0aCIg
OiAzIH0KKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2Fzc2VydCIsICJsZW5ndGgiIDogMyB9
LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY29weV9yZXN0IiwgImxlbmd0aCI6IDMgfQog
ICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMTkyNjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcwLDcgKzcwLDggQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAg
IGNhc2Ugb3BfamVxX251bGw6CiAgICAgY2FzZSBvcF9qbmVxX251bGw6CiAgICAgY2FzZSBvcF9k
ZWM6Ci0gICAgY2FzZSBvcF9pbmM6IHsKKyAgICBjYXNlIG9wX2luYzogCisgICAgY2FzZSBvcF9j
b3B5X3Jlc3Q6IHsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTI0Nyw2ICsyNDgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29k
ZUJsCiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKTsKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgLy8gVGhl
c2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5nLgorICAgIGNhc2Ugb3BfY29weV9yZXN0OgogICAgIGNh
c2Ugb3BfcHV0X3RvX3Njb3BlOgogICAgIGNhc2Ugb3BfZW5kOgogICAgIGNhc2Ugb3BfcHJvZmls
ZV93aWxsX2NhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsMTQgQEAg
dm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIG91dC5wcmludGYoIiVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9jb3B5X3Jlc3Q6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiY29weV9yZXN0Iik7CisgICAgICAgICAgICBvdXQucHJpbnRmKCIl
cywgIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOworICAgICAgICAgICAgc2l6ZV90IGFyZ3Vt
ZW50T2Zmc2V0ID0gYml0d2lzZV9jYXN0PHNpemVfdD4oKCsraXQpLT51LnBvaW50ZXIpOworICAg
ICAgICAgICAgb3V0LnByaW50ZigiQXJndW1lbnRzT2Zmc2V0OiAlenUiLCBhcmd1bWVudE9mZnNl
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0
ZV90aGlzOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE5MjY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw2ICs3NSwxMyBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24gewogICAgICAgICB1LmpzQ2Vs
bC5jbGVhcigpOwogICAgICAgICB1Lm9wZXJhbmQgPSBvcGVyYW5kOwogICAgIH0KKyAgICBJbnN0
cnVjdGlvbih1bnNpZ25lZCB1bnNpZ25lZFZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gV2UgaGF2
ZSB0byBpbml0aWFsaXplIG9uZSBvZiB0aGUgcG9pbnRlciBtZW1iZXJzIHRvIGVuc3VyZSB0aGF0
CisgICAgICAgIC8vIHRoZSBlbnRpcmUgc3RydWN0IGlzIGluaXRpYWxpemVkIGluIDY0LWJpdC4K
KyAgICAgICAgdS5qc0NlbGwuY2xlYXIoKTsKKyAgICAgICAgdS51bnNpZ25lZFZhbHVlID0gdW5z
aWduZWRWYWx1ZTsKKyAgICB9CiAKICAgICBJbnN0cnVjdGlvbihQdXRCeUlkRmxhZ3MgZmxhZ3Mp
CiAgICAgewpAQCAtMTEyLDYgKzExOSw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgdW5p
b24gewogICAgICAgICBPcGNvZGUgb3Bjb2RlOwogICAgICAgICBpbnQgb3BlcmFuZDsKKyAgICAg
ICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1
Y3R1cmU+IHN0cnVjdHVyZTsKICAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQ7CiAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3ltYm9sVGFibGU+IHN5bWJvbFRhYmxlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2
ICs3MCw5IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgKICAgICBp
ZiAobV9uZWVkVG9Jbml0aWFsaXplQXJndW1lbnRzKQogICAgICAgICBpbml0aWFsaXplVmFyaWFi
bGUodmFyaWFibGUocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyksIG1fYXJndW1lbnRzUmVnaXN0
ZXIpOwogCisgICAgaWYgKG1fcmVzdFBhcmFtZXRlcikKKyAgICAgICAgbV9yZXN0UGFyYW1ldGVy
LT5lbWl0KCp0aGlzKTsKKwogICAgIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAg
PSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGdsb2JhbFNjb3Bl
OwpAQCAtMjcyLDggKzI3NSwxNCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgLy8gbmVlZGluZyBkZXN0cnVjdHVyaW5nIGFyZSBub3RlZC4KICAgICBtX3Bh
cmFtZXRlcnMuZ3JvdyhwYXJhbWV0ZXJzLnNpemUoKSArIDEpOyAvLyByZXNlcnZlIHNwYWNlIGZv
ciAidGhpcyIKICAgICBtX3RoaXNSZWdpc3Rlci5zZXRJbmRleChpbml0aWFsaXplTmV4dFBhcmFt
ZXRlcigpLT5pbmRleCgpKTsgLy8gdGhpcwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
YXJhbWV0ZXJzLnNpemUoKTsgKytpKQotICAgICAgICBpbml0aWFsaXplTmV4dFBhcmFtZXRlcigp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGF1dG8gcGF0dGVybiA9IHBhcmFtZXRlcnMuYXQoaSkuZmlyc3Q7CisgICAgICAg
IGlmIChwYXR0ZXJuLT5pc1Jlc3RQYXJhbWV0ZXIoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fcmVzdFBhcmFtZXRlcik7CisgICAgICAgICAgICBtX3Jlc3RQYXJhbWV0ZXIgPSBz
dGF0aWNfY2FzdDxSZXN0UGFyYW1ldGVyTm9kZSo+KHBhdHRlcm4pOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCk7CisgICAgfQogICAgIAogICAg
IC8vIEZpZ3VyZSBvdXQgc29tZSBpbnRlcmVzdGluZyBmYWN0cyBhYm91dCBvdXIgYXJndW1lbnRz
LgogICAgIGJvb2wgY2FwdHVyZXNBbnlBcmd1bWVudEJ5TmFtZSA9IGZhbHNlOwpAQCAtMzA3LDcg
KzMxNiwxNCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAg
ICAgIG1fYXJndW1lbnRzUmVnaXN0ZXItPnJlZigpOwogICAgIH0KICAgICAKLSAgICBpZiAobmVl
ZHNBcmd1bWVudHMgJiYgIWNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkgJiYgIXBhcmFtZXRlcnMu
aGFzRGVmYXVsdFBhcmFtZXRlclZhbHVlcygpKSB7CisgICAgLy8gaHR0cDovL3d3dy5lY21hLWlu
dGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC9pbmRleC5odG1sI3NlYy1mdW5jdGlvbmRlY2xh
cmF0aW9uaW5zdGFudGlhdGlvbgorICAgIC8vIFRoaXMgaW1wbGVtZW50cyBJc1NpbXBsZVBhcmFt
ZXRlckxpc3QgaW4gdGhlIEVjbWEgMjAxNSBzcGVjLgorICAgIC8vIElmIElzU2ltcGxlUGFyYW1l
dGVyTGlzdCBpcyBmYWxzZSwgd2Ugd2lsbCBjcmVhdGUgYSBzdHJpY3QtbW9kZSBsaWtlIGFyZ3Vt
ZW50cyBvYmplY3QuCisgICAgLy8gSXNTaW1wbGVQYXJhbWV0ZXJMaXN0IGlzIGZhbHNlIGlmIHRo
ZSBhcmd1bWVudCBsaXN0IGNvbnRhaW5zIGFueSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMsCisg
ICAgLy8gYSByZXN0IHBhcmFtZXRlciwgb3IgYW55IGRlc3RydWN0dXJpbmcgcGF0dGVybnMuCisg
ICAgLy8gRklYTUU6IFRha2UgaW50byBhY2NvdW50IGRlc3RydWN0dXJpbmcgdG8gbWFrZSBpc1Np
bXBsZVBhcmFtZXRlckxpc3QgZmFsc2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTE0NTAKKyAgICBib29sIGlzU2ltcGxlUGFyYW1ldGVyTGlzdCA9ICFwYXJhbWV0
ZXJzLmhhc0RlZmF1bHRQYXJhbWV0ZXJWYWx1ZXMoKSAmJiAhbV9yZXN0UGFyYW1ldGVyOworICAg
IGlmIChuZWVkc0FyZ3VtZW50cyAmJiAhY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSAmJiBpc1Np
bXBsZVBhcmFtZXRlckxpc3QpIHsKICAgICAgICAgLy8gSWYgd2UgY2FwdHVyZWQgYW55IGZvcm1h
bCBwYXJhbWV0ZXIgYnkgbmFtZSwgdGhlbiB3ZSB1c2UgU2NvcGVkQXJndW1lbnRzLiBPdGhlcndp
c2Ugd2UKICAgICAgICAgLy8gdXNlIERpcmVjdEFyZ3VtZW50cy4gV2l0aCBTY29wZWRBcmd1bWVu
dHMsIHdlIGxpZnQgYWxsIG9mIG91ciBhcmd1bWVudHMgaW50byB0aGUKICAgICAgICAgLy8gYWN0
aXZhdGlvbi4KQEAgLTM4OSw3ICs0MDUsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoVk0mCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5lZWRzQXJndW1l
bnRzICYmIChjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpIHx8IHBhcmFtZXRlcnMuaGFzRGVmYXVs
dFBhcmFtZXRlclZhbHVlcygpKSkgeworICAgIGlmIChuZWVkc0FyZ3VtZW50cyAmJiAoY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSB8fCAhaXNTaW1wbGVQYXJhbWV0ZXJMaXN0KSkgewogICAgICAg
ICAvLyBBbGxvY2F0ZSBhbiBvdXQtb2YtYmFuZHMgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICAg
ZW1pdE9wY29kZShvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYXJndW1lbnRzUmVnaXN0ZXItPmluZGV4KCkpOwpAQCAtNzA3
LDYgKzcyMyw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWwKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXAgPSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgICAgIHN0ZDo6cGFpcjxEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqLCBFeHByZXNzaW9uTm9k
ZSo+IHBhcmFtZXRlciA9IHBhcmFtZXRlcnMuYXQoaSk7CisgICAgICAgICAgICBpZiAocGFyYW1l
dGVyLmZpcnN0LT5pc1Jlc3RQYXJhbWV0ZXIoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwYXJhbWV0ZXJWYWx1ZSA9ICZyZWdpc3Rl
ckZvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxICsgaSkpOwogICAgICAgICAgICAgZW1p
dE1vdmUodGVtcC5nZXQoKSwgcGFyYW1ldGVyVmFsdWUuZ2V0KCkpOwogICAgICAgICAgICAgaWYg
KHBhcmFtZXRlci5zZWNvbmQpIHsKQEAgLTc2NCw3ICs3ODIsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjppbml0aWFsaXplRGVmYXVsCiAgICAgICAgIC8vIElmIHdlIGhhdmUgZGVmYXVsdCBw
YXJhbWV0ZXIgdmFsdWVzLCB3ZSBoYW5kbGUgdGhpcyBjYXNlIGFib3ZlLgogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7IGkrKykgewogICAgICAgICAg
ICAgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBwYXR0ZXJuID0gcGFyYW1ldGVycy5hdChpKS5m
aXJzdDsKLSAgICAgICAgICAgIGlmICghcGF0dGVybi0+aXNCaW5kaW5nTm9kZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIXBhdHRlcm4tPmlzQmluZGluZ05vZGUoKSAmJiAhcGF0dGVybi0+aXNSZXN0
UGFyYW1ldGVyKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcGFyYW1l
dGVyVmFsdWUgPSAmcmVnaXN0ZXJGb3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSArIGkp
KTsKICAgICAgICAgICAgICAgICBwYXR0ZXJuLT5iaW5kVmFsdWUoKnRoaXMsIHBhcmFtZXRlclZh
bHVlLmdldCgpKTsKICAgICAgICAgICAgIH0KQEAgLTM4MTMsNCArMzgzMSwxNSBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5DCiAgICAgfQogfQogCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc3RQYXJhbWV0ZXIoUmVnaXN0ZXJJRCogcmVzdWx0
LCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwKQoreworICAgIGVtaXROZXdBcnJheShyZXN1
bHQsIG51bGxwdHIsIDApOworCisgICAgZW1pdE9wY29kZShvcF9jb3B5X3Jlc3QpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChyZXN1bHQtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChudW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTkyNjUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OTgsNiArNTk4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBpdGVyYXRvciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpOwogICAg
ICAgICB2b2lkIGVtaXRJdGVyYXRvckNsb3NlKFJlZ2lzdGVySUQqIGl0ZXJhdG9yLCBjb25zdCBU
aHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dFJlc3RQYXJhbWV0ZXIoUmVnaXN0ZXJJRCogcmVzdWx0LCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJz
VG9Ta2lwKTsKKwogICAgICAgICBib29sIGVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKGNv
bnN0IFZhcmlhYmxlJik7CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcg
bXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KQEAgLTgyOCw2ICs4MzAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgZW51bSBGdW5jdGlvblZhcmlhYmxlVHlwZSA6IHVpbnQ4X3QgeyBOb3JtYWxG
dW5jdGlvblZhcmlhYmxlLCBHbG9iYWxGdW5jdGlvblZhcmlhYmxlIH07CiAgICAgICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8RnVuY3Rpb25NZXRhZGF0YU5vZGUqLCBGdW5jdGlvblZhcmlhYmxlVHlwZT4+
IG1fZnVuY3Rpb25zVG9Jbml0aWFsaXplOwogICAgICAgICBib29sIG1fbmVlZFRvSW5pdGlhbGl6
ZUFyZ3VtZW50cyB7IGZhbHNlIH07CisgICAgICAgIFJlc3RQYXJhbWV0ZXJOb2RlKiBtX3Jlc3RQ
YXJhbWV0ZXIgeyBudWxscHRyIH07CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VHJ5UmFuZ2U+
IG1fdHJ5UmFuZ2VzOwogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VHJ5RGF0YSwgOD4gbV90cnlE
YXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzk4
LDYgKzMzOTgsMzUgQEAgdm9pZCBCaW5kaW5nTm9kZTo6Y29sbGVjdEJvdW5kSWRlbnRpZmllcgog
ICAgIGlkZW50aWZpZXJzLmFwcGVuZChtX2JvdW5kUHJvcGVydHkpOwogfQogICAgIAordm9pZCBS
ZXN0UGFyYW1ldGVyTm9kZTo6Y29sbGVjdEJvdW5kSWRlbnRpZmllcnMoVmVjdG9yPElkZW50aWZp
ZXI+JiBpZGVudGlmaWVycykgY29uc3QKK3sKKyAgICBpZGVudGlmaWVycy5hcHBlbmQobV9uYW1l
KTsKK30KK3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OnRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIpIGNvbnN0Cit7CisgICAgYnVpbGRlci5hcHBlbmQobV9uYW1lLnN0cmluZygpKTsKK30K
K3ZvaWQgUmVzdFBhcmFtZXRlck5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
Cit2b2lkIFJlc3RQYXJhbWV0ZXJOb2RlOjplbWl0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IpCit7CisgICAgVmFyaWFibGUgdmFyID0gZ2VuZXJhdG9yLnZhcmlhYmxlKG1fbmFtZSk7Cisg
ICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gdmFyLmxvY2FsKCkpIHsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRSZXN0UGFyYW1ldGVyKGxvY2FsLCBtX251bVBhcmFtZXRlcnNUb1NraXApOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKGxvY2FsLCB2YXIsIG1fZGl2b3RTdGFydCwg
bV9kaXZvdEVuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVzdFBhcmFtZXRlckFycmF5ID0gZ2VuZXJhdG9yLmVtaXRSZXN0UGFyYW1ldGVyKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgbV9udW1QYXJhbWV0ZXJzVG9Ta2lwKTsKKyAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJlc3RQYXJhbWV0ZXJBcnJheS5nZXQoKSwgdmFyLCBtX2Rp
dm90U3RhcnQsIG1fZGl2b3RFbmQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdl
bmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKG51bGxwdHIsIHZhcik7CisgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90RW5kLCBtX2Rpdm90U3RhcnQsIG1fZGl2b3RFbmQpOwor
ICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZShzY29wZS5nZXQoKSwgdmFyLCByZXN0UGFyYW1l
dGVyQXJyYXkuZ2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3Vu
ZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbik7Cit9CisKKwogUmVnaXN0
ZXJJRCogU3ByZWFkRXhwcmVzc2lvbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqKQogewogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTI2NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MDgsNiArMjUwOCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICBjYXNlIENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgICAgIGJyZWFrOwog
CisgICAgY2FzZSBDb3B5UmVzdDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICBj
YXNlIENoZWNrOiB7CiAgICAgICAgIC8vIFNpbXBsaWZ5IG91dCBjaGVja3MgdGhhdCBkb24ndCBh
Y3R1YWxseSBkbyBjaGVja2luZy4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFk
amFjZW5jeUxpc3Q6OlNpemU7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzMwLDYgKzMzMzAsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3
X3JlZ2V4cCk7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2NvcHlfcmVzdDogeworICAg
ICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKENv
cHlSZXN0LAorICAgICAgICAgICAgICAgIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS51
bnNpZ25lZFZhbHVlKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29weV9yZXN0KTsKKyAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIC8vID09PSBCaXR3aXNlIG9wZXJhdGlvbnMg
PT09CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDYgKzIxOSw3IEBAIENhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50OgogICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKICAgICBj
YXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfY29weV9yZXN0OgogICAgICAgICByZXR1cm4gQ2Fu
Q29tcGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTkyNjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk4Myw2ICs5ODMsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2FzZSBDb3B5UmVzdDog
eworICAgICAgICByZWFkKFN0YWNrKTsKKyAgICAgICAgd3JpdGUoSGVhcCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld1JlZ2V4cDoK
ICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw3IEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldFN0YWNrOgog
ICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKICAgICBjYXNlIFB1dFRvQXJndW1lbnRzOgorICAg
IGNhc2UgQ29weVJlc3Q6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3JlYXRl
QWN0aXZhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2OCw2ICsxMzY4LDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgQ29w
eVJlc3Q6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQg
bm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxOTI2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjE1OCw3ICsyMTU4LDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICB7
CiAgICAgICAgIG1fbWlzYy5lcG9jaCA9IGVwb2NoLnRvVW5zaWduZWQoKTsKICAgICB9Ci0gICAg
CisKKyAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpCisgICAgeworICAgICAg
ICBBU1NFUlQob3AoKSA9PSBDb3B5UmVzdCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9vcEluZm8pOworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTkyNjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjIsNiArMjYyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KE5ld0FycmF5QnVmZmVyLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhOZXdUeXBlZEFycmF5
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhw
LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhDb3B5UmVzdCwgTm9kZU11c3RHZW5lcmF0ZSkg
XAogICAgIFwKICAgICAvKiBTdXBwb3J0IGZvciBhbGxvY2F0aW9uIHNpbmtpbmcuICovXAogICAg
IG1hY3JvKFBoYW50b21OZXdPYmplY3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE4LDYgKzgxOCwxNiBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvcHlSZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBhcnJheUFzQ2VsbCwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQsIHVuc2lnbmVkIG51bWJlck9m
UGFyYW1zVG9Ta2lwLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cykKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChudW1iZXJPZkFyZ3VtZW50cyA+IG51bWJlck9mUGFyYW1zVG9Ta2lwKTsgLy8gV2Ug
c2hvdWxkIG9ubHkgY2FsbCB0aGlzIGZyb20gSklUIGNvZGUgd2hlbiB0aGlzIGNvbmRpdGlvbiBp
cyB0cnVlLgorICAgIEpTQXJyYXkqIGFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihhcnJheUFzQ2Vs
bCk7CisgICAgdW5zaWduZWQgYXJyYXlTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMgLSBudW1iZXJP
ZlBhcmFtc1RvU2tpcDsKKyAgICBhcnJheS0+c2V0TGVuZ3RoKGV4ZWMsIGFycmF5U2l6ZSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKQorICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgYXJndW1lbnRTdGFydFtpICsgbnVtYmVyT2ZQYXJh
bXNUb1NraXBdLmpzVmFsdWUoKSk7Cit9CisKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk9iamVjdElzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxOTI2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVEaXIKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVTY29wZWRB
cmd1bWVudHMoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3VtZW50U3RhcnQs
IGludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIEpTTGV4aWNhbEVudmlyb25tZW50
Kik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
RHVyaW5nRXhpdChFeGVjU3RhdGUqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0Z1bmN0aW9uKiwgaW50
MzJfdCBhcmd1bWVudENvdW50KTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVDbG9uZWRBcmd1bWVudHMoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgUmVnaXN0ZXIqIGFyZ3Vt
ZW50U3RhcnQsIGludDMyX3QgbGVuZ3RoLCBKU0Z1bmN0aW9uKiBjYWxsZWUpOwordm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvcHlSZXN0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVy
KiBhcmd1bWVudFN0YXJ0LCB1bnNpZ25lZCBudW1iZXJPZlBhcmFtc1RvU2tpcCwgdW5zaWduZWQg
YXJndW1lbnRzQ291bnQpOwogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50
cyhpbnQzMl90LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25PYmplY3RJc09iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTQ2Vs
bCopIFdURl9JTlRFUk5BTDsKIHNpemVfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9iamVjdElz
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSBXVEZfSU5URVJO
QUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkyNjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3Niw2ICs2NzYsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJh
cmdzOgorICAgICAgICBjYXNlIENvcHlSZXN0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBvbmx5IHByZXRl
bmRzIHRvIHByb2R1Y2UgYSB2YWx1ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxOTI2NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDYg
KzMyMiw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBj
YXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
CiAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENvcHlSZXN0OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQm90dG9tVmFsdWU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MzgsNiArNDQzOCwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAorICAgIGNhc2UgQ29weVJlc3Q6IHsKKyAgICAgICAgY29tcGlsZUNvcHlSZXN0KG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2Ug
TmV3QXJyb3dGdW5jdGlvbjoKICAgICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uKG5vZGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxOTI2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDI3LDYgKzQ0MjcsMTAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxl
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAg
Y2FzZSBDb3B5UmVzdDogeworICAgICAgICBjb21waWxlQ29weVJlc3Qobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdBcnJv
d0Z1bmN0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzQ0LDYgKzUz
NDQsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNsb25lZAogICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNvcHlSZXN0KE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29w
eVJlc3QpOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJyYXkodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgIEdQUlJlZyBhcnJheUdQUiA9IGFycmF5LmdwcigpOworCisgICAgR1BSVGVt
cG9yYXJ5IGFyZ3VtZW50c0xlbmd0aCh0aGlzKTsKKyAgICBHUFJSZWcgYXJndW1lbnRzTGVuZ3Ro
R1BSID0gYXJndW1lbnRzTGVuZ3RoLmdwcigpOworCisgICAgR1BSVGVtcG9yYXJ5IGFyZ3VtZW50
c1N0YXJ0KHRoaXMpOworICAgIEdQUlJlZyBhcmd1bWVudHNTdGFydEdQUiA9IGFyZ3VtZW50c1N0
YXJ0LmdwcigpOworCisgICAgZW1pdEdldExlbmd0aChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGFy
Z3VtZW50c0xlbmd0aEdQUik7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsLCBhcmd1bWVudHNMZW5ndGhH
UFIsIFRydXN0ZWRJbW0zMihub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKSk7CisKKyAg
ICBlbWl0R2V0QXJndW1lbnRTdGFydChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGFyZ3VtZW50c1N0
YXJ0R1BSKTsKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhhcmd1bWVudHNMZW5ndGhHUFIs
IGFyZ3VtZW50c1N0YXJ0R1BSKTsKKyAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwq
IGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAs
IDQ6bnVtYmVyIG9mIGFyZ3VtZW50cyBvciBzaXplX3QgbWF4LgorICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29weVJlc3QsIGFycmF5R1BSLCBhcmd1bWVudHNTdGFydEdQUiwgVHJ1c3RlZElt
bTMyKG5vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCkpLCBhcmd1bWVudHNMZW5ndGhHUFIp
OworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoYXJndW1lbnRzTGVuZ3RoR1BSKTsKKyAgICBt
X2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBu
b1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdy
aXRlKE5vZGUqIG5vZGUpCiB7CiAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+d2F0Y2hw
b2ludFNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIxLDYgKzEyMjEsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0K
IAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNS
VWlVaSBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFy
ZzMsIEdQUlJlZyBhcmc0KQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbChvcGVyYXRpb24pOworICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCkKICAgICB7CkBAIC0yMjM4LDYgKzIyNDQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNj
b3BlZEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1l
bnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVDb3B5UmVzdChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlTm90aWZ5V3JpdGUoTm9kZSopOwogICAgIGJvb2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKE5vZGUqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5
MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEwLDYgKzIxMCw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFB1dEdldHRlclNldHRlckJ5SWQ6CiAgICAgY2Fz
ZSBQdXRHZXR0ZXJCeVZhbDoKICAgICBjYXNlIFB1dFNldHRlckJ5VmFsOgorICAgIGNhc2UgQ29w
eVJlc3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9y
eS5oCShyZXZpc2lvbiAxOTI2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9F
R0MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBt
YWNybyhaX0pJVE9wZXJhdGlvbl9FSlosIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnQ2
NCwgaW50MzIpKSBcCiAgICAgbWFjcm8oWl9KSVRPcGVyYXRpb25fRVNKc3MsIGZ1bmN0aW9uVHlw
ZShpbnQzMiwgaW50UHRyLCBpbnRQdHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0
aW9uX0VDUlVpVWksIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludFB0
ciwgaW50MzIsIGludDMyKSkKICAgICAKIGNsYXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJs
aWMgQ29tbW9uVmFsdWVzIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTI2NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTY3LDYgKzk2Nyw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRv
Z1RpbWVyOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcigpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29weVJlc3Q6CisgICAgICAgICAgICBjb21waWxl
Q29weVJlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICBjYXNlIExvb3BIaW50OgpAQCAtMzYxNSw2ICszNjE4LDI4IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQorCisgICAg
dm9pZCBjb21waWxlQ29weVJlc3QoKQorICAgIHsgICAgICAgICAgICAKKyAgICAgICAgTEJhc2lj
QmxvY2sgZG9Db3B5UmVzdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29weVJlc3QgQyBjYWxs
IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkZpbGxSZXN0UGFyYW1ldGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBMVmFs
dWUgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVt
YmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50
cyA9IGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIG1fb3V0LmFib3ZlKG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkFyZ3Vt
ZW50c1RvU2tpcCksCisgICAgICAgICAgICB1bnN1cmUoZG9Db3B5UmVzdCksIHVuc3VyZShjb250
aW51YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGRvQ29weVJlc3QsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIC8vIEFy
Z3VtZW50czogMDpleGVjLCAxOkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51
bWJlciBvZiBhcmd1bWVudHMgdG8gc2tpcCwgNDpudW1iZXIgb2YgYXJndW1lbnRzIG9yIHNpemVf
dCBtYXguCisgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25Db3B5UmVzdCksIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAsIG51bWJlck9mQXJndW1lbnRzKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE5MjY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYg
KzIxMSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVG
SU5FX09QKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Y3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF9jcmVhdGVfb3V0
X29mX2JhbmRfYXJndW1lbnRzKQorICAgICAgICBERUZJTkVfT1Aob3BfY29weV9yZXN0KQogICAg
ICAgICBERUZJTkVfT1Aob3BfY2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfT1Aob3BfYXNzZXJ0
KQogICAgICAgICBERUZJTkVfT1Aob3BfZGVidWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5MCw2ICs0OTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyhJbnN0
cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfY29weV9yZXN0KEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jaGVja190ZHooSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2Fzc2VydChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
ZGVidWcoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5OSw2ICsxMzk5LDEyIEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmcKICAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9jb3B5X3Jlc3QoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2NvcHlfcmVzdCk7CisgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIHR5cGVkZWYgY2hhciogVW51
c2VkUHRyOwogICAgIFZtOiBWTSoKICAgICBXczogV2F0Y2hwb2ludFNldCoKICAgICBaOiBpbnQz
Ml90CisgICAgVWk6IHVpbnQzMl90CiAqLwogCiB0eXBlZGVmIENhbGxGcmFtZSogSklUX09QRVJB
VElPTiAoKkZfSklUT3BlcmF0aW9uX0VGSlpaKShFeGVjU3RhdGUqLCBDYWxsRnJhbWUqLCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCk7CkBAIC0yMTksNiArMjIwLDcgQEAgdHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7CiB0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7Cit0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDUlVpVWkpKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIFJlZ2lzdGVyKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIHR5cGVkZWYg
Y2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0UpKEV4ZWNTdGF0ZSopOwogdHlw
ZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSos
IEpTQ2VsbCopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25f
RUNsaSkoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAx
OTI2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE2NzUsNiArMTY3NSwxMiBAQCBfbGxpbnRfb3BfdG9f
aW5kZXhfc3RyaW5nOgogICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3RvX2luZGV4X3N0cmlu
ZykKICAgICBkaXNwYXRjaCgzKQogCitfbGxpbnRfb3BfY29weV9yZXN0OgorICAgIHRyYWNlRXhl
Y3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jb3B5X3Jlc3QpCisgICAgZGlz
cGF0Y2goMykKKworCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0
aG91Z2ggd2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91
bGQgbmV2ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQK
ICMgYXMgbXVjaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCShyZXZpc2lvbiAxOTI2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODM2LDYgKzgzNiwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJpbmRpbmdOb2RlKGJvdW5kUHJvcGVy
dHksIHN0YXJ0LCBlbmQsIGNvbnRleHQpOwogICAgIH0KIAorICAgIFJlc3RQYXJhbWV0ZXJOb2Rl
KiBjcmVhdGVSZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIHNpemVfdCBudW1Q
YXJhbWV0ZXJzVG9Ta2lwLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5h
KSBSZXN0UGFyYW1ldGVyTm9kZShuYW1lLCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBzdGFydCwgZW5k
KTsKKyAgICB9CisKICAgICB2b2lkIHNldEVuZE9mZnNldChOb2RlKiBub2RlLCBpbnQgb2Zmc2V0
KQogICAgIHsKICAgICAgICAgbm9kZS0+c2V0RW5kT2Zmc2V0KG9mZnNldCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNp
b24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0
b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsNiArMTAyMSwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICB7CiAgICAgfQogICAgIAorICAgIGlubGluZSBSZXN0UGFyYW1ldGVyTm9kZTo6UmVz
dFBhcmFtZXRlck5vZGUoY29uc3QgSWRlbnRpZmllciYgbmFtZSwgdW5zaWduZWQgbnVtUGFyYW1l
dGVyc1RvU2tpcCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZW5kKQorICAgICAgICA6IERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSgpCisgICAgICAg
ICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV9udW1QYXJhbWV0ZXJzVG9Ta2lwKG51bVBhcmFt
ZXRlcnNUb1NraXApCisgICAgICAgICwgbV9kaXZvdFN0YXJ0KHN0YXJ0KQorICAgICAgICAsIG1f
ZGl2b3RFbmQoZW5kKQorICAgIHsKKyAgICB9CisKICAgICBpbmxpbmUgRGVzdHJ1Y3R1cmluZ0Fz
c2lnbm1lbnROb2RlOjpEZXN0cnVjdHVyaW5nQXNzaWdubWVudE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRGVzdHJ1Y3R1cmluZ1BhdHRlcm5Ob2RlKiBiaW5kaW5ncywgRXhw
cmVzc2lvbk5vZGUqIGluaXRpYWxpemVyKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0
aW9uKQogICAgICAgICAsIG1fYmluZGluZ3MoYmluZGluZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAxOTI2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NjgsNiArMTk2OCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIHZvaWQgdG9TdHJpbmcoU3RyaW5nQnVp
bGRlciYpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCaW5kaW5nTm9kZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Jlc3RQYXJh
bWV0ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXREaXJlY3RCaW5kaW5nKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCosIEV4
cHJlc3Npb25Ob2RlKikgeyByZXR1cm4gMDsgfQogICAgICAgICAKICAgICBwcm90ZWN0ZWQ6CkBA
IC0yMDQ4LDYgKzIwNDksMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFzc2lnbm1lbnRD
b250ZXh0IG1fYmluZGluZ0NvbnRleHQ7CiAgICAgfTsKIAorICAgIGNsYXNzIFJlc3RQYXJhbWV0
ZXJOb2RlIDogcHVibGljIERlc3RydWN0dXJpbmdQYXR0ZXJuTm9kZSB7CisgICAgcHVibGljOgor
ICAgICAgICBSZXN0UGFyYW1ldGVyTm9kZShjb25zdCBJZGVudGlmaWVyJiBib3VuZFByb3BlcnR5
LCB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzVG9Ta2lwLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmQpOworCisgICAgICAgIGJvb2wgaXNSZXN0UGFy
YW1ldGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHZvaWQg
ZW1pdChCeXRlY29kZUdlbmVyYXRvciYpOworCisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZp
cnR1YWwgdm9pZCBjb2xsZWN0Qm91bmRJZGVudGlmaWVycyhWZWN0b3I8SWRlbnRpZmllcj4mKSBj
b25zdCBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGJpbmRWYWx1ZShCeXRlY29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHRvU3RyaW5nKFN0cmluZ0J1aWxkZXImKSBjb25zdCBvdmVycmlkZTsKKworICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBtX25hbWU7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtUGFyYW1ldGVy
c1RvU2tpcDsKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdFN0YXJ0OyAvLyAiZiIgaW4g
Ii4uLmZvbyIKKyAgICAgICAgSlNUZXh0UG9zaXRpb24gbV9kaXZvdEVuZDsKKyAgICB9OworCiAg
ICAgY2xhc3MgRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnROb2RlIDogcHVibGljIEV4cHJlc3Npb25O
b2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIERlc3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mLCBEZXN0cnVjdHVyaW5nUGF0dGVybk5vZGUqLCBFeHByZXNz
aW9uTm9kZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAko
cmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDMwIEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3MKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlw
ZT4KK2Jvb2wgUGFyc2VyPExleGVyVHlwZT46OmRlY2xhcmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIo
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgSWRlbnRpZmllcioqIGR1cGxpY2F0ZUlkZW50
aWZpZXIpCit7CisgICAgRGVjbGFyYXRpb25SZXN1bHRNYXNrIGRlY2xhcmF0aW9uUmVzdWx0ID0g
ZGVjbGFyZVBhcmFtZXRlcigmbmFtZSk7CisgICAgaWYgKChkZWNsYXJhdGlvblJlc3VsdCAmIERl
Y2xhcmF0aW9uUmVzdWx0OjpJbnZhbGlkU3RyaWN0TW9kZSkgJiYgc3RyaWN0TW9kZSgpKSB7Cisg
ICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShpc0V2YWxPckFyZ3VtZW50cygmbmFtZSksICJDYW5u
b3QgZGVzdHJ1Y3R1cmUgdG8gYSBwYXJhbWV0ZXIgbmFtZSAnIiwgbmFtZS5pbXBsKCksICInIGlu
IHN0cmljdCBtb2RlIik7CisgICAgICAgIGlmIChtX2xhc3RGdW5jdGlvbk5hbWUgJiYgbmFtZSA9
PSAqbV9sYXN0RnVuY3Rpb25OYW1lKQorICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3Qg
ZGVjbGFyZSBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGFzIGl0IHNoYWRv
d3MgdGhlIG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbiIpOworICAgICAgICBzZW1hbnRp
Y0ZhaWx1cmVEdWVUb0tleXdvcmQoInBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIGlmIChoYXNE
ZWNsYXJlZFBhcmFtZXRlcihuYW1lKSkKKyAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90
IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3Qg
bW9kZSBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIik7CisgICAgICAgIHNlbWFudGlj
RmFpbCgiQ2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAi
JyBpbiBzdHJpY3QgbW9kZSIpOworICAgIH0KKyAgICBpZiAoZGVjbGFyYXRpb25SZXN1bHQgJiBE
ZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZER1cGxpY2F0ZURlY2xhcmF0aW9uKSB7CisgICAgICAg
IC8vIEl0J3Mgbm90IGFsd2F5cyBhbiBlcnJvciB0byBkZWZpbmUgYSBkdXBsaWNhdGUgcGFyYW1l
dGVyLgorICAgICAgICAvLyBJdCdzIG9ubHkgYW4gZXJyb3Igd2hlbiB0aGVyZSBhcmUgZGVmYXVs
dCBwYXJhbWV0ZXIgdmFsdWVzIG9yIGRlc3RydWN0dXJpbmcgcGFyYW1ldGVycy4KKyAgICAgICAg
Ly8gV2Ugbm90ZSB0aGlzIHZhbHVlIG5vdyBzbyB3ZSBjYW4gY2hlY2sgaXQgbGF0ZXIuCisgICAg
ICAgIGlmIChkdXBsaWNhdGVJZGVudGlmaWVyKQorICAgICAgICAgICAgKmR1cGxpY2F0ZUlkZW50
aWZpZXIgPSAmbmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZURl
c3RydWN0dXJpbmdQYXR0ZXJuIFBhcnNlcjxMZXhlclR5cGU+OjpjcmVhdGVCaW5kaW5nUGF0dGVy
bihUcmVlQnVpbGRlciYgY29udGV4dCwgRGVzdHJ1Y3R1cmluZ0tpbmQga2luZCwgRXhwb3J0VHlw
ZSBleHBvcnRUeXBlLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBKU1Rva2VuIHRva2VuLCBBc3Np
Z25tZW50Q29udGV4dCBiaW5kaW5nQ29udGV4dCwgY29uc3QgSWRlbnRpZmllcioqIGR1cGxpY2F0
ZUlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKCFuYW1lLmlzTnVsbCgpKTsKQEAgLTY4NSwyMyAr
NzA5LDggQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRGVzdHJ1YwogICAgICAg
ICAgICAgZmFpbElmVHJ1ZShkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJ
bnZhbGlkRHVwbGljYXRlRGVjbGFyYXRpb24sICJDYW5ub3QgZGVjbGFyZSBhIGxleGljYWwgdmFy
aWFibGUgdHdpY2U6ICciLCBuYW1lLmltcGwoKSwgIiciKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSBpZiAoa2luZCA9PSBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycykgewotICAgICAgICBEZWNsYXJh
dGlvblJlc3VsdE1hc2sgZGVjbGFyYXRpb25SZXN1bHQgPSBkZWNsYXJlUGFyYW1ldGVyKCZuYW1l
KTsKLSAgICAgICAgaWYgKChkZWNsYXJhdGlvblJlc3VsdCAmIERlY2xhcmF0aW9uUmVzdWx0OjpJ
bnZhbGlkU3RyaWN0TW9kZSkgJiYgc3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBzZW1hbnRp
Y0ZhaWxJZlRydWUoaXNFdmFsT3JBcmd1bWVudHMoJm5hbWUpLCAiQ2Fubm90IGRlc3RydWN0dXJl
IHRvIGEgcGFyYW1ldGVyIG5hbWUgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBzdHJpY3QgbW9kZSIp
OwotICAgICAgICAgICAgaWYgKG1fbGFzdEZ1bmN0aW9uTmFtZSAmJiBuYW1lID09ICptX2xhc3RG
dW5jdGlvbk5hbWUpCi0gICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFy
ZSBhIHBhcmFtZXRlciBuYW1lZCAnIiwgbmFtZS5pbXBsKCksICInIGFzIGl0IHNoYWRvd3MgdGhl
IG5hbWUgb2YgYSBzdHJpY3QgbW9kZSBmdW5jdGlvbiIpOwotICAgICAgICAgICAgc2VtYW50aWNG
YWlsdXJlRHVlVG9LZXl3b3JkKCJwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICAgICAgaWYgKGhh
c0RlY2xhcmVkUGFyYW1ldGVyKG5hbWUpKQotICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgi
Q2Fubm90IGRlY2xhcmUgYSBwYXJhbWV0ZXIgbmFtZWQgJyIsIG5hbWUuaW1wbCgpLCAiJyBpbiBz
dHJpY3QgbW9kZSBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIik7Ci0gICAgICAgICAg
ICBzZW1hbnRpY0ZhaWwoIkNhbm5vdCBkZWNsYXJlIGEgcGFyYW1ldGVyIG5hbWVkICciLCBuYW1l
LmltcGwoKSwgIicgaW4gc3RyaWN0IG1vZGUiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGVj
bGFyYXRpb25SZXN1bHQgJiBEZWNsYXJhdGlvblJlc3VsdDo6SW52YWxpZER1cGxpY2F0ZURlY2xh
cmF0aW9uKSB7Ci0gICAgICAgICAgICAvLyBJdCdzIG5vdCBhbHdheXMgYW4gZXJyb3IgdG8gZGVm
aW5lIGEgZHVwbGljYXRlIHBhcmFtZXRlci4KLSAgICAgICAgICAgIC8vIEl0J3Mgb25seSBhbiBl
cnJvciB3aGVuIHRoZXJlIGFyZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgb3IgZGVzdHJ1Y3R1
cmluZyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgLy8gV2Ugbm90ZSB0aGlzIHZhbHVlIG5vdyBz
byB3ZSBjYW4gY2hlY2sgaXQgbGF0ZXIuCi0gICAgICAgICAgICBpZiAoZHVwbGljYXRlSWRlbnRp
ZmllcikKLSAgICAgICAgICAgICAgICAqZHVwbGljYXRlSWRlbnRpZmllciA9ICZuYW1lOwotICAg
ICAgICB9CisgICAgICAgIGRlY2xhcmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIobmFtZSwgZHVwbGlj
YXRlSWRlbnRpZmllcik7CisgICAgICAgIHByb3BhZ2F0ZUVycm9yKCk7CiAgICAgfQogCiAgICAg
aWYgKGV4cG9ydFR5cGUgPT0gRXhwb3J0VHlwZTo6RXhwb3J0ZWQpIHsKQEAgLTE1MDIsMzIgKzE1
MTEsNDUgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU3RhdGVtZQogdGVtcGxh
dGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9v
bCBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRyZWVCdWlsZGVyJiBj
b250ZXh0LCBUcmVlRm9ybWFsUGFyYW1ldGVyTGlzdCBsaXN0LCB1bnNpZ25lZCYgcGFyYW1ldGVy
Q291bnQpCiB7Ci0jZGVmaW5lIGZhaWxGcm9tRHVwbGljYXRlKCkgXAorI2RlZmluZSBmYWlsSWZE
dXBsaWNhdGVJZlZpb2xhdGlvbigpIFwKICAgICBpZiAoZHVwbGljYXRlUGFyYW1ldGVyKSB7XAog
ICAgICAgICBzZW1hbnRpY0ZhaWxJZlRydWUoZGVmYXVsdFZhbHVlLCAiRHVwbGljYXRlIHBhcmFt
ZXRlciAnIiwgZHVwbGljYXRlUGFyYW1ldGVyLT5pbXBsKCksICInIG5vdCBhbGxvd2VkIGluIGZ1
bmN0aW9uIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIik7XAogICAgICAgICBzZW1hbnRp
Y0ZhaWxJZlRydWUoaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4sICJEdXBsaWNhdGUgcGFyYW1ldGVy
ICciLCBkdXBsaWNhdGVQYXJhbWV0ZXItPmltcGwoKSwgIicgbm90IGFsbG93ZWQgaW4gZnVuY3Rp
b24gd2l0aCBkZXN0cnVjdHVyaW5nIHBhcmFtZXRlcnMiKTtcCisgICAgICAgIHNlbWFudGljRmFp
bElmVHJ1ZShpc1Jlc3RQYXJhbWV0ZXIsICJEdXBsaWNhdGUgcGFyYW1ldGVyICciLCBkdXBsaWNh
dGVQYXJhbWV0ZXItPmltcGwoKSwgIicgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gd2l0aCBhIHJl
c3QgcGFyYW1ldGVyIik7XAogICAgIH0KIAotICAgIGNvbnN0IElkZW50aWZpZXIqIGR1cGxpY2F0
ZVBhcmFtZXRlciA9IG51bGxwdHI7CiAgICAgYm9vbCBoYXNEZXN0cnVjdHVyaW5nUGF0dGVybiA9
IGZhbHNlOwotICAgIGF1dG8gcGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihj
b250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQs
ICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVjdHVyaW5nUGF0dGVybik7Ci0gICAgZmFp
bElmRmFsc2UocGFyYW1ldGVyLCAiQ2Fubm90IHBhcnNlIHBhcmFtZXRlciBwYXR0ZXJuIik7Ci0g
ICAgYXV0byBkZWZhdWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQ
YXR0ZXJuKGNvbnRleHQpOwotICAgIHByb3BhZ2F0ZUVycm9yKCk7Ci0gICAgZmFpbEZyb21EdXBs
aWNhdGUoKTsKLSAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJhbWV0ZXIsIGRl
ZmF1bHRWYWx1ZSk7Ci0gICAgcGFyYW1ldGVyQ291bnQrKzsKLSAgICB3aGlsZSAoY29uc3VtZShD
T01NQSkpIHsKLSAgICAgICAgcGFyYW1ldGVyID0gcGFyc2VEZXN0cnVjdHVyaW5nUGF0dGVybihj
b250ZXh0LCBEZXN0cnVjdHVyZVRvUGFyYW1ldGVycywgRXhwb3J0VHlwZTo6Tm90RXhwb3J0ZWQs
ICZkdXBsaWNhdGVQYXJhbWV0ZXIsICZoYXNEZXN0cnVjdHVyaW5nUGF0dGVybik7CisgICAgYm9v
bCBpc1Jlc3RQYXJhbWV0ZXIgPSBmYWxzZTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBkdXBsaWNh
dGVQYXJhbWV0ZXIgPSBudWxscHRyOworICAgIGRvIHsKKyAgICAgICAgVHJlZURlc3RydWN0dXJp
bmdQYXR0ZXJuIHBhcmFtZXRlciA9IDA7CisgICAgICAgIFRyZWVFeHByZXNzaW9uIGRlZmF1bHRW
YWx1ZSA9IDA7CisKKyAgICAgICAgaWYgKG1hdGNoKERPVERPVERPVCkpIHsKKyAgICAgICAgICAg
IG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZkZhbHNlKG1hdGNoU3BlY0lkZW50aWZpZXIoKSwg
IlJlc3QgcGFyYW1ldGVyICcuLi4nIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIHZhcmlhYmxlIGlk
ZW50aWZpZXIiKTsKKyAgICAgICAgICAgIGRlY2xhcmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIoKm1f
dG9rZW4ubV9kYXRhLmlkZW50LCAmZHVwbGljYXRlUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIHBy
b3BhZ2F0ZUVycm9yKCk7CisgICAgICAgICAgICBKU1RleHRQb3NpdGlvbiBpZGVudGlmaWVyU3Rh
cnQgPSB0b2tlblN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIEpTVGV4dFBvc2l0aW9uIGlk
ZW50aWZpZXJFbmQgPSB0b2tlbkVuZFBvc2l0aW9uKCk7CisgICAgICAgICAgICBwYXJhbWV0ZXIg
PSBjb250ZXh0LmNyZWF0ZVJlc3RQYXJhbWV0ZXIoKm1fdG9rZW4ubV9kYXRhLmlkZW50LCBwYXJh
bWV0ZXJDb3VudCwgaWRlbnRpZmllclN0YXJ0LCBpZGVudGlmaWVyRW5kKTsKKyAgICAgICAgICAg
IG5leHQoKTsKKyAgICAgICAgICAgIGZhaWxJZlRydWUobWF0Y2goQ09NTUEpLCAiUmVzdCBwYXJh
bWV0ZXIgc2hvdWxkIGJlIHRoZSBsYXN0IHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0
aW9uIik7IC8vIExldCdzIGhhdmUgYSBnb29kIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgY29tbW9u
IGNhc2UuCisgICAgICAgICAgICBpc1Jlc3RQYXJhbWV0ZXIgPSB0cnVlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHBhcmFtZXRlciA9IHBhcnNlRGVzdHJ1Y3R1cmluZ1BhdHRlcm4oY29u
dGV4dCwgRGVzdHJ1Y3R1cmVUb1BhcmFtZXRlcnMsIEV4cG9ydFR5cGU6Ok5vdEV4cG9ydGVkLCAm
ZHVwbGljYXRlUGFyYW1ldGVyLCAmaGFzRGVzdHJ1Y3R1cmluZ1BhdHRlcm4pOwogICAgICAgICBm
YWlsSWZGYWxzZShwYXJhbWV0ZXIsICJDYW5ub3QgcGFyc2UgcGFyYW1ldGVyIHBhdHRlcm4iKTsK
LSAgICAgICAgZGVmYXVsdFZhbHVlID0gcGFyc2VEZWZhdWx0VmFsdWVGb3JEZXN0cnVjdHVyaW5n
UGF0dGVybihjb250ZXh0KTsKKyAgICAgICAgaWYgKCFpc1Jlc3RQYXJhbWV0ZXIpCisgICAgICAg
ICAgICBkZWZhdWx0VmFsdWUgPSBwYXJzZURlZmF1bHRWYWx1ZUZvckRlc3RydWN0dXJpbmdQYXR0
ZXJuKGNvbnRleHQpOwogICAgICAgICBwcm9wYWdhdGVFcnJvcigpOwotICAgICAgICBmYWlsRnJv
bUR1cGxpY2F0ZSgpOworICAgICAgICBmYWlsSWZEdXBsaWNhdGVJZlZpb2xhdGlvbigpOwogICAg
ICAgICBjb250ZXh0LmFwcGVuZFBhcmFtZXRlcihsaXN0LCBwYXJhbWV0ZXIsIGRlZmF1bHRWYWx1
ZSk7Ci0gICAgICAgIHBhcmFtZXRlckNvdW50Kys7Ci0gICAgfQorICAgICAgICBpZiAoIWlzUmVz
dFBhcmFtZXRlcikKKyAgICAgICAgICAgIHBhcmFtZXRlckNvdW50Kys7CisgICAgfSB3aGlsZSAo
IWlzUmVzdFBhcmFtZXRlciAmJiBjb25zdW1lKENPTU1BKSk7CisKICAgICByZXR1cm4gdHJ1ZTsK
LSN1bmRlZiBmYWlsRnJvbUR1cGxpY2F0ZQorI3VuZGVmIGZhaWxJZkR1cGxpY2F0ZUlmVmlvbGF0
aW9uCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBMZXhlclR5cGU+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzQsNiArMTAz
NCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdHJpY3RNb2RlKCkgeyByZXR1cm4gY3VycmVudFNj
b3BlKCktPnN0cmljdE1vZGUoKTsgfQogICAgIGJvb2wgaXNWYWxpZFN0cmljdE1vZGUoKSB7IHJl
dHVybiBjdXJyZW50U2NvcGUoKS0+aXNWYWxpZFN0cmljdE1vZGUoKTsgfQogICAgIERlY2xhcmF0
aW9uUmVzdWx0TWFzayBkZWNsYXJlUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXIqIGlkZW50KSB7
IHJldHVybiBjdXJyZW50U2NvcGUoKS0+ZGVjbGFyZVBhcmFtZXRlcihpZGVudCk7IH0KKyAgICBi
b29sIGRlY2xhcmVSZXN0T3JOb3JtYWxQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYsIGNvbnN0
IElkZW50aWZpZXIqKik7CisKICAgICBib29sIGJyZWFrSXNWYWxpZCgpCiAgICAgewogICAgICAg
ICBTY29wZVJlZiBjdXJyZW50ID0gY3VycmVudFNjb3BlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkocmV2aXNpb24gMTkyNjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9TeW50YXhDaGVja2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICBGdW5jdGlvbkV4cHIsIENsYXNz
RXhwciwgU3VwZXJFeHByLCBCcmFja2V0RXhwciwgRG90RXhwciwgQ2FsbEV4cHIsCiAgICAgICAg
IE5ld0V4cHIsIFByZUV4cHIsIFBvc3RFeHByLCBVbmFyeUV4cHIsIEJpbmFyeUV4cHIsCiAgICAg
ICAgIENvbmRpdGlvbmFsRXhwciwgQXNzaWdubWVudEV4cHIsIFR5cGVvZkV4cHIsIE5ld1Rhcmdl
dEV4cHIsCi0gICAgICAgIERlbGV0ZUV4cHIsIEFycmF5TGl0ZXJhbEV4cHIsIEJpbmRpbmdEZXN0
cnVjdHVyaW5nLAorICAgICAgICBEZWxldGVFeHByLCBBcnJheUxpdGVyYWxFeHByLCBCaW5kaW5n
RGVzdHJ1Y3R1cmluZywgUmVzdFBhcmFtZXRlciwKICAgICAgICAgQXJyYXlEZXN0cnVjdHVyaW5n
LCBPYmplY3REZXN0cnVjdHVyaW5nLCBTb3VyY2VFbGVtZW50c1Jlc3VsdCwKICAgICAgICAgRnVu
Y3Rpb25Cb2R5UmVzdWx0LCBTcHJlYWRFeHByLCBBcmd1bWVudHNSZXN1bHQsCiAgICAgICAgIFBy
b3BlcnR5TGlzdFJlc3VsdCwgQXJndW1lbnRzTGlzdFJlc3VsdCwgRWxlbWVudHNMaXN0UmVzdWx0
LApAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIGludCBEZXN0cnVjdHVy
aW5nUGF0dGVybjsKICAgICB0eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJuIEFycmF5UGF0dGVy
bjsKICAgICB0eXBlZGVmIERlc3RydWN0dXJpbmdQYXR0ZXJuIE9iamVjdFBhdHRlcm47CisgICAg
dHlwZWRlZiBEZXN0cnVjdHVyaW5nUGF0dGVybiBSZXN0UGF0dGVybjsKIAogICAgIHN0YXRpYyBj
b25zdCBib29sIENyZWF0ZXNBU1QgPSBmYWxzZTsKICAgICBzdGF0aWMgY29uc3QgYm9vbCBOZWVk
c0ZyZWVWYXJpYWJsZUluZm8gPSBmYWxzZTsKQEAgLTM0Niw2ICszNDcsMTAgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIEJpbmRpbmdEZXN0cnVjdHVyaW5nOwogICAgIH0KKyAgICBS
ZXN0UGF0dGVybiBjcmVhdGVSZXN0UGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImLCBzaXplX3Qs
IGNvbnN0IEpTVGV4dFBvc2l0aW9uJiwgY29uc3QgSlNUZXh0UG9zaXRpb24mKQorICAgIHsgCisg
ICAgICAgIHJldHVybiBSZXN0UGFyYW1ldGVyOworICAgIH0KIAogICAgIGJvb2wgaXNCaW5kaW5n
Tm9kZShEZXN0cnVjdHVyaW5nUGF0dGVybiBwYXR0ZXJuKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTkyNjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAxLDQgKzcwMSwyMCBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKICAgICBSRVRVUk4ocmVzb2x2ZWRTY29wZSk7CiB9
CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb3B5X3Jlc3QpCit7CisgICAgQkVHSU4oKTsK
KyAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBwY1syXS51LnVuc2lnbmVkVmFsdWU7Cisg
ICAgdW5zaWduZWQgbnVtQXJndW1lbnRzVG9GdW5jdGlvbiA9IGV4ZWMtPmFyZ3VtZW50Q291bnQo
KTsKKyAgICBpZiAobnVtQXJndW1lbnRzVG9GdW5jdGlvbiA8PSBudW1QYXJhbXNUb1NraXApCisg
ICAgICAgIEVORCgpOworCisgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KE9Q
KDEpLmpzVmFsdWUoKSk7CisgICAgc2l6ZV90IGFycmF5U2l6ZSA9IG51bUFyZ3VtZW50c1RvRnVu
Y3Rpb24gLSBudW1QYXJhbXNUb1NraXA7CisgICAgYXJyYXktPnNldExlbmd0aChleGVjLCBhcnJh
eVNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspCisgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dChpICsgbnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgRU5EKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmgJKHJldmlzaW9uIDE5MjY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNiArMjkzLDcgQEAg
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9hc3NlcnQpOwogU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7CiBTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9zY29wZSk7CiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jb3B5X3Jlc3QpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAkocmV2aXNpb24gMTkyNjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDE1ICsx
MDg1LDE1IEBACiAtIHBhdGg6IGVzNi9SZWdFeHBfeV9hbmRfdV9mbGFnc195X2ZsYWdfbGFzdElu
ZGV4LmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNf
YXJndW1lbnRzX29iamVjdF9pbnRlcmFjdGlvbi5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBj
bWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNfYmFzaWNfZnVu
Y3Rpb25hbGl0eS5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFs
CiAtIHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRlcnNfY2FudF9iZV91c2VkX2luX3NldHRlcnMuanMK
LSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYv
cmVzdF9wYXJhbWV0ZXJzX2Z1bmN0aW9uX2xlbmd0aF9wcm9wZXJ0eS5qcwotICBjbWQ6IHJ1bkVT
NiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9yZXN0X3BhcmFtZXRl
cnNfbmV3X0Z1bmN0aW9uX3N1cHBvcnQuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBy
dW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvU2V0X2l0ZXJhdG9yX2Nsb3NpbmcuanMKICAgY21k
OiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1NldF9TZXRbU3ltYm9sLnNwZWNpZXNdLmpzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWFu
ZC1kZWZhdWx0LWFyZ3VtZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3Jlc3QtcGFyYW1ldGVyLWFuZC1kZWZhdWx0LWFyZ3VtZW50cy5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1w
YXJhbWV0ZXItYW5kLWRlZmF1bHQtYXJndW1lbnRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzYgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVu
Y3Rpb24gc2hvdWxkVGhyb3dURFooZnVuYykgeworICAgIHZhciBoYXNUaHJvd24gPSBmYWxzZTsK
KyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGlm
IChlLm5hbWUuaW5kZXhPZigiUmVmZXJlbmNlRXJyb3IiKSAhPT0gLTEpCisgICAgICAgICAgICBo
YXNUaHJvd24gPSB0cnVlOworICAgIH0KKyAgICBhc3NlcnQoaGFzVGhyb3duKTsKK30KK25vSW5s
aW5lKHNob3VsZFRocm93VERaKTsKKworZnVuY3Rpb24gZm9vKGEgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIGM7IH0sIGIgPSBhKCksIC4uLmMpIHsKKyAgICByZXR1cm4gYSgpOworfQorbm9JbmxpbmUo
Zm9vKTsKKworZnVuY3Rpb24gYmF6KGEgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGI7IH0sIC4uLmIp
IHsKKyAgICByZXR1cm4gYSgpOworfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykg
eworICAgIHNob3VsZFRocm93VERaKGZ1bmN0aW9uKCkgeyBmb28odW5kZWZpbmVkLCB1bmRlZmlu
ZWQsIDEwLCAyMCk7IH0pOworICAgIGxldCBvID0ge3g6IDIwfTsKKyAgICBsZXQgcmVzdWx0ID0g
YmF6KHVuZGVmaW5lZCwgMTAsIG8sICJiYXoiKTsKKyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0aCA9
PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMTApOworICAgIGFzc2VydChyZXN1bHRb
MV0gPT09IG8pOworICAgIGFzc2VydChyZXN1bHRbMl0gPT09ICJiYXoiKTsKK30KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXItYmFzaWNzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1w
YXJhbWV0ZXItYmFzaWNzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1iYXNpY3MuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDMgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKQorfQorbm9JbmxpbmUoYXNzZXJ0KTsK
KworZnVuY3Rpb24gZm9vKGEsIC4uLmIpIHsKKyAgICByZXR1cm4gYjsgICAgCit9Citub0lubGlu
ZShmb28pOworCitmdW5jdGlvbiBiYXIoYSwgLi4uYikgeworICAgIHJldHVybiBhICsgYlswXTsK
K30KK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGJheihhLCAuLi5iKSB7CisgICAgZnVuY3Rp
b24gY2FwdHVyZSgpIHsgcmV0dXJuIGI7IH0KKyAgICBhc3NlcnQoYlswXSA9PT0gY2FwdHVyZSgp
WzBdKTsKKyAgICByZXR1cm4gYSArIGJbMF07Cit9Citub0lubGluZShiYXopOworCitmdW5jdGlv
biBqYXooYSwgLi4uYikgeworICAgIGZ1bmN0aW9uIGNhcHR1cmUoKSB7IHJldHVybiBhICsgYlsw
XTsgfQorICAgIGFzc2VydChjYXB0dXJlKCkgPT09IGEgKyBiWzBdKTsKKyAgICByZXR1cm4gYSAr
IGJbMF07Cit9Citub0lubGluZShqYXopOworCitmdW5jdGlvbiBrYXooYSA9IDEwLCAuLi5iKSB7
CisgICAgcmV0dXJuIGEgKyBiWzBdCit9Citub0lubGluZShrYXopOworCitmdW5jdGlvbiByYXoo
YSA9IDEwLCAuLi5iKSB7CisgICAgZnVuY3Rpb24gY2FwdHVyZSgpIHsgcmV0dXJuIGEgKyBiWzBd
OyB9CisgICAgYXNzZXJ0KGNhcHR1cmUoKSA9PT0gYSArIGJbMF0pOworICAgIHJldHVybiBhICsg
YlswXTsKK30KK25vSW5saW5lKHJheik7CisKK2Z1bmN0aW9uIHJlc3RMZW5ndGgoYSwgLi4uYikg
eworICAgIHJldHVybiBiLmxlbmd0aDsKK30KK25vSW5saW5lKHJlc3RMZW5ndGgpOworCitmdW5j
dGlvbiB0ZXN0QXJndW1lbnRzT2JqZWN0KC4uLmFyZ3MpIHsKKyAgICBhc3NlcnQoYXJncy5sZW5n
dGggPT09IGFyZ3VtZW50cy5sZW5ndGgpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5s
ZW5ndGg7IGkrKykKKyAgICAgICAgYXNzZXJ0KGFyZ3NbaV0gPT09IGFyZ3VtZW50c1tpXSk7Cit9
Citub0lubGluZSh0ZXN0QXJndW1lbnRzT2JqZWN0KTsKKworZnVuY3Rpb24gc3RyaWN0TW9kZUxp
a2VBcmd1bWVudHNPYmplY3QoYSwgLi4uYXJncykgeworICAgIGFzc2VydChhcmd1bWVudHNbMF0g
PT09IGEpOworICAgIGEgPSAiYSI7CisgICAgYXNzZXJ0KGFyZ3VtZW50c1swXSAhPT0gYSk7Cisg
ICAgYXNzZXJ0KGFyZ3VtZW50c1swXSA9PT0gMjApOworICAgIGFzc2VydChhcmd1bWVudHMubGVu
Z3RoID09PSAyKTsKKyAgICBhc3NlcnQoYXJncy5sZW5ndGggPT09IDEpOworICAgIGFzc2VydChh
cmd1bWVudHNbMV0gPT09IGFyZ3NbMF0pOworICAgIGFyZ3VtZW50c1sxXSA9ICJiIjsKKyAgICBh
c3NlcnQoYXJnc1swXSAhPT0gImIiKTsKK30KK25vSW5saW5lKHN0cmljdE1vZGVMaWtlQXJndW1l
bnRzT2JqZWN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgbGV0
IGExID0gZm9vKDEwLCAyMCk7CisgICAgYXNzZXJ0KGExIGluc3RhbmNlb2YgQXJyYXkpOworICAg
IGFzc2VydChhMS5sZW5ndGggPT09IDEpOworICAgIGFzc2VydChhMVswXSA9PT0gMjApOworCisg
ICAgbGV0IGEyID0gZm9vKDEwKTsKKyAgICBhc3NlcnQoYTIgaW5zdGFuY2VvZiBBcnJheSk7Cisg
ICAgYXNzZXJ0KGEyLmxlbmd0aCA9PT0gMCk7CisKKyAgICBsZXQgYTMgPSBiYXIoMTAsIDIwKTsK
KyAgICBhc3NlcnQoYTMgPT09IDMwKTsKKworICAgIGxldCBhNCA9IGJheigxMCwgMjApOworICAg
IGFzc2VydChhNCA9PT0gMzApOworCisgICAgbGV0IGE1ID0gamF6KCJoZWxsbyIsICJ3b3JsZCIp
OworICAgIGFzc2VydChhNSA9PT0gImhlbGxvd29ybGQiKTsKKworICAgIGxldCBhNiA9IGtheih1
bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTYgPT09IDUwKTsKKworICAgIGxldCBhNyA9IGth
eih1bmRlZmluZWQsIDQwKTsKKyAgICBhc3NlcnQoYTcgPT09IDUwKTsKKworICAgIGFzc2VydChy
ZXN0TGVuZ3RoKCkgPT09IDApOworICAgIGFzc2VydChyZXN0TGVuZ3RoKDEpID09PSAwKTsKKyAg
ICBhc3NlcnQocmVzdExlbmd0aCgxLCAxKSA9PT0gMSk7CisgICAgYXNzZXJ0KHJlc3RMZW5ndGgo
MSwgMSwgMSkgPT09IDIpOworICAgIGFzc2VydChyZXN0TGVuZ3RoKDEsIDEsIDEsIDEsIDEsIDEs
IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEpID09PSAyMCk7CisK
KyAgICBsZXQgb2JqID0ge2ZvbzogNDB9OworICAgIHRlc3RBcmd1bWVudHNPYmplY3QoImhlbGxv
Iiwgb2JqLCAxMDAsIDEyLjM0LCAid29ybGQiLCBvYmosIFsxLCAyLCAzXSk7CisKKyAgICBzdHJp
Y3RNb2RlTGlrZUFyZ3VtZW50c09iamVjdCgyMCwgMzApOworfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXN0LXBhcmFtZXRlci1pbmxpbmVkLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcmVzdC1wYXJhbWV0ZXIt
aW5saW5lZC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcmVzdC1wYXJhbWV0ZXItaW5saW5lZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM4IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIikKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0
aW9uIGJhciguLi5yZXN0KSB7CisgICAgcmV0dXJuIHJlc3Q7Cit9CisKK2Z1bmN0aW9uIGZvbyhh
LCBiLCBjKSB7CisgICAgcmV0dXJuIGJhcihhLCBiLCBjKTsKK30KK25vSW5saW5lKGZvbyk7CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIGxldCByZXN1bHQgPSBmb28o
MTAsIDIwLCAzMCk7CisgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggPT09IDMpOworICAgIGFzc2Vy
dChyZXN1bHRbMF0gPT09IDEwKTsKKyAgICBhc3NlcnQocmVzdWx0WzFdID09PSAyMCk7CisgICAg
YXNzZXJ0KHJlc3VsdFsyXSA9PT0gMzApOworfQorCitmdW5jdGlvbiBiYXooLi4ucmVzdCkgewor
ICAgIHJldHVybiByZXN0OworfQorZnVuY3Rpb24gamF6KGEsIGIsIGMpIHsKKyAgICByZXR1cm4g
YmF6LmFwcGx5KG51bGwsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpOwor
fQorbm9JbmxpbmUoamF6KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDsgaSsrKSB7Cisg
ICAgbGV0IHJlc3VsdCA9IGpheigxMCwgMjAsIDMwKTsKKyAgICBhc3NlcnQocmVzdWx0Lmxlbmd0
aCA9PT0gMyk7CisgICAgYXNzZXJ0KHJlc3VsdFswXSA9PT0gMTApOworICAgIGFzc2VydChyZXN1
bHRbMV0gPT09IDIwKTsKKyAgICBhc3NlcnQocmVzdWx0WzJdID09PSAzMCk7Cit9CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTI2NTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0xMS0xOSAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KKworICAgICAgICBbRVM2XSBBZGQgc3VwcG9ydCBmb3IgcmVzdCBwYXJhbWV0ZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODQwOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcGFy
c2VyLXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQ6CisgICAgICAgICoganMvc2NyaXB0LXRlc3Rz
L3BhcnNlci1zeW50YXgtY2hlY2suanM6CisgICAgICAgIChjYXRjaCk6CisKIDIwMTUtMTEtMTkg
IFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgU2tpcCA0IG1v
cmUgbWVkaWFzdHJlYW0gdGVzdHMgdGhhdCBjcmFzaCB3aGVuIHBhaW50aW5nIGEgbW9jayB2aWRl
byBzb3VyY2UuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9wYXJzZXItc3ludGF4LWNoZWNrLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9wYXJzZXItc3ludGF4LWNoZWNr
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTkyNjUzKQorKysgTGF5b3V0VGVzdHMvanMvcGFyc2Vy
LXN5bnRheC1jaGVjay1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkyOSw2ICs5Mjks
NDkgQEAgUEFTUyBJbnZhbGlkOiAiMSAlIAogLS0iCiBQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBm
KCkgeyAxICUgCiAtLSB9IgorUmVzdCBwYXJhbWV0ZXIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0aW9u
IGZvbyguLi5hKSB7IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBm
b28oLi4uYSkgeyB9IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oYSwgLi4uYikgeyB9
IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKGEsIC4uLmIpIHsg
fSB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZm9vKGEgPSAyMCwgLi4uYikgeyB9IgorUEFT
UyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKGEgPSAyMCwgLi4uYikgeyB9
IH0iCitQQVNTIFZhbGlkOiAgICJmdW5jdGlvbiBmb28oYSwgYiwgYywgZCwgZSwgZiwgZywgLi4u
aCkgeyB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKGEsIGIs
IGMsIGQsIGUsIGYsIGcsIC4uLmgpIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9v
KGEsIC4uLmIsIGMpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9u
IGZvbyhhLCAuLi5iLCBjKSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyhhLCAu
Li5iLCApIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyhh
LCAuLi5iLCApIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKGEsIC4uLmEpIHsg
fSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyhhLCAuLi5hKSB7
IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZvbyguLi5hLCAuLi5iKSB7IH0iCitQQVNT
IEludmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uYSwgLi4uYikgeyB9IH0i
CitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uYiwgLi4uYikgeyB9IgorUEFTUyBJbnZh
bGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLmIsIC4uLmIpIHsgfSB9IgorUEFT
UyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLmIgIC4uLmIpIHsgfSIKK1BBU1MgSW52YWxpZDog
ImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5iICAuLi5iKSB7IH0gfSIKK1BBU1MgSW52
YWxpZDogImZ1bmN0aW9uIGZvbyhhLCBhLCAuLi5iKSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5j
dGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oYSwgYSwgLi4uYikgeyB9IH0iCitQQVNTIEludmFsaWQ6
ICJmdW5jdGlvbiBmb28oLi4ue2J9KSB7IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmKCkg
eyBmdW5jdGlvbiBmb28oLi4ue2J9KSB7IH0gfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGZv
byguLi5bYl0pIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZv
byguLi5bYl0pIHsgfSB9IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLjEyMykgeyB9
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZigpIHsgZnVuY3Rpb24gZm9vKC4uLjEyMykgeyB9
IH0iCitQQVNTIEludmFsaWQ6ICJmdW5jdGlvbiBmb28oLi4uMTIzYWJjKSB7IH0iCitQQVNTIElu
dmFsaWQ6ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uMTIzYWJjKSB7IH0gfSIKK1BB
U1MgVmFsaWQ6ICAgImZ1bmN0aW9uIGZvbyguLi5hYmMxMjMpIHsgfSIKK1BBU1MgVmFsaWQ6ICAg
ImZ1bmN0aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi5hYmMxMjMpIHsgfSB9IgorUEFTUyBWYWxp
ZDogICAiZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9IgorUEFTUyBWYWxpZDogICAiZnVuY3Rpb24g
ZigpIHsgZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICIndXNlIHN0
cmljdCc7IGZ1bmN0aW9uIGZvbyguLi5sZXQpIHsgfSIKK1BBU1MgSW52YWxpZDogImZ1bmN0aW9u
IGYoKSB7ICd1c2Ugc3RyaWN0JzsgZnVuY3Rpb24gZm9vKC4uLmxldCkgeyB9IH0iCitQQVNTIFZh
bGlkOiAgICJmdW5jdGlvbiBmb28oLi4ueWllbGQpIHsgfSIKK1BBU1MgVmFsaWQ6ICAgImZ1bmN0
aW9uIGYoKSB7IGZ1bmN0aW9uIGZvbyguLi55aWVsZCkgeyB9IH0iCitQQVNTIEludmFsaWQ6ICIn
dXNlIHN0cmljdCc7IGZ1bmN0aW9uIGZvbyguLi55aWVsZCkgeyB9IgorUEFTUyBJbnZhbGlkOiAi
ZnVuY3Rpb24gZigpIHsgJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4ueWllbGQpIHsgfSB9
IgorUEFTUyBJbnZhbGlkOiAiZnVuY3Rpb24gZm9vKC4uLmlmKSB7IH0iCitQQVNTIEludmFsaWQ6
ICJmdW5jdGlvbiBmKCkgeyBmdW5jdGlvbiBmb28oLi4uaWYpIHsgfSB9IgogUEFTUyBlLmxpbmUg
aXMgMQogUEFTUyBmb28gaXMgJ1BBU1MnCiBQQVNTIGJhciBpcyAnUEFTUycKSW5kZXg6IExheW91
dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9wYXJzZXItc3ludGF4LWNoZWNrLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9wYXJzZXItc3ludGF4LWNoZWNrLmpzCShy
ZXZpc2lvbiAxOTI2NTMpCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcGFyc2VyLXN5
bnRheC1jaGVjay5qcwkod29ya2luZyBjb3B5KQpAQCAtNTU2LDYgKzU1NiwyOSBAQCBpbnZhbGlk
KCIxICUgLS0iKTsKIGludmFsaWQoIjEgJSBcbisrIik7CiBpbnZhbGlkKCIxICUgXG4tLSIpOwog
CitkZWJ1ZygiUmVzdCBwYXJhbWV0ZXIiKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oLi4uYSkgeyB9
Iik7Cit2YWxpZCgiZnVuY3Rpb24gZm9vKGEsIC4uLmIpIHsgfSIpOwordmFsaWQoImZ1bmN0aW9u
IGZvbyhhID0gMjAsIC4uLmIpIHsgfSIpOwordmFsaWQoImZ1bmN0aW9uIGZvbyhhLCBiLCBjLCBk
LCBlLCBmLCBnLCAuLi5oKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyhhLCAuLi5iLCBj
KSB7IH0iKQoraW52YWxpZCgiZnVuY3Rpb24gZm9vKGEsIC4uLmIsICkgeyB9IikKK2ludmFsaWQo
ImZ1bmN0aW9uIGZvbyhhLCAuLi5hKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi5h
LCAuLi5iKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi5iLCAuLi5iKSB7IH0iKTsK
K2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi5iICAuLi5iKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0
aW9uIGZvbyhhLCBhLCAuLi5iKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi57Yn0p
IHsgfSIpOworaW52YWxpZCgiZnVuY3Rpb24gZm9vKC4uLltiXSkgeyB9Iik7CitpbnZhbGlkKCJm
dW5jdGlvbiBmb28oLi4uMTIzKSB7IH0iKTsKK2ludmFsaWQoImZ1bmN0aW9uIGZvbyguLi4xMjNh
YmMpIHsgfSIpOwordmFsaWQoImZ1bmN0aW9uIGZvbyguLi5hYmMxMjMpIHsgfSIpOwordmFsaWQo
ImZ1bmN0aW9uIGZvbyguLi5sZXQpIHsgfSIpOworaW52YWxpZCgiJ3VzZSBzdHJpY3QnOyBmdW5j
dGlvbiBmb28oLi4ubGV0KSB7IH0iKTsKK3ZhbGlkKCJmdW5jdGlvbiBmb28oLi4ueWllbGQpIHsg
fSIpOworaW52YWxpZCgiJ3VzZSBzdHJpY3QnOyBmdW5jdGlvbiBmb28oLi4ueWllbGQpIHsgfSIp
OworaW52YWxpZCgiZnVuY3Rpb24gZm9vKC4uLmlmKSB7IH0iKTsKKwogCiAKIHRyeSB7IGV2YWwo
ImEuYi5jID0ge307Iik7IH0gY2F0Y2goZTEpIHsgZT1lMTsgc2hvdWxkQmUoImUubGluZSIsICIx
IikgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>