<?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>21123</bug_id>
          
          <creation_ts>2008-09-25 16:06:14 -0700</creation_ts>
          <short_desc>using &quot;arguments&quot; in a function should not force creation of an activation object</short_desc>
          <delta_ts>2008-10-01 16:47:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>20813</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Cameron Zwarich (cpst)">zwarich</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92819</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-25 16:06:14 -0700</bug_when>
    <thetext>This will make some tests much faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92820</commentid>
    <comment_count>1</comment_count>
      <attachid>23827</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-09-25 16:06:56 -0700</bug_when>
    <thetext>Created attachment 23827
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92823</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-25 16:26:49 -0700</bug_when>
    <thetext>Darin wanted to know how to emit an initial &quot;op_make_an_arguments_object&quot; at the end of codegen. Here&apos;s an example of something I&apos;ve done in a work-in-progress patch:

[in CodeGenerator::generate]

    if (m_codeType == FunctionCode &amp;&amp; m_codeBlock-&gt;needsFullScopeChain) {
        ASSERT(globalData()-&gt;machine-&gt;getOpcodeID(m_codeBlock-&gt;instructions[0].u.opcode) == op_init);
        m_codeBlock-&gt;instructions[0] = globalData()-&gt;machine-&gt;getOpcode(op_init_activation);
    }

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92824</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-25 16:28:44 -0700</bug_when>
    <thetext>(I had previously suggested reserving extra space at the beginning of the instruction buffer, but that turns out to be tricky, because at least exception info and structureID info have already been emitted with assumptions about opcode positions, and lots of code directly accesses the instruction buffer. The solution above is simpler.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92830</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-25 17:23:58 -0700</bug_when>
    <thetext>...I can just finish off Darin&apos;s patch once I&apos;ve finished my own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92934</commentid>
    <comment_count>5</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-09-26 09:15:21 -0700</bug_when>
    <thetext>I would like to finish this off perhaps with collaboration from cpst - I think I have a pretty clear picture of how to do it well. 

I think op_make_an_arguments_object could be emitted at the start of codegen, not the end, since we already track for local use of arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93163</commentid>
    <comment_count>6</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-28 11:57:59 -0700</bug_when>
    <thetext>I&apos;ll assign this to myself, since I am working on bug 21200.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93265</commentid>
    <comment_count>7</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-29 13:10:07 -0700</bug_when>
    <thetext>I landed the devirtualization of JSObject::isActivationObject() separately as r37068.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93288</commentid>
    <comment_count>8</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-29 14:41:55 -0700</bug_when>
    <thetext>I just realized that the fact that one can write to arguments makes this patch a little bit more difficult. You can&apos;t just blindly tear off any &apos;arguments&apos; object that is in the OptionalCalleeArguments slot, because it may be the &apos;arguments&apos; object of another function.

Geoff proposed a solution, which is to make a local variable for the arguments object, separate from the slot in the call frame, which is actually stored in the symbol table. It&apos;s a bit of a waste, but there isn&apos;t really any other way to do it in light of eval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93339</commentid>
    <comment_count>9</comment_count>
      <attachid>23933</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-30 00:45:50 -0700</bug_when>
    <thetext>Created attachment 23933
Patch in progress

Here is my latest patch in progress. It is a 19% speedup on the V8 Raytrace test. It currently has two problems that prevent it from landing:

1) The issue of tearing off a different arguments object mentioned above.

2) Some slight simplification of codegen for op_ret.

The first will require some changes to detect &apos;arguments&apos; entirely during parsing, so I can always put the mutable version of &apos;arguments&apos; in the first local. I will write that part separately and post it with some tests for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93419</commentid>
    <comment_count>10</comment_count>
      <attachid>23952</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-30 13:36:48 -0700</bug_when>
    <thetext>Created attachment 23952
Patch to move lexical &apos;arguments&apos; detection to the parser

I need this in order to fix the problem with ambiguity of &apos;arguments&apos; objects in tear-off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93422</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-30 13:55:30 -0700</bug_when>
    <thetext>Please add tests for declaring a function named &quot;arguments.&quot;

+shouldBeTrue(&quot;assign_var_init_test()&quot;);

Despite a few strays in JavaScriptCore, the WebKit style is to use camelCase: assignVarInitTest, etc.

You don&apos;t need to track the use of &apos;arguments&apos; in a FunctionExpr, since that use only determines the function&apos;s name, and not its symbol in local scope.

Please write a test case that verifies that &quot;(function (arguments) { return arguments; })(1)&quot; returns 1.

Please write a test case that verifies that &quot;(function f(arguments) { return (function () { return f.arguments; })(); })(1)&quot; returns 1. I believe this is broken now. The way to fix it is to use the symbol table. (It&apos;s OK to check the test in now with results that say &quot;These results are incorrect.&quot;)

r=me with the changes above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93423</commentid>
    <comment_count>12</comment_count>
      <attachid>23952</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-30 13:55:46 -0700</bug_when>
    <thetext>Comment on attachment 23952
Patch to move lexical &apos;arguments&apos; detection to the parser

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93438</commentid>
    <comment_count>13</comment_count>
      <attachid>23952</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-30 15:20:34 -0700</bug_when>
    <thetext>Comment on attachment 23952
Patch to move lexical &apos;arguments&apos; detection to the parser

This landed as r37117, so I will clear the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93507</commentid>
    <comment_count>14</comment_count>
      <attachid>23966</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-09-30 22:21:58 -0700</bug_when>
    <thetext>Created attachment 23966
Patch in progress

Here is a new version of this patch. I made a final version that fixes all of the corner cases, but I noticed that it is only an 8% speedup rather than a 19% speedup.

This isn&apos;t that final version; rather it is an updated version of the previous patch with the line that regresses performance commented out:

+        // addVar(propertyNames().UTC, false);

I picked UTC because it doesn&apos;t appear in the Raytrace test. I will also post my newest patch that fixes all of the corner cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93542</commentid>
    <comment_count>15</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-01 04:20:59 -0700</bug_when>
    <thetext>I figured out the problem with using an extra local. Arguments::copyRegisters copies local var registers as well as param registers, but it has no need to. The hot arguments-using function in Raytrace happened to use no local vars, so allocating a local for &quot;arguments&quot; created the first, thus forcing a completely useless allocation for register copy. This version of Arguments::copyRegisters solves that problem and actually results in a patch that is even faster than the fast original:

    inline void Arguments::copyRegisters()
    {
        ASSERT(!d-&gt;activation);
        ASSERT(!d-&gt;registerArray);

        size_t numParametersMinusThis = d-&gt;callee-&gt;m_body-&gt;generatedByteCode().numParameters - 1;

        if (!numParametersMinusThis)
            return;

        int registerOffset = numParametersMinusThis + RegisterFile::CallFrameHeaderSize;
        size_t registerArraySize = numParametersMinusThis;

        Register* registerArray = new Register[registerArraySize];
        memcpy(registerArray, d-&gt;registers - registerOffset, registerArraySize * sizeof(Register));
        d-&gt;registerArray.set(registerArray);
        d-&gt;registers = registerArray + registerOffset;
    }

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93570</commentid>
    <comment_count>16</comment_count>
      <attachid>23983</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-01 12:04:14 -0700</bug_when>
    <thetext>Created attachment 23983
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93585</commentid>
    <comment_count>17</comment_count>
      <attachid>23983</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-01 13:09:58 -0700</bug_when>
    <thetext>Comment on attachment 23983
Proposed patch

+            m_jit.movl_mr(RegisterFile::OptionalCalleeActivation * static_cast&lt;int&gt;(sizeof(Register)), X86::edi, X86::eax);
+            m_jit.orl_mr(RegisterFile::OptionalCalleeArguments * static_cast&lt;int&gt;(sizeof(Register)), X86::edi, X86::eax);

I&apos;m disappointed that we have to make the fast case slower here by examining both of these. I wonder if some day we can find a way to make it faster.

+    } else if (JSValue* arguments = r[RegisterFile::OptionalCalleeArguments].getJSValue()) {
+        if (arguments-&gt;isObject(&amp;Arguments::info))
+            static_cast&lt;Arguments*&gt;(arguments)-&gt;copyRegisters();
+    }

Why is this isObject check needed? When does OptionalCalleeArguments contains something that&apos;s non-zero but is not an Arguments object?

+                                        { $$ = createNodeFeatureInfo&lt;PropertyNode*&gt;(makeGetterOrSetterPropertyNode(globalPtr, *$1, *$2, $4.m_node.head, $7, LEXER-&gt;sourceRange($6, $8)), $4.m_featureInfo | ClosureFeature, 0); DBG($7, @6, @8); $7-&gt;setUsesArguments($7-&gt;usesArguments() | ($4.m_featureInfo &amp; ArgumentsFeature)); if (!$$.m_node) YYABORT; }

I&apos;d expect to have the new code be before the DBG rather than after. As these lines of code get super-long, I&apos;d interested in having some of this logic move into a helper function so it&apos;s not all on one giant source line in the grammar. Or some other way of formatting this with multiple lines so it&apos;s easier to read.

This is a great speedup!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93625</commentid>
    <comment_count>18</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-01 16:47:30 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 23983 [edit])
&gt; +            m_jit.movl_mr(RegisterFile::OptionalCalleeActivation *
&gt; static_cast&lt;int&gt;(sizeof(Register)), X86::edi, X86::eax);
&gt; +            m_jit.orl_mr(RegisterFile::OptionalCalleeArguments *
&gt; static_cast&lt;int&gt;(sizeof(Register)), X86::edi, X86::eax);
&gt;
&gt; I&apos;m disappointed that we have to make the fast case slower here by examining
&gt; both of these. I wonder if some day we can find a way to make it faster.

We are looking at removing all branches from op_ret in the next few days, so hopefully it happens. I will be making separate bugs for this.
 
&gt; +    } else if (JSValue* arguments =
&gt; r[RegisterFile::OptionalCalleeArguments].getJSValue()) {
&gt; +        if (arguments-&gt;isObject(&amp;Arguments::info))
&gt; +            static_cast&lt;Arguments*&gt;(arguments)-&gt;copyRegisters();
&gt; +    }
&gt; 
&gt; Why is this isObject check needed? When does OptionalCalleeArguments contains
&gt; something that&apos;s non-zero but is not an Arguments object?

Sorry! This is from an earlier version of my patch. As I mentioned in the ChangeLog, OptionalCalleeArguments always contains 0 or an Arguments object. I changed these to assertions using Arguments::info before I landed.

&gt; +                                        { $$ =
&gt; createNodeFeatureInfo&lt;PropertyNode*&gt;(makeGetterOrSetterPropertyNode(globalPtr,
&gt; *$1, *$2, $4.m_node.head, $7, LEXER-&gt;sourceRange($6, $8)), $4.m_featureInfo |
&gt; ClosureFeature, 0); DBG($7, @6, @8); $7-&gt;setUsesArguments($7-&gt;usesArguments() |
&gt; ($4.m_featureInfo &amp; ArgumentsFeature)); if (!$$.m_node) YYABORT; }
&gt; 
&gt; I&apos;d expect to have the new code be before the DBG rather than after. As these
&gt; lines of code get super-long, I&apos;d interested in having some of this logic move
&gt; into a helper function so it&apos;s not all on one giant source line in the grammar.
&gt; Or some other way of formatting this with multiple lines so it&apos;s easier to
&gt; read.

I moved it before the DBG, but I agree we should format this (and other code in the parser) in a much better way.

This was landed in r37160.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23827</attachid>
            <date>2008-09-25 16:06:56 -0700</date>
            <delta_ts>2008-09-30 00:45:50 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>ArgPatch.txt</filename>
            <type>text/plain</type>
            <size>24689</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzNjkwMSkKKysr
IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSwxNCBAQAogI2luY2x1ZGUgIk1hY2hpbmUuaCIKICNpbmNsdWRlICJ1c3RyaW5nLmgi
CiAKKy8vIERBUklOJ1MgQVJHVU1FTlRTIFRPRE86CisvLworLy8gLSBlbWl0IGluaXRfYXJnX29i
aiBvcGNvZGUgYXQgc3RhcnQgb2YgZnVuY3Rpb24gaWYgYXJndW1lbnRzIHJlZ2lzdGVyIHdhcyB1
c2VkIGluIGdlbmVyYXRlZCBjb2RlCisvLyAtIGVtaXQgdGVhcl9vZmZfYWN0aXZhdGlvbiBvcGNv
ZGUgYmVmb3JlIG9wX3JldCBpZiBhY3RpdmF0aW9uIGlzIG5lZWRlZAorLy8gLSBjaGFuZ2UgQ1RJ
IHJldCBpbXBsZW1lbnRhdGlvbiB0byBjaGVjayBhcmd1bWVudHMgZm9yIDAgYW5kIHVzZSBvcF9y
ZXRfYXJndW1lbnRzIGluc3RlZCBvZiBvcF9yZXRfYWN0aXZhdGlvbgorLy8gLSByZW1vdmUgb3Bf
cmV0X2FjdGl2YXRpb24KKy8vIC0gZml4IG5vbi1DVEkgYnl0ZWNvZGUgb3BfcmV0IGluIGEgc2lt
aWxhciBmYXNoaW9uCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMzYxLDE0ICszNjksMTkgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6YWRkUGFyYW1l
dGVyKAogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpyZWdpc3RlckZvcihjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkKIHsKLSAgICBpZiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYg
aWRlbnQgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykKLSAgICAgICAgbV9jb2RlQmxvY2st
Pm5lZWRzRnVsbFNjb3BlQ2hhaW4gPSB0cnVlOwotCiAgICAgaWYgKGlkZW50ID09IHByb3BlcnR5
TmFtZXMoKS50aGlzSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuICZtX3RoaXNSZWdpc3RlcjsK
IAotICAgIGlmICghc2hvdWxkT3B0aW1pemVMb2NhbHMoKSkKKyAgICBpZiAoIXNob3VsZE9wdGlt
aXplTG9jYWxzKCkpIHsKKyAgICAgICAgaWYgKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlICYm
IGlkZW50ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiA9IHRydWU7CiAgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGlmIChtX2NvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSAmJiBpZGVudCA9PSBwcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CisgICAgICAgIC8vIERBUklOOiBEbyBzb21ldGhpbmcg
dG8gbWFrZSBwdXQgYW4gYXJndW1lbnRzLWluaXRpYWxpemluZyBvcGNvZGUgYXQgdGhlIHN0YXJ0
IG9mIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgcmV0dXJuICZyZWdpc3RlckZvcihSZWdpc3RlckZp
bGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKTsKKyAgICB9CiAKICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQoaWRlbnQudXN0cmluZygpLnJlcCgpKTsKICAg
ICBpZiAoZW50cnkuaXNOdWxsKCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24g
MzY5MDEpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hY2hpbmUu
aCIKIAorI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkJhdGNoZWRUcmFuc2l0aW9u
T3B0aW1pemVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJD
YWxsRnJhbWUuaCIKQEAgLTUyOSw2ICs1MzAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWFjaGlu
ZTo6aW5pdGlhbGl6ZUNhCiAgICAgY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3Vu
dF0gPSBhcmdjOyAvLyBvcmlnaW5hbCBhcmd1bWVudCBjb3VudCAoZm9yIHRoZSBzYWtlIG9mIHRo
ZSAiYXJndW1lbnRzIiBvYmplY3QpCiAgICAgY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6Q2FsbGVl
XSA9IGZ1bmN0aW9uOwogICAgIGNhbGxGcmFtZVtSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVl
QWN0aXZhdGlvbl0gPSBudWxsSlNWYWx1ZTsKKyAgICBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpP
cHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBudWxsSlNWYWx1ZTsKIH0KIAogQUxXQVlTX0lOTElO
RSBSZWdpc3Rlciogc2xpZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqIG5ld0NvZGVCbG9jaywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lz
dGVyKiByZWdpc3RlckJhc2UsIFJlZ2lzdGVyKiByLCBzaXplX3QgcmVnaXN0ZXJPZmZzZXQsIGlu
dCBhcmdjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uVmFsdWUpCkBAIC03MTUsNiArNzE3LDcgQEAgdm9p
ZCBNYWNoaW5lOjpkdW1wUmVnaXN0ZXJzKGNvbnN0IENvZGVCbAogICAgIHByaW50ZigiW0FyZ3Vt
ZW50Q291bnRdICAgICAgICAgICAgfCAlMTBwIHwgJTEwcCBcbiIsIGl0LCAoKml0KS52KCkpOyAr
K2l0OwogICAgIHByaW50ZigiW0NhbGxlZV0gICAgICAgICAgICAgICAgICAgfCAlMTBwIHwgJTEw
cCBcbiIsIGl0LCAoKml0KS52KCkpOyArK2l0OwogICAgIHByaW50ZigiW09wdGlvbmFsQ2FsbGVl
QWN0aXZhdGlvbl0gfCAlMTBwIHwgJTEwcCBcbiIsIGl0LCAoKml0KS52KCkpOyArK2l0OworICAg
IHByaW50ZigiW09wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSAgfCAlMTBwIHwgJTEwcCBcbiIsIGl0
LCAoKml0KS52KCkpOyArK2l0OwogICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKICAgICBpbnQgcmVnaXN0ZXJDb3Vu
dCA9IDA7CkBAIC03ODksMTAgKzc5MiwxMyBAQCBORVZFUl9JTkxJTkUgYm9vbCBNYWNoaW5lOjp1
bndpbmRDYWxsRnJhCiAgICAgaWYgKG9sZENvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikK
ICAgICAgICAgc2NvcGVDaGFpbi0+ZGVyZWYoKTsKIAotICAgIC8vIElmIHRoaXMgY2FsbCBmcmFt
ZSBjcmVhdGVkIGFuIGFjdGl2YXRpb24sIHRlYXIgaXQgb2ZmLgotICAgIGlmIChKU0FjdGl2YXRp
b24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihyW1JlZ2lzdGVyRmls
ZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5qc1ZhbHVlKGV4ZWMpKSkgewotICAgICAgICBB
U1NFUlQoYWN0aXZhdGlvbi0+aXNBY3RpdmF0aW9uT2JqZWN0KCkpOwotICAgICAgICBhY3RpdmF0
aW9uLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgLy8gSWYgdGhpcyBjYWxsIGZyYW1lIGNyZWF0ZWQg
YW4gYWN0aXZhdGlvbiBvciBhcmd1bWVudHMgb2JqZWN0LCB0ZWFyIGl0IG9mZi4KKyAgICBpZiAo
SlNWYWx1ZSogYWN0aXZhdGlvbiA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2
YXRpb25dLmdldEpTVmFsdWUoKSkgeworICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmpl
Y3QoJkpTQWN0aXZhdGlvbjo6aW5mbykpOworICAgICAgICBzdGF0aWNfY2FzdDxKU0FjdGl2YXRp
b24qPihhY3RpdmF0aW9uKS0+Y29weVJlZ2lzdGVycygpOworICAgIH0gZWxzZSBpZiAoSlNWYWx1
ZSogYXJndW1lbnRzID0gcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5n
ZXRKU1ZhbHVlKCkpIHsKKyAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3Vt
ZW50czo6aW5mbykpOworICAgICAgICBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMp
LT5jb3B5UmVnaXN0ZXJzKCk7CiAgICAgfQogICAgIAogICAgIGNvZGVCbG9jayA9IHJbUmVnaXN0
ZXJGaWxlOjpDYWxsZXJDb2RlQmxvY2tdLmNvZGVCbG9jaygpOwpAQCAtMzM1MCwxMCArMzM1Niwx
NCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAg
IAogICAgICAgICBpbnQgcmVzdWx0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIGlm
IChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihy
W1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5qc1ZhbHVlKGV4ZWMpKSkg
eworICAgICAgICAvLyBJZiB0aGlzIGNhbGwgZnJhbWUgY3JlYXRlZCBhbiBhY3RpdmF0aW9uIG9y
IGFyZ3VtZW50cyBvYmplY3QsIHRlYXIgaXQgb2ZmLgorICAgICAgICBpZiAoSlNWYWx1ZSogYWN0
aXZhdGlvbiA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dLmdldEpT
VmFsdWUoKSkgewogICAgICAgICAgICAgQVNTRVJUKCFjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4gfHwgc2NvcGVDaGFpbi0+b2JqZWN0ID09IGFjdGl2YXRpb24pOwotICAgICAgICAgICAg
QVNTRVJUKGFjdGl2YXRpb24tPmlzQWN0aXZhdGlvbk9iamVjdCgpKTsKLSAgICAgICAgICAgIGFj
dGl2YXRpb24tPmNvcHlSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIEFTU0VSVChhY3RpdmF0aW9u
LT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKS0+Y29weVJlZ2lzdGVycygpOworICAgICAgICB9
IGVsc2UgaWYgKEpTVmFsdWUqIGFyZ3VtZW50cyA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFyZ3VtZW50c10uZ2V0SlNWYWx1ZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoYXJndW1l
bnRzLT5pc09iamVjdCgmQXJndW1lbnRzOjppbmZvKSk7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5jb3B5UmVnaXN0ZXJzKCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKQEAgLTM4MTMsMTMgKzM4MjMs
MjIgQEAgSlNWYWx1ZSogTWFjaGluZTo6cmV0cmlldmVBcmd1bWVudHMoRXhlYwogICAgIGlmICgh
Y2FsbEZyYW1lKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0FjdGl2YXRpb24q
IGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihjYWxsRnJhbWVbUmVnaXN0
ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dLmpzVmFsdWUoZXhlYykpOwotICAgIGlm
ICghYWN0aXZhdGlvbikgewotICAgICAgICBhY3RpdmF0aW9uID0gbmV3IChleGVjKSBKU0FjdGl2
YXRpb24oZXhlYywgZnVuY3Rpb24tPm1fYm9keSwgY2FsbEZyYW1lKTsKLSAgICAgICAgY2FsbEZy
YW1lW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXSA9IGFjdGl2YXRpb247
CisgICAgSlNWYWx1ZSogYXJndW1lbnRzID0gY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6T3B0aW9u
YWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKTsKKyAgICBpZiAoYXJndW1lbnRzKSB7Cisg
ICAgICAgIEFTU0VSVChhcmd1bWVudHMtPmlzT2JqZWN0KCZBcmd1bWVudHM6OmluZm8pKTsKKyAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50czsKKyAgICB9CisKKyAgICBKU1ZhbHVlKiBhY3RpdmF0aW9u
ID0gY2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5nZXRK
U1ZhbHVlKCk7CisgICAgaWYgKCFhY3RpdmF0aW9uKQorICAgICAgICBhcmd1bWVudHMgPSBuZXcg
KGV4ZWMpIEFyZ3VtZW50cyhleGVjLCBjYWxsRnJhbWUpOworICAgIGVsc2UgeworICAgICAgICBB
U1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3QoJkpTQWN0aXZhdGlvbjo6aW5mbykpOworICAgICAg
ICBhcmd1bWVudHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCBzdGF0aWNfY2FzdDxKU0Fj
dGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CiAgICAgfQorICAgIGNhbGxGcmFtZVtSZWdpc3RlckZp
bGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IGFyZ3VtZW50czsKIAotICAgIHJldHVybiBh
Y3RpdmF0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyk7Cisg
ICAgcmV0dXJuIGFyZ3VtZW50czsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6cmV0cmlldmVDYWxs
ZXIoRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbikgY29uc3QKQEAg
LTQ0NDksNiArNDQ2OCw3IEBAIHZvaWQqIE1hY2hpbmU6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24o
Q1QKICAgICByW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudF0gPSBhcmdDb3VudDsgLy8gb3Jp
Z2luYWwgYXJndW1lbnQgY291bnQgKGZvciB0aGUgc2FrZSBvZiB0aGUgImFyZ3VtZW50cyIgb2Jq
ZWN0KQogICAgIHJbUmVnaXN0ZXJGaWxlOjpDYWxsZWVdID0gZnVuY1ZhbDsKICAgICByW1JlZ2lz
dGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXSA9IG51bGxKU1ZhbHVlOworICAgIHJb
UmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBudWxsSlNWYWx1ZTsKIAog
ICAgIGV4ZWMtPm1fY2FsbEZyYW1lID0gcjsKICAgICBleGVjLT5tX3Njb3BlQ2hhaW4gPSBjYWxs
RGF0YVNjb3BlQ2hhaW47CkBAIC00NTM4LDYgKzQ1NTgsMTcgQEAgdm9pZCBNYWNoaW5lOjpjdGlf
b3BfcmV0X2FjdGl2YXRpb24oQ1RJXwogICAgIGFjdGl2YXRpb24tPmNvcHlSZWdpc3RlcnMoKTsK
IH0KIAordm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X2FyZ3VtZW50cyhDVElfQVJHUykKK3sKKyAg
ICBSZWdpc3RlciogY2FsbEZyYW1lID0gQVJHX3I7CisKKyAgICBBU1NFUlQoIWNhbGxGcmFtZVtS
ZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKTsKKyAg
ICBKU1ZhbHVlKiBhcmd1bWVudHMgPSBjYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFyZ3VtZW50c10uZ2V0SlNWYWx1ZSgpOworICAgIEFTU0VSVChhcmd1bWVudHMpOworICAg
IEFTU0VSVChhcmd1bWVudHMtPmlzT2JqZWN0KCZBcmd1bWVudHM6OmluZm8pKTsKKyAgICBzdGF0
aWNfY2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5jb3B5UmVnaXN0ZXJzKCk7Cit9CisKIHZv
aWQgTWFjaGluZTo6Y3RpX29wX3JldF9wcm9maWxlcihDVElfQVJHUykKIHsKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBBUkdfZXhlYzsKQEAgLTQ2MzksNiArNDY3MCw3IEBAIHZvaWQqIE1hY2hpbmU6
OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHIKICAgICByW1JlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudF0gPSBhcmdDb3VudDsgLy8gb3JpZ2luYWwgYXJndW1lbnQgY291bnQgKGZvciB0aGUgc2Fr
ZSBvZiB0aGUgImFyZ3VtZW50cyIgb2JqZWN0KQogICAgIHJbUmVnaXN0ZXJGaWxlOjpDYWxsZWVd
ID0gY29uc3RydWN0b3I7CiAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZh
dGlvbl0gPSBudWxsSlNWYWx1ZTsKKyAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVB
cmd1bWVudHNdID0gbnVsbEpTVmFsdWU7CiAKICAgICBleGVjLT5tX2NhbGxGcmFtZSA9IHI7CiAg
ICAgZXhlYy0+bV9zY29wZUNoYWluID0gY2FsbERhdGFTY29wZUNoYWluOwpAQCAtNDY2MSw5ICs0
NjkzLDEwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9jb25zdHJ1Y3RfTm90SlMKICAgICBD
b25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RU
eXBlID0gY29uc3RyVmFsLT5nZXRDb25zdHJ1Y3REYXRhKGNvbnN0cnVjdERhdGEpOwogCi0gICAg
SlNPYmplY3QqIGNvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihjb25zdHJWYWwp
OwotCiAgICAgaWYgKGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZUhvc3QpIHsKKyAgICAg
ICAgQVNTRVJUKGNvbnN0clZhbC0+aXNPYmplY3QoKSk7CisgICAgICAgIEpTT2JqZWN0KiBjb25z
dHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oY29uc3RyVmFsKTsKKwogICAgICAgICBp
ZiAoKkFSR19wcm9maWxlclJlZmVyZW5jZSkKICAgICAgICAgICAgICgqQVJHX3Byb2ZpbGVyUmVm
ZXJlbmNlKS0+d2lsbEV4ZWN1dGUoZXhlYywgY29uc3RydWN0b3IpOwogCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9WTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFj
aGluZS5oCShyZXZpc2lvbiAzNjkwMSkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBzdGF0aWMgdm9pZCogU0ZYX0NBTEwgY3RpX29wX2NhbGxfSlNGdW5jdGlvbihDVElfQVJHUyk7
CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FMTCBjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0
aW9uKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3JldF9h
Y3RpdmF0aW9uKENUSV9BUkdTKTsKKyAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29w
X3JldF9hcmd1bWVudHMoQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBj
dGlfb3BfcmV0X3Byb2ZpbGVyKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NB
TEwgY3RpX29wX3JldF9zY29wZUNoYWluKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTVmFs
dWUqIFNGWF9DQUxMIGN0aV9vcF9uZXdfYXJyYXkoQ1RJX0FSR1MpOwpJbmRleDogSmF2YVNjcmlw
dENvcmUvVk0vUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0v
UmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDM2OTAxKQorKysgSmF2YVNjcmlwdENvcmUvVk0vUmVn
aXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE2ICs5MCwxNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBSZWdpc3RlckZpbGUgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBlbnVtIENhbGxGcmFtZUhlYWRlckVudHJ5IHsKLSAgICAgICAgICAgIENhbGxG
cmFtZUhlYWRlclNpemUgPSA4LAorICAgICAgICAgICAgQ2FsbEZyYW1lSGVhZGVyU2l6ZSA9IDks
CiAKLSAgICAgICAgICAgIENhbGxlckNvZGVCbG9jayA9IC04LAotICAgICAgICAgICAgQ2FsbGVy
U2NvcGVDaGFpbiA9IC03LAotICAgICAgICAgICAgQ2FsbGVyUmVnaXN0ZXJzID0gLTYsCi0gICAg
ICAgICAgICBSZXR1cm5QQyA9IC01LAotICAgICAgICAgICAgUmV0dXJuVmFsdWVSZWdpc3RlciA9
IC00LAotICAgICAgICAgICAgQXJndW1lbnRDb3VudCA9IC0zLAotICAgICAgICAgICAgQ2FsbGVl
ID0gLTIsCi0gICAgICAgICAgICBPcHRpb25hbENhbGxlZUFjdGl2YXRpb24gPSAtMSwKKyAgICAg
ICAgICAgIENhbGxlckNvZGVCbG9jayA9IC05LAorICAgICAgICAgICAgQ2FsbGVyU2NvcGVDaGFp
biA9IC04LAorICAgICAgICAgICAgQ2FsbGVyUmVnaXN0ZXJzID0gLTcsCisgICAgICAgICAgICBS
ZXR1cm5QQyA9IC02LAorICAgICAgICAgICAgUmV0dXJuVmFsdWVSZWdpc3RlciA9IC01LAorICAg
ICAgICAgICAgQXJndW1lbnRDb3VudCA9IC00LAorICAgICAgICAgICAgQ2FsbGVlID0gLTMsCisg
ICAgICAgICAgICBPcHRpb25hbENhbGxlZUFjdGl2YXRpb24gPSAtMiwKKyAgICAgICAgICAgIE9w
dGlvbmFsQ2FsbGVlQXJndW1lbnRzID0gLTEsCiAgICAgICAgIH07CiAKICAgICAgICAgZW51bSB7
IFByb2dyYW1Db2RlVGhpc1JlZ2lzdGVyID0gLUNhbGxGcmFtZUhlYWRlclNpemUgLSAxIH07Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMzY5MDEpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNTMgKzM3LDYg
QEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChBcmd1bWVudHMpOwogCiBjb25zdCBDbGFzc0lu
Zm8gQXJndW1lbnRzOjppbmZvID0geyAiQXJndW1lbnRzIiwgMCwgMCwgMCB9OwogCi1zdHJ1Y3Qg
QXJndW1lbnRzRGF0YSA6IE5vbmNvcHlhYmxlIHsKLSAgICBBcmd1bWVudHNEYXRhKEpTQWN0aXZh
dGlvbiogYWN0aXZhdGlvbiwgdW5zaWduZWQgbnVtUGFyYW1ldGVycywgaW50IGZpcnN0UGFyYW1l
dGVySW5kZXgsIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgSlNGdW5jdGlvbiogY2FsbGVlKQotICAg
ICAgICA6IGFjdGl2YXRpb24oYWN0aXZhdGlvbikKLSAgICAgICAgLCBudW1QYXJhbWV0ZXJzKG51
bVBhcmFtZXRlcnMpCi0gICAgICAgICwgZmlyc3RQYXJhbWV0ZXJJbmRleChmaXJzdFBhcmFtZXRl
ckluZGV4KQotICAgICAgICAsIG51bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwg
ZXh0cmFBcmd1bWVudHMoMCkKLSAgICAgICAgLCBjYWxsZWUoY2FsbGVlKQotICAgICAgICAsIG92
ZXJyb2RlTGVuZ3RoKGZhbHNlKQotICAgICAgICAsIG92ZXJyb2RlQ2FsbGVlKGZhbHNlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb247Ci0KLSAgICB1bnNpZ25l
ZCBudW1QYXJhbWV0ZXJzOwotICAgIGludCBmaXJzdFBhcmFtZXRlckluZGV4OwotICAgIHVuc2ln
bmVkIG51bUFyZ3VtZW50czsKLSAgICBSZWdpc3RlciogZXh0cmFBcmd1bWVudHM7Ci0gICAgT3du
QXJyYXlQdHI8Ym9vbD4gZGVsZXRlZEFyZ3VtZW50czsKLSAgICBSZWdpc3RlciBleHRyYUFyZ3Vt
ZW50c0ZpeGVkQnVmZmVyWzRdOwotCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgIGJvb2wg
b3ZlcnJvZGVMZW5ndGggOiAxOwotICAgIGJvb2wgb3ZlcnJvZGVDYWxsZWUgOiAxOwotfTsKLQot
Ly8gRUNNQSAxMC4xLjgKLUFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNG
dW5jdGlvbiogZnVuY3Rpb24sIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiwgaW50IGZpcnN0UGFy
YW1ldGVySW5kZXgsIFJlZ2lzdGVyKiBhcmd2LCBpbnQgYXJnYykKLSAgICA6IEpTT2JqZWN0KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCi0gICAgLCBk
KG5ldyBBcmd1bWVudHNEYXRhKGFjdGl2YXRpb24sIGZ1bmN0aW9uLT5udW1QYXJhbWV0ZXJzKCks
IGZpcnN0UGFyYW1ldGVySW5kZXgsIGFyZ2MsIGZ1bmN0aW9uKSkKLXsKLSAgICBBU1NFUlQoYWN0
aXZhdGlvbik7Ci0gIAotICAgIGlmIChkLT5udW1Bcmd1bWVudHMgPiBkLT5udW1QYXJhbWV0ZXJz
KSB7Ci0gICAgICAgIHVuc2lnbmVkIG51bUV4dHJhQXJndW1lbnRzID0gZC0+bnVtQXJndW1lbnRz
IC0gZC0+bnVtUGFyYW1ldGVyczsKLSAgICAgICAgUmVnaXN0ZXIqIGV4dHJhQXJndW1lbnRzOwot
ICAgICAgICBpZiAobnVtRXh0cmFBcmd1bWVudHMgPiBzaXplb2YoZC0+ZXh0cmFBcmd1bWVudHNG
aXhlZEJ1ZmZlcikgLyBzaXplb2YoUmVnaXN0ZXIpKQotICAgICAgICAgICAgZXh0cmFBcmd1bWVu
dHMgPSBuZXcgUmVnaXN0ZXJbbnVtRXh0cmFBcmd1bWVudHNdOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBleHRyYUFyZ3VtZW50cyA9IGQtPmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXI7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FeHRyYUFyZ3VtZW50czsgKytpKQot
ICAgICAgICAgICAgZXh0cmFBcmd1bWVudHNbaV0gPSBhcmd2W2QtPm51bVBhcmFtZXRlcnMgKyBp
XTsKLSAgICAgICAgZC0+ZXh0cmFBcmd1bWVudHMgPSBleHRyYUFyZ3VtZW50czsKLSAgICB9Ci19
Ci0KIEFyZ3VtZW50czo6fkFyZ3VtZW50cygpCiB7CiAgICAgaWYgKGQtPmV4dHJhQXJndW1lbnRz
ICE9IGQtPmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXIpCkBAIC0xMTgsMTQgKzcxLDE0IEBAIHZv
aWQgQXJndW1lbnRzOjpmaWxsQXJnTGlzdChFeGVjU3RhdGUqIGUKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChkLT5udW1QYXJhbWV0ZXJzID09IGQtPm51bUFyZ3VtZW50cykgewotICAgICAgICAg
ICAgYXJncy5pbml0aWFsaXplKCZkLT5hY3RpdmF0aW9uLT5yZWdpc3RlckF0KGQtPmZpcnN0UGFy
YW1ldGVySW5kZXgpLCBkLT5udW1Bcmd1bWVudHMpOworICAgICAgICAgICAgYXJncy5pbml0aWFs
aXplKCZkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleF0sIGQtPm51bUFyZ3VtZW50
cyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICB1bnNpZ25lZCBw
YXJhbWV0ZXJzTGVuZ3RoID0gbWluKGQtPm51bVBhcmFtZXRlcnMsIGQtPm51bUFyZ3VtZW50cyk7
CiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwogICAgICAgICBmb3IgKDsgaSA8IHBhcmFtZXRlcnNM
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPmFjdGl2YXRpb24tPnVuY2hl
Y2tlZFN5bWJvbFRhYmxlR2V0VmFsdWUoZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGkpKTsKKyAg
ICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPnJlZ2lzdGVyc1tkLT5maXJzdFBhcmFtZXRlckluZGV4
ICsgaV0uZ2V0SlNWYWx1ZSgpKTsKICAgICAgICAgZm9yICg7IGkgPCBkLT5udW1Bcmd1bWVudHM7
ICsraSkKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5u
dW1QYXJhbWV0ZXJzXS5nZXRKU1ZhbHVlKCkpOwogICAgICAgICByZXR1cm47CkBAIC0xMzUsNyAr
ODgsNyBAQCB2b2lkIEFyZ3VtZW50czo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiBlCiAgICAgdW5z
aWduZWQgaSA9IDA7CiAgICAgZm9yICg7IGkgPCBwYXJhbWV0ZXJzTGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgaWYgKCFkLT5kZWxldGVkQXJndW1lbnRzW2ldKQotICAgICAgICAgICAgYXJncy5hcHBl
bmQoZC0+YWN0aXZhdGlvbi0+dW5jaGVja2VkU3ltYm9sVGFibGVHZXRWYWx1ZShkLT5maXJzdFBh
cmFtZXRlckluZGV4ICsgaSkpOworICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+cmVnaXN0ZXJz
W2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXS5nZXRKU1ZhbHVlKCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwogICAgIH0KQEAgLTE1MSw3
ICsxMDQsNyBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTCiB7CiAg
ICAgaWYgKGkgPCBkLT5udW1Bcmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFk
LT5kZWxldGVkQXJndW1lbnRzW2ldKSkgewogICAgICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRl
cnMpCi0gICAgICAgICAgICBkLT5hY3RpdmF0aW9uLT51bmNoZWNrZWRTeW1ib2xUYWJsZUdldChk
LT5maXJzdFBhcmFtZXRlckluZGV4ICsgaSwgc2xvdCk7CisgICAgICAgICAgICBzbG90LnNldFJl
Z2lzdGVyU2xvdCgmZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZC0+ZXh0cmFBcmd1bWVudHNb
aSAtIGQtPm51bVBhcmFtZXRlcnNdLmdldEpTVmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMTY2LDcgKzExOSw3IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1MKICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgmaXNBcnJh
eUluZGV4KTsKICAgICBpZiAoaXNBcnJheUluZGV4ICYmIGkgPCBkLT5udW1Bcmd1bWVudHMgJiYg
KCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRzW2ldKSkgewogICAg
ICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBkLT5hY3RpdmF0aW9u
LT51bmNoZWNrZWRTeW1ib2xUYWJsZUdldChkLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaSwgc2xv
dCk7CisgICAgICAgICAgICBzbG90LnNldFJlZ2lzdGVyU2xvdCgmZC0+cmVnaXN0ZXJzW2QtPmZp
cnN0UGFyYW1ldGVySW5kZXggKyBpXSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUoZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdLmdldEpTVmFs
dWUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTg5LDcgKzE0Miw3IEBAIHZvaWQgQXJn
dW1lbnRzOjpwdXQoRXhlY1N0YXRlKiBleGVjLCB1bnMKIHsKICAgICBpZiAoaSA8IGQtPm51bUFy
Z3VtZW50cyAmJiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIWQtPmRlbGV0ZWRBcmd1bWVudHNb
aV0pKSB7CiAgICAgICAgIGlmIChpIDwgZC0+bnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgIGQt
PmFjdGl2YXRpb24tPnVuY2hlY2tlZFN5bWJvbFRhYmxlUHV0KGQtPmZpcnN0UGFyYW1ldGVySW5k
ZXggKyBpLCB2YWx1ZSk7CisgICAgICAgICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0
ZXJJbmRleCArIGldID0gdmFsdWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGQtPmV4dHJh
QXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IHZhbHVlOwogICAgICAgICByZXR1cm47
CkBAIC0yMDQsNyArMTU3LDcgQEAgdm9pZCBBcmd1bWVudHM6OnB1dChFeGVjU3RhdGUqIGV4ZWMs
IGNvbgogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUudG9BcnJheUluZGV4KCZpc0FycmF5
SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYgaSA8IGQtPm51bUFyZ3VtZW50cyAmJiAo
IWQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pKSB7CiAgICAg
ICAgIGlmIChpIDwgZC0+bnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgIGQtPmFjdGl2YXRpb24t
PnVuY2hlY2tlZFN5bWJvbFRhYmxlUHV0KGQtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpLCB2YWx1
ZSk7CisgICAgICAgICAgICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGld
ID0gdmFsdWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRzW2kg
LSBkLT5udW1QYXJhbWV0ZXJzXSA9IHZhbHVlOwogICAgICAgICByZXR1cm47CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
a2pzL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAzNjkwMSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9B
cmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTkgKzI0LDM3IEBACiAjaWZuZGVmIEFy
Z3VtZW50c19oCiAjZGVmaW5lIEFyZ3VtZW50c19oCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgor
I2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIk1hY2hpbmUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLSAgICBjbGFzcyBKU0FjdGl2YXRpb247Ci0gICAgY2xhc3MgSlNGdW5jdGlvbjsK
LSAgICBjbGFzcyBSZWdpc3RlcjsKKyAgICBzdHJ1Y3QgQXJndW1lbnRzRGF0YSA6IE5vbmNvcHlh
YmxlIHsKKyAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOworCisgICAgICAgIHVuc2ln
bmVkIG51bVBhcmFtZXRlcnM7CisgICAgICAgIGludCBmaXJzdFBhcmFtZXRlckluZGV4OworICAg
ICAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHM7CisKKyAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVy
czsKKyAgICAgICAgT3duQXJyYXlQdHI8UmVnaXN0ZXI+IHJlZ2lzdGVyQXJyYXk7CisKKyAgICAg
ICAgUmVnaXN0ZXIqIGV4dHJhQXJndW1lbnRzOworICAgICAgICBPd25BcnJheVB0cjxib29sPiBk
ZWxldGVkQXJndW1lbnRzOworICAgICAgICBSZWdpc3RlciBleHRyYUFyZ3VtZW50c0ZpeGVkQnVm
ZmVyWzRdOworCisgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKKyAgICAgICAgYm9vbCBvdmVy
cm9kZUxlbmd0aCA6IDE7CisgICAgICAgIGJvb2wgb3ZlcnJvZGVDYWxsZWUgOiAxOworICAgIH07
CiAKLSAgICBzdHJ1Y3QgQXJndW1lbnRzRGF0YTsKIAogICAgIGNsYXNzIEFyZ3VtZW50cyA6IHB1
YmxpYyBKU09iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBBcmd1bWVudHMoRXhlY1N0YXRl
KiwgSlNGdW5jdGlvbiosIEpTQWN0aXZhdGlvbiosIGludCBmaXJzdEFyZ3VtZW50SW5kZXgsIFJl
Z2lzdGVyKiBhcmd2LCBpbnQgYXJnYyk7CisgICAgICAgIEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBS
ZWdpc3RlciogY2FsbEZyYW1lKTsKKyAgICAgICAgQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQWN0
aXZhdGlvbiopOwogICAgICAgICB2aXJ0dWFsIH5Bcmd1bWVudHMoKTsKIAogICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkBAIC00NSw2ICs2Myw5IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZvaWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgQXJnTGlzdCYpOwogCisg
ICAgICAgIHZvaWQgY29weVJlZ2lzdGVycygpOworICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhS
ZWdpc3RlciogcmVnaXN0ZXJzKSB7IGQtPnJlZ2lzdGVycyA9IHJlZ2lzdGVyczsgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC01NSw5ICs3NiwxMDQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAKKyAgICAgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSos
IFJlZ2lzdGVyKiBjYWxsRnJhbWUpOworCiAgICAgICAgIE93blB0cjxBcmd1bWVudHNEYXRhPiBk
OwogICAgIH07CiAKKyAgICBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmluaXQoRXhlY1N0YXRlKiBl
eGVjLCBSZWdpc3RlciogY2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgSlNGdW5jdGlvbiogY2Fs
bGVlOworICAgICAgICBpbnQgZmlyc3RQYXJhbWV0ZXJJbmRleDsKKyAgICAgICAgUmVnaXN0ZXIq
IGFyZ3Y7CisgICAgICAgIGludCBudW1Bcmd1bWVudHM7CisgICAgICAgIGV4ZWMtPm1hY2hpbmUo
KS0+Z2V0QXJndW1lbnRzRGF0YShjYWxsRnJhbWUsIGNhbGxlZSwgZmlyc3RQYXJhbWV0ZXJJbmRl
eCwgYXJndiwgbnVtQXJndW1lbnRzKTsKKworICAgICAgICBkLT5udW1QYXJhbWV0ZXJzID0gY2Fs
bGVlLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgICAgIGQtPmZpcnN0UGFyYW1ldGVySW5kZXggPSBm
aXJzdFBhcmFtZXRlckluZGV4OworICAgICAgICBkLT5udW1Bcmd1bWVudHMgPSBudW1Bcmd1bWVu
dHM7CisKKyAgICAgICAgZC0+cmVnaXN0ZXJzID0gY2FsbEZyYW1lOworCisgICAgICAgIFJlZ2lz
dGVyKiBleHRyYUFyZ3VtZW50czsKKyAgICAgICAgaWYgKGQtPm51bUFyZ3VtZW50cyA8PSBkLT5u
dW1QYXJhbWV0ZXJzKQorICAgICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSAwOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUV4dHJhQXJndW1lbnRzID0gZC0+bnVtQXJn
dW1lbnRzIC0gZC0+bnVtUGFyYW1ldGVyczsKKyAgICAgICAgICAgIGlmIChudW1FeHRyYUFyZ3Vt
ZW50cyA+IHNpemVvZihkLT5leHRyYUFyZ3VtZW50c0ZpeGVkQnVmZmVyKSAvIHNpemVvZihSZWdp
c3RlcikpCisgICAgICAgICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSBuZXcgUmVnaXN0ZXJbbnVt
RXh0cmFBcmd1bWVudHNdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4dHJh
QXJndW1lbnRzID0gZC0+ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcjsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1FeHRyYUFyZ3VtZW50czsgKytpKQorICAgICAgICAg
ICAgICAgIGV4dHJhQXJndW1lbnRzW2ldID0gYXJndltkLT5udW1QYXJhbWV0ZXJzICsgaV07Cisg
ICAgICAgIH0KKworICAgICAgICBkLT5leHRyYUFyZ3VtZW50cyA9IGV4dHJhQXJndW1lbnRzOwor
CisgICAgICAgIGQtPmNhbGxlZSA9IGNhbGxlZTsKKyAgICAgICAgZC0+b3ZlcnJvZGVMZW5ndGgg
PSBmYWxzZTsKKyAgICAgICAgZC0+b3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBpbmxpbmUgQXJndW1lbnRzOjpBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciog
Y2FsbEZyYW1lKQorICAgICAgICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCisgICAgICAgICwgZChuZXcgQXJndW1lbnRzRGF0YSkK
KyAgICB7CisgICAgICAgIGQtPmFjdGl2YXRpb24gPSAwOworICAgICAgICBpbml0KGV4ZWMsIGNh
bGxGcmFtZSk7CisgICAgfQorCisgICAgaW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNT
dGF0ZSogZXhlYywgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uKQorICAgICAgICA6IEpTT2JqZWN0
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCisgICAg
ICAgICwgZChuZXcgQXJndW1lbnRzRGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VSVChhY3RpdmF0
aW9uKTsKKyAgICAgICAgZC0+YWN0aXZhdGlvbiA9IGFjdGl2YXRpb247CisgICAgICAgIGluaXQo
ZXhlYywgJmFjdGl2YXRpb24tPnJlZ2lzdGVyQXQoMCkpOworICAgIH0KKworICAgIGlubGluZSB2
b2lkIEFyZ3VtZW50czo6Y29weVJlZ2lzdGVycygpCisgICAgeworICAgICAgICBBU1NFUlQoIWQt
PmFjdGl2YXRpb24pOworICAgICAgICBBU1NFUlQoIWQtPnJlZ2lzdGVyQXJyYXkpOworCisgICAg
ICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0gZC0+Y2FsbGVlLT5tX2JvZHktPmdl
bmVyYXRlZEJ5dGVDb2RlKCkubnVtUGFyYW1ldGVycyAtIDE7CisgICAgICAgIHNpemVfdCBudW1W
YXJzID0gZC0+Y2FsbGVlLT5tX2JvZHktPmdlbmVyYXRlZEJ5dGVDb2RlKCkubnVtVmFyczsKKyAg
ICAgICAgc2l6ZV90IG51bUxvY2FscyA9IG51bVZhcnMgKyBudW1QYXJhbWV0ZXJzTWludXNUaGlz
OworCisgICAgICAgIGlmICghbnVtTG9jYWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IG51bVBhcmFtZXRlcnNNaW51c1RoaXMgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5
U2l6ZSA9IG51bUxvY2FscyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKwor
ICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSA9IG5ldyBSZWdpc3RlcltyZWdpc3RlckFy
cmF5U2l6ZV07CisgICAgICAgIG1lbWNweShyZWdpc3RlckFycmF5LCBkLT5yZWdpc3RlcnMgLSBy
ZWdpc3Rlck9mZnNldCwgcmVnaXN0ZXJBcnJheVNpemUgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAg
ICAgICAgZC0+cmVnaXN0ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJl
Z2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkgKyByZWdpc3Rlck9mZnNldDsKKyAgICB9CisKKyAgICAv
LyBUaGlzIEpTQWN0aXZhdGlvbiBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgc28gaXQgY2FuIGdl
dCBhdCBBcmd1bWVudHM6OnNldFJlZ2lzdGVycy4KKyAgICBpbmxpbmUgdm9pZCBKU0FjdGl2YXRp
b246OmNvcHlSZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFkKCktPnJlZ2lzdGVy
QXJyYXkpOworCisgICAgICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0gZCgpLT5m
dW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVDb2RlKCkubnVtUGFyYW1ldGVycyAtIDE7CisgICAg
ICAgIHNpemVfdCBudW1WYXJzID0gZCgpLT5mdW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVDb2Rl
KCkubnVtVmFyczsKKyAgICAgICAgc2l6ZV90IG51bUxvY2FscyA9IG51bVZhcnMgKyBudW1QYXJh
bWV0ZXJzTWludXNUaGlzOworCisgICAgICAgIGlmICghbnVtTG9jYWxzKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IG51bVBhcmFtZXRlcnNNaW51
c1RoaXMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgIHNpemVf
dCByZWdpc3RlckFycmF5U2l6ZSA9IG51bUxvY2FscyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKKworICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSA9IGNvcHlSZWdp
c3RlckFycmF5KGQoKS0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVyQXJyYXlT
aXplKTsKKyAgICAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVyQXJyYXkgKyByZWdpc3Rlck9mZnNl
dCwgcmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGlmIChhcmd1bWVudHMoKSkKKyAgICAgICAgICAg
IGFyZ3VtZW50cygpLT5zZXRSZWdpc3RlcnMocmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zmc2V0
KTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQXJndW1lbnRzX2gK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAzNjkwMSkKKysr
IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDksMTEgKzE0OSw2IEBAIEpTT2JqZWN0KiBKU0FjdGl2YXRpb246OnRvVGhpc09iamVjdChFeGUK
ICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsVGhpc1ZhbHVlKCk7CiB9CiAKLWJvb2wgSlNBY3RpdmF0
aW9uOjppc0FjdGl2YXRpb25PYmplY3QoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQot
CiBib29sIEpTQWN0aXZhdGlvbjo6aXNEeW5hbWljU2NvcGUoKSBjb25zdAogewogICAgIHJldHVy
biBkKCktPmZ1bmN0aW9uQm9keS0+dXNlc0V2YWwoKTsKQEAgLTE3OCwxMyArMTczLDcgQEAgUHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgSlNBY3RpdmF0aW9uOgogCiBBcmd1bWVudHMqIEpTQWN0
aXZhdGlvbjo6Y3JlYXRlQXJndW1lbnRzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbjsKLSAgICBSZWdpc3RlciogYXJndjsKLSAgICBpbnQgYXJnYzsK
LSAgICBpbnQgZmlyc3RQYXJhbWV0ZXJJbmRleDsKLSAgICBleGVjLT5tYWNoaW5lKCktPmdldEFy
Z3VtZW50c0RhdGEoZCgpLT5yZWdpc3RlcnMsIGZ1bmN0aW9uLCBmaXJzdFBhcmFtZXRlckluZGV4
LCBhcmd2LCBhcmdjKTsKLQotICAgIHJldHVybiBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCBm
dW5jdGlvbiwgdGhpcywgZmlyc3RQYXJhbWV0ZXJJbmRleCwgYXJndiwgYXJnYyk7CisgICAgcmV0
dXJuIG5ldyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDM2OTAxKQor
KysgSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMiArNDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBY3RpdmF0aW9uIDog
cHVibGljIEpTVmFyaWFibGVPYmplY3QgewogICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmpl
Y3QgQmFzZTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4sIFJlZ2lzdGVyKik7CisgICAgICAgIEpT
QWN0aXZhdGlvbihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+LCBSZWdp
c3RlciopOwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsKLSAgICAgICAgCisKICAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNBY3Rp
dmF0aW9uT2JqZWN0KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0R5bmFtaWNTY29w
ZSgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwpAQCAtODAsMTYgKzc5
LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0
IENsYXNzSW5mbyBpbmZvOwogCisgICAgICAgIEFyZ3VtZW50cyogYXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gZCgpLT5hcmd1bWVudHNPYmplY3Q7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAg
IHN0cnVjdCBKU0FjdGl2YXRpb25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3REYXRhIHsK
LSAgICAgICAgICAgIEpTQWN0aXZhdGlvbkRhdGEoUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBmdW5jdGlvbkJvZHlfLCBSZWdpc3RlciogcmVnaXN0ZXJzKQotICAgICAgICAgICAgICAgIDog
SlNWYXJpYWJsZU9iamVjdERhdGEoJmZ1bmN0aW9uQm9keV8tPnN5bWJvbFRhYmxlKCksIHJlZ2lz
dGVycykKLSAgICAgICAgICAgICAgICAsIGZ1bmN0aW9uQm9keShmdW5jdGlvbkJvZHlfKQorICAg
ICAgICAgICAgSlNBY3RpdmF0aW9uRGF0YShQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1
bmN0aW9uQm9keSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICA6IEpTVmFy
aWFibGVPYmplY3REYXRhKCZmdW5jdGlvbkJvZHktPnN5bWJvbFRhYmxlKCksIHJlZ2lzdGVycykK
KyAgICAgICAgICAgICAgICAsIGZ1bmN0aW9uQm9keShmdW5jdGlvbkJvZHkpCiAgICAgICAgICAg
ICAgICAgLCBhcmd1bWVudHNPYmplY3QoMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keTsgLy8g
T3ducyB0aGUgc3ltYm9sIHRhYmxlIGFuZCBjb2RlIGJsb2NrCisgICAgICAgICAgICBSZWZQdHI8
RnVuY3Rpb25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5OwogICAgICAgICAgICAgQXJndW1lbnRzKiBh
cmd1bWVudHNPYmplY3Q7CiAgICAgICAgIH07CiAgICAgICAgIApAQCAtMTAwLDI0ICsxMDEsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNBY3RpdmF0aW9uRGF0YSogZCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbkRhdGEqPihKU1ZhcmlhYmxlT2JqZWN0Ojpk
KTsgfQogICAgIH07CiAgICAgCi0gICAgaW5saW5lIHZvaWQgSlNBY3RpdmF0aW9uOjpjb3B5UmVn
aXN0ZXJzKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghZCgpLT5yZWdpc3RlckFycmF5KTsKLQot
ICAgICAgICBzaXplX3QgbnVtUGFyYW1ldGVyc01pbnVzVGhpcyA9IGQoKS0+ZnVuY3Rpb25Cb2R5
LT5nZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVBhcmFtZXRlcnMgLSAxOwotICAgICAgICBzaXplX3Qg
bnVtVmFycyA9IGQoKS0+ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVZhcnM7
Ci0gICAgICAgIHNpemVfdCBudW1Mb2NhbHMgPSBudW1WYXJzICsgbnVtUGFyYW1ldGVyc01pbnVz
VGhpczsKLQotICAgICAgICBpZiAoIW51bUxvY2FscykKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBudW1QYXJhbWV0ZXJzTWludXNUaGlzICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotICAgICAgICBzaXplX3QgcmVnaXN0ZXJB
cnJheVNpemUgPSBudW1Mb2NhbHMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7
Ci0KLSAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkgPSBjb3B5UmVnaXN0ZXJBcnJheShk
KCktPnJlZ2lzdGVycyAtIHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFycmF5U2l6ZSk7Ci0gICAg
ICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlckFycmF5ICsgcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVy
QXJyYXkpOwotICAgIH0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0FjdGl2
YXRpb25faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23933</attachid>
            <date>2008-09-30 00:45:50 -0700</date>
            <delta_ts>2008-09-30 22:21:58 -0700</delta_ts>
            <desc>Patch in progress</desc>
            <filename>arguments.diff</filename>
            <type>text/plain</type>
            <size>26137</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzcw
ODkpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDYgKzExODksMTQgQEAg
dm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIGFuIGFjdGl2YXRpb24gLSBpZiB0aGVyZSBpcyBvbmUsIGp1bXAgdG8gdGhlIGhvb2sgYmVs
b3cuCiAgICAgICAgICAgICBtX2ppdC5jbXBsX2kzMm0oMCwgUmVnaXN0ZXJGaWxlOjpPcHRpb25h
bENhbGxlZUFjdGl2YXRpb24gKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBY
ODY6OmVkaSk7CiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcFNyYyBhY3RpdmF0aW9uID0g
bV9qaXQuZW1pdFVubGlua2VkSm5lKCk7CisKKyAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1w
U3JjIGFyZ3VtZW50czsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cykgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBhcmd1bWVudHMgLSBpZiB0aGVyZSBp
cyBvbmUsIGp1bXAgdG8gdGhlIGhvb2sgYmVsb3cuCisgICAgICAgICAgICAgICAgbV9qaXQuY21w
bF9pMzJtKDAsIFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisgICAgICAgICAgICAgICAg
YXJndW1lbnRzID0gbV9qaXQuZW1pdFVubGlua2VkSm5lKCk7ICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICBYODZBc3NlbWJsZXI6OkptcERzdCBhY3RpdmF0ZWQg
PSBtX2ppdC5sYWJlbCgpOwogCiAgICAgICAgICAgICAvLyBDaGVjayBmb3IgYSBwcm9maWxlciAt
IGlmIHRoZXJlIGlzIG9uZSwganVtcCB0byB0aGUgaG9vayBiZWxvdy4KQEAgLTEyMTksOSArMTIy
NywxNiBAQCB2b2lkIENUSTo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgICAg
IC8vIEFjdGl2YXRpb24gaG9vawogICAgICAgICAgICAgbV9qaXQubGluayhhY3RpdmF0aW9uLCBt
X2ppdC5sYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9y
ZXRfYWN0aXZhdGlvbik7CisgICAgICAgICAgICBlbWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3Bf
cmV0X2FjdGl2YXRpb25fYXJndW1lbnRzKTsKICAgICAgICAgICAgIG1faml0LmxpbmsobV9qaXQu
ZW1pdFVubGlua2VkSm1wKCksIGFjdGl2YXRlZCk7CiAKKyAgICAgICAgICAgIGlmIChtX2NvZGVC
bG9jay0+dXNlc0FyZ3VtZW50cykgeworICAgICAgICAgICAgICAgIC8vIEFyZ3VtZW50cyBob29r
CisgICAgICAgICAgICAgICAgbV9qaXQubGluayhhcmd1bWVudHMsIG1faml0LmxhYmVsKCkpOwor
ICAgICAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9yZXRfYWN0aXZhdGlv
bl9hcmd1bWVudHMpOworICAgICAgICAgICAgICAgIG1faml0LmxpbmsobV9qaXQuZW1pdFVubGlu
a2VkSm1wKCksIGFjdGl2YXRlZCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFBy
b2ZpbGluZyBob29rCiAgICAgICAgICAgICBtX2ppdC5saW5rKHByb2ZpbGUsIG1faml0LmxhYmVs
KCkpOwogICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3RpX29wX3JldF9wcm9maWxl
cik7CkluZGV4OiBWTS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMzcwODkpCisrKyBWTS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjQx
LDYgKzI0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyOwog
ICAgICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW47CiAgICAgICAgIGJvb2wgdXNlc0V2YWw7
CisgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50czsKICAgICAgICAgQ29kZVR5cGUgY29kZVR5cGU7
CiAgICAgICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlOwogICAgICAgICB1bnNpZ25l
ZCBzb3VyY2VPZmZzZXQ7CkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzcwODkpCisrKyBWTS9Db2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDkgKzMxNCw5IEBAIENvZGVHZW5lcmF0b3I6
OkNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2QKICAgICAgICAgYWRkVmFyKGlkZW50LCB2YXJTdGFj
a1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCk7CiAgICAgfQogCisg
ICAgbV9jb2RlQmxvY2stPnVzZXNBcmd1bWVudHMgPSB1c2VzQXJndW1lbnRzOwogICAgIGlmICh1
c2VzQXJndW1lbnRzKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfaW5pdF9hcmd1bWVudHMpOwot
ICAgICAgICBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiA9IHRydWU7CiAgICAgICAg
IG1fYXJndW1lbnRzUmVnaXN0ZXIuc2V0SW5kZXgoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxl
ZUFyZ3VtZW50cyk7CiAgICAgICAgIHN5bWJvbFRhYmxlLT5hZGQocHJvcGVydHlOYW1lcygpLmFy
Z3VtZW50cy51c3RyaW5nKCkucmVwKCksIFN5bWJvbFRhYmxlRW50cnkoUmVnaXN0ZXJGaWxlOjpP
cHRpb25hbENhbGxlZUFyZ3VtZW50cykpOwogICAgIH0KSW5kZXg6IFZNL01hY2hpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzNzA4OSkKKysrIFZNL01hY2hp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODQsMTAgKzc4NCwxMyBAQCBORVZFUl9JTkxJTkUg
Ym9vbCBNYWNoaW5lOjp1bndpbmRDYWxsRnJhCiAgICAgaWYgKG9sZENvZGVCbG9jay0+bmVlZHNG
dWxsU2NvcGVDaGFpbikKICAgICAgICAgc2NvcGVDaGFpbi0+ZGVyZWYoKTsKIAotICAgIC8vIElm
IHRoaXMgY2FsbCBmcmFtZSBjcmVhdGVkIGFuIGFjdGl2YXRpb24sIHRlYXIgaXQgb2ZmLgotICAg
IGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24q
PihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5qc1ZhbHVlKGV4ZWMp
KSkgeworICAgIC8vIElmIHRoaXMgY2FsbCBmcmFtZSBjcmVhdGVkIGFuIGFjdGl2YXRpb24gb3Ig
YW4gJ2FyZ3VtZW50cycgb2JqZWN0LCB0ZWFyIGl0IG9mZi4KKyAgICBpZiAoSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKSkgewogICAgICAgICBBU1NF
UlQoYWN0aXZhdGlvbi0+aXNPYmplY3QoJkpTQWN0aXZhdGlvbjo6aW5mbykpOwotICAgICAgICBh
Y3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgICAgIGFjdGl2YXRpb24tPmNvcHlSZWdp
c3RlcnMocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVl
KCkpOworICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogYXJndW1lbnRzID0gcltSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpIHsKKyAgICAgICAgaWYgKGFy
Z3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5mbykpCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5jb3B5UmVnaXN0ZXJzKCk7CiAgICAgfQogICAg
IAogICAgIHZvaWQqIHJldHVyblBDID0gcltSZWdpc3RlckZpbGU6OlJldHVyblBDXS52KCk7CkBA
IC0zMzQzLDEwICszMzQ2LDE0IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4
ZWN1dGkKICAgICAgICAgICAgCiAgICAgICAgIGludCByZXN1bHQgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7CiAKLSAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IHN0YXRpY19jYXN0
PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25d
LmpzVmFsdWUoZXhlYykpKSB7CisgICAgICAgIC8vIElmIHRoaXMgY2FsbCBmcmFtZSBjcmVhdGVk
IGFuIGFjdGl2YXRpb24gb3IgYW4gJ2FyZ3VtZW50cycgb2JqZWN0LCB0ZWFyIGl0IG9mZi4KKyAg
ICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IHN0YXRpY19jYXN0PEpTQWN0aXZh
dGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dLmdldEpTVmFs
dWUoKSkpIHsKICAgICAgICAgICAgIEFTU0VSVCghY29kZUJsb2NrKHIpLT5uZWVkc0Z1bGxTY29w
ZUNoYWluIHx8IHNjb3BlQ2hhaW4ociktPm9iamVjdCA9PSBhY3RpdmF0aW9uKTsKICAgICAgICAg
ICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7Ci0g
ICAgICAgICAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhY3Rp
dmF0aW9uLT5jb3B5UmVnaXN0ZXJzKHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3Vt
ZW50c10uZ2V0SlNWYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlKiBhcmd1bWVu
dHMgPSByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUo
KSkgeworICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5m
bykpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4oYXJndW1lbnRzKS0+
Y29weVJlZ2lzdGVycygpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UpCkBAIC0zNDAwLDggKzM0MDcsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CiAgICAgQkVH
SU5fT1BDT0RFKG9wX2luaXRfYXJndW1lbnRzKSB7Ci0gICAgICAgIEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRp
b25hbENhbGxlZUFjdGl2YXRpb25dLmdldEpTVmFsdWUoKSk7Ci0gICAgICAgIHJbUmVnaXN0ZXJG
aWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBhY3RpdmF0aW9uLT5jcmVhdGVBcmd1bWVu
dHNPYmplY3QoZXhlYyk7CisgICAgICAgIEpTVmFsdWUqIGFjdGl2YXRpb24gPSByW1JlZ2lzdGVy
RmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5nZXRKU1ZhbHVlKCk7CisgICAgICAgIGlm
IChhY3RpdmF0aW9uKSB7CisgICAgICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3Qo
JkpTQWN0aXZhdGlvbjo6aW5mbykpOworICAgICAgICAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQXJndW1lbnRzXSA9IG5ldyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHN0YXRpY19j
YXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24pKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gbmV3IChleGVj
KSBBcmd1bWVudHMoZXhlYywgcik7CisgICAgICAgIAogICAgICAgICArK3ZQQzsKICAgICAgICAg
TkVYVF9PUENPREU7CiAgICAgfQpAQCAtMzgzMSwxNSArMzg0MywxNiBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpyZXRyaWV2ZUFyZ3VtZW50cyhFeGVjCiAgICAgaWYgKCFyKQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PEFyZ3Vt
ZW50cyo+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10uanNWYWx1ZShl
eGVjKSk7CisgICAgSlNWYWx1ZSogYXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4o
cltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpOwog
ICAgIGlmICghYXJndW1lbnRzKSB7CiAgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxl
ZUFjdGl2YXRpb25dLmdldEpTVmFsdWUoKSk7Ci0gICAgICAgIGlmICghYWN0aXZhdGlvbikgewot
ICAgICAgICAgICAgYWN0aXZhdGlvbiA9IG5ldyAoZXhlYykgSlNBY3RpdmF0aW9uKGV4ZWMsIGZ1
bmN0aW9uLT5tX2JvZHksIHIpOwotICAgICAgICAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFs
Q2FsbGVlQWN0aXZhdGlvbl0gPSBhY3RpdmF0aW9uOworICAgICAgICBpZiAoIWFjdGl2YXRpb24p
CisgICAgICAgICAgICBhcmd1bWVudHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCByKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3Qo
JkpTQWN0aXZhdGlvbjo6aW5mbykpOworICAgICAgICAgICAgYXJndW1lbnRzID0gbmV3IChleGVj
KSBBcmd1bWVudHMoZXhlYywgc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikp
OwogICAgICAgICB9CiAKLSAgICAgICAgYXJndW1lbnRzID0gYWN0aXZhdGlvbi0+Y3JlYXRlQXJn
dW1lbnRzT2JqZWN0KGV4ZWMpOwogICAgICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBcmd1bWVudHNdID0gYXJndW1lbnRzOwogICAgIH0KIApAQCAtNDU4NCwyMSArNDU5NywyOCBA
QCB2b2lkIE1hY2hpbmU6OmN0aV9vcF9pbml0X2FyZ3VtZW50cyhDVElfCiB7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gQVJHX2V4ZWM7CiAgICAgUmVnaXN0ZXIqIHIgPSBBUkdfcjsKLSAgICBKU0Fj
dGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihyW1JlZ2lz
dGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5nZXRKU1ZhbHVlKCkpOwotICAgIHJb
UmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBhY3RpdmF0aW9uLT5jcmVh
dGVBcmd1bWVudHNPYmplY3QoZXhlYyk7CisKKyAgICBKU1ZhbHVlKiBhY3RpdmF0aW9uID0gcltS
ZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpOworICAg
IGlmIChhY3RpdmF0aW9uKSB7CisgICAgICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc09iamVjdCgm
SlNBY3RpdmF0aW9uOjppbmZvKSk7CisgICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFyZ3VtZW50c10gPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCBzdGF0aWNfY2FzdDxK
U0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CisgICAgfSBlbHNlCisgICAgICAgIHJbUmVnaXN0
ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhl
eGVjLCByKTsKIH0KIAotdm9pZCBNYWNoaW5lOjpjdGlfb3BfcmV0X2FjdGl2YXRpb24oQ1RJX0FS
R1MpCit2b2lkIE1hY2hpbmU6OmN0aV9vcF9yZXRfYWN0aXZhdGlvbl9hcmd1bWVudHMoQ1RJX0FS
R1MpCiB7Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gQVJHX2V4ZWM7CiAgICAgUmVnaXN0ZXIqIHIg
PSBBUkdfcjsKIAotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IHN0YXRpY19jYXN0PEpT
QWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25dLmpz
VmFsdWUoZXhlYykpOwotICAgIEFTU0VSVChhY3RpdmF0aW9uKTsKLQotICAgIEFTU0VSVCghY29k
ZUJsb2NrKHIpLT5uZWVkc0Z1bGxTY29wZUNoYWluIHx8IHNjb3BlQ2hhaW4ociktPm9iamVjdCA9
PSBhY3RpdmF0aW9uKTsKLSAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3QoJkpTQWN0aXZh
dGlvbjo6aW5mbykpOwotICAgIGFjdGl2YXRpb24tPmNvcHlSZWdpc3RlcnMoKTsKKyAgICAvLyBJ
ZiB0aGlzIGNhbGwgZnJhbWUgY3JlYXRlZCBhbiBhY3RpdmF0aW9uIG9yIGFuICdhcmd1bWVudHMn
IG9iamVjdCwgdGVhciBpdCBvZmYuCisgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxl
ZUFjdGl2YXRpb25dLmdldEpTVmFsdWUoKSkpIHsKKyAgICAgICAgQVNTRVJUKCFjb2RlQmxvY2so
ciktPm5lZWRzRnVsbFNjb3BlQ2hhaW4gfHwgc2NvcGVDaGFpbihyKS0+b2JqZWN0ID09IGFjdGl2
YXRpb24pOworICAgICAgICBBU1NFUlQoYWN0aXZhdGlvbi0+aXNPYmplY3QoJkpTQWN0aXZhdGlv
bjo6aW5mbykpOworICAgICAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKHJbUmVnaXN0ZXJG
aWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10uZ2V0SlNWYWx1ZSgpKTsKKyAgICB9IGVsc2Ug
aWYgKEpTVmFsdWUqIGFyZ3VtZW50cyA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFy
Z3VtZW50c10uZ2V0SlNWYWx1ZSgpKSB7CisgICAgICAgIGlmIChhcmd1bWVudHMtPmlzT2JqZWN0
KCZBcmd1bWVudHM6OmluZm8pKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4o
YXJndW1lbnRzKS0+Y29weVJlZ2lzdGVycygpOworICAgIH0KIH0KIAogdm9pZCBNYWNoaW5lOjpj
dGlfb3BfcmV0X3Byb2ZpbGVyKENUSV9BUkdTKQpJbmRleDogVk0vTWFjaGluZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFZNL01hY2hpbmUuaAkocmV2aXNpb24gMzcwODkpCisrKyBWTS9NYWNoaW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
c3RhdGljIHZvaWQqIFNGWF9DQUxMIGN0aV9vcF9jYWxsX0pTRnVuY3Rpb24oQ1RJX0FSR1MpOwog
ICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwgY3RpX29wX2NhbGxfTm90SlNGdW5jdGlv
bihDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9pbml0X2Fy
Z3VtZW50cyhDVElfQVJHUyk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9y
ZXRfYWN0aXZhdGlvbihDVElfQVJHUyk7CisgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0
aV9vcF9yZXRfYWN0aXZhdGlvbl9hcmd1bWVudHMoQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMg
dm9pZCBTRlhfQ0FMTCBjdGlfb3BfcmV0X3Byb2ZpbGVyKENUSV9BUkdTKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3JldF9zY29wZUNoYWluKENUSV9BUkdTKTsKICAgICAg
ICAgc3RhdGljIEpTVmFsdWUqIFNGWF9DQUxMIGN0aV9vcF9uZXdfYXJyYXkoQ1RJX0FSR1MpOwpJ
bmRleDoga2pzL0FyZ3VtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0FyZ3VtZW50cy5jcHAJ
KHJldmlzaW9uIDM3MDg5KQorKysga2pzL0FyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDUzICszNyw2IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoQXJndW1lbnRzKTsKIAog
Y29uc3QgQ2xhc3NJbmZvIEFyZ3VtZW50czo6aW5mbyA9IHsgIkFyZ3VtZW50cyIsIDAsIDAsIDAg
fTsKIAotc3RydWN0IEFyZ3VtZW50c0RhdGEgOiBOb25jb3B5YWJsZSB7Ci0gICAgQXJndW1lbnRz
RGF0YShKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24sIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMsIGlu
dCBmaXJzdFBhcmFtZXRlckluZGV4LCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIEpTRnVuY3Rpb24q
IGNhbGxlZSkKLSAgICAgICAgOiBhY3RpdmF0aW9uKGFjdGl2YXRpb24pCi0gICAgICAgICwgbnVt
UGFyYW1ldGVycyhudW1QYXJhbWV0ZXJzKQotICAgICAgICAsIGZpcnN0UGFyYW1ldGVySW5kZXgo
Zmlyc3RQYXJhbWV0ZXJJbmRleCkKLSAgICAgICAgLCBudW1Bcmd1bWVudHMobnVtQXJndW1lbnRz
KQotICAgICAgICAsIGV4dHJhQXJndW1lbnRzKDApCi0gICAgICAgICwgY2FsbGVlKGNhbGxlZSkK
LSAgICAgICAgLCBvdmVycm9kZUxlbmd0aChmYWxzZSkKLSAgICAgICAgLCBvdmVycm9kZUNhbGxl
ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOwot
Ci0gICAgdW5zaWduZWQgbnVtUGFyYW1ldGVyczsKLSAgICBpbnQgZmlyc3RQYXJhbWV0ZXJJbmRl
eDsKLSAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHM7Ci0gICAgUmVnaXN0ZXIqIGV4dHJhQXJndW1l
bnRzOwotICAgIE93bkFycmF5UHRyPGJvb2w+IGRlbGV0ZWRBcmd1bWVudHM7Ci0gICAgUmVnaXN0
ZXIgZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcls0XTsKLQotICAgIEpTRnVuY3Rpb24qIGNhbGxl
ZTsKLSAgICBib29sIG92ZXJyb2RlTGVuZ3RoIDogMTsKLSAgICBib29sIG92ZXJyb2RlQ2FsbGVl
IDogMTsKLX07Ci0KLS8vIEVDTUEgMTAuMS44Ci1Bcmd1bWVudHM6OkFyZ3VtZW50cyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24s
IGludCBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MpCi0gICAg
OiBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVy
ZSgpKQotICAgICwgZChuZXcgQXJndW1lbnRzRGF0YShhY3RpdmF0aW9uLCBmdW5jdGlvbi0+bnVt
UGFyYW1ldGVycygpLCBmaXJzdFBhcmFtZXRlckluZGV4LCBhcmdjLCBmdW5jdGlvbikpCi17Ci0g
ICAgQVNTRVJUKGFjdGl2YXRpb24pOwotICAKLSAgICBpZiAoZC0+bnVtQXJndW1lbnRzID4gZC0+
bnVtUGFyYW1ldGVycykgewotICAgICAgICB1bnNpZ25lZCBudW1FeHRyYUFyZ3VtZW50cyA9IGQt
Pm51bUFyZ3VtZW50cyAtIGQtPm51bVBhcmFtZXRlcnM7Ci0gICAgICAgIFJlZ2lzdGVyKiBleHRy
YUFyZ3VtZW50czsKLSAgICAgICAgaWYgKG51bUV4dHJhQXJndW1lbnRzID4gc2l6ZW9mKGQtPmV4
dHJhQXJndW1lbnRzRml4ZWRCdWZmZXIpIC8gc2l6ZW9mKFJlZ2lzdGVyKSkKLSAgICAgICAgICAg
IGV4dHJhQXJndW1lbnRzID0gbmV3IFJlZ2lzdGVyW251bUV4dHJhQXJndW1lbnRzXTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSBkLT5leHRyYUFyZ3VtZW50c0Zp
eGVkQnVmZmVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmd1
bWVudHM7ICsraSkKLSAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzW2ldID0gYXJndltkLT5udW1Q
YXJhbWV0ZXJzICsgaV07Ci0gICAgICAgIGQtPmV4dHJhQXJndW1lbnRzID0gZXh0cmFBcmd1bWVu
dHM7Ci0gICAgfQotfQotCiBBcmd1bWVudHM6On5Bcmd1bWVudHMoKQogewogICAgIGlmIChkLT5l
eHRyYUFyZ3VtZW50cyAhPSBkLT5leHRyYUFyZ3VtZW50c0ZpeGVkQnVmZmVyKQpAQCAtOTQsNiAr
NDcsOSBAQCB2b2lkIEFyZ3VtZW50czo6bWFyaygpIAogewogICAgIEpTT2JqZWN0OjptYXJrKCk7
CiAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZC0+bnVtUGFyYW1ldGVyczsgKytpKQor
ICAgICAgICBkLT5yZWdpc3RlcnNbaV0ubWFyaygpOworCiAgICAgaWYgKGQtPmV4dHJhQXJndW1l
bnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bUV4dHJhQXJndW1lbnRzID0gZC0+bnVtQXJndW1l
bnRzIC0gZC0+bnVtUGFyYW1ldGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUV4dHJhQXJndW1lbnRzOyArK2kpIHsKQEAgLTEwNSw3ICs2MSw3IEBAIHZvaWQgQXJndW1l
bnRzOjptYXJrKCkgCiAgICAgaWYgKCFkLT5jYWxsZWUtPm1hcmtlZCgpKQogICAgICAgICBkLT5j
YWxsZWUtPm1hcmsoKTsKIAotICAgIGlmICghZC0+YWN0aXZhdGlvbi0+bWFya2VkKCkpCisgICAg
aWYgKGQtPmFjdGl2YXRpb24gJiYgIWQtPmFjdGl2YXRpb24tPm1hcmtlZCgpKQogICAgICAgICBk
LT5hY3RpdmF0aW9uLT5tYXJrKCk7CiB9CiAKQEAgLTExOCwxNiArNzQsMTYgQEAgdm9pZCBBcmd1
bWVudHM6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGQtPm51bVBhcmFtZXRlcnMgPT0gZC0+bnVtQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBhcmdz
LmluaXRpYWxpemUoJmQtPmFjdGl2YXRpb24tPnJlZ2lzdGVyQXQoZC0+Zmlyc3RQYXJhbWV0ZXJJ
bmRleCksIGQtPm51bUFyZ3VtZW50cyk7CisgICAgICAgICAgICBhcmdzLmluaXRpYWxpemUoJmQt
PnJlZ2lzdGVyc1tkLT5maXJzdFBhcmFtZXRlckluZGV4XSwgZC0+bnVtQXJndW1lbnRzKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIHBhcmFtZXRl
cnNMZW5ndGggPSBtaW4oZC0+bnVtUGFyYW1ldGVycywgZC0+bnVtQXJndW1lbnRzKTsKICAgICAg
ICAgdW5zaWduZWQgaSA9IDA7CiAgICAgICAgIGZvciAoOyBpIDwgcGFyYW1ldGVyc0xlbmd0aDsg
KytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+YWN0aXZhdGlvbi0+dW5jaGVja2VkU3lt
Ym9sVGFibGVHZXRWYWx1ZShkLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaSkpOworICAgICAgICAg
ICAgYXJncy5hcHBlbmQoZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXS5q
c1ZhbHVlKGV4ZWMpKTsKICAgICAgICAgZm9yICg7IGkgPCBkLT5udW1Bcmd1bWVudHM7ICsraSkK
LSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJh
bWV0ZXJzXS5nZXRKU1ZhbHVlKCkpOworICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+ZXh0cmFB
cmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdLmpzVmFsdWUoZXhlYykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0xMzUsMTMgKzkxLDEzIEBAIHZvaWQgQXJndW1lbnRzOjpmaWxs
QXJnTGlzdChFeGVjU3RhdGUqIGUKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8
IHBhcmFtZXRlcnNMZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVu
dHNbaV0pCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChkLT5hY3RpdmF0aW9uLT51bmNoZWNrZWRT
eW1ib2xUYWJsZUdldFZhbHVlKGQtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpKSk7CisgICAgICAg
ICAgICBhcmdzLmFwcGVuZChkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGld
LmpzVmFsdWUoZXhlYykpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhcmdzLmFwcGVuZChn
ZXQoZXhlYywgaSkpOwogICAgIH0KICAgICBmb3IgKDsgaSA8IGQtPm51bUFyZ3VtZW50czsgKytp
KSB7CiAgICAgICAgIGlmICghZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkKLSAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXS5nZXRKU1Zh
bHVlKCkpOworICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQt
Pm51bVBhcmFtZXRlcnNdLmpzVmFsdWUoZXhlYykpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwogICAgIH0KQEAgLTE1MSw5ICsxMDcsOSBAQCBi
b29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTCiB7CiAgICAgaWYgKGkgPCBk
LT5udW1Bcmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJn
dW1lbnRzW2ldKSkgewogICAgICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAg
ICAgICBkLT5hY3RpdmF0aW9uLT51bmNoZWNrZWRTeW1ib2xUYWJsZUdldChkLT5maXJzdFBhcmFt
ZXRlckluZGV4ICsgaSwgc2xvdCk7CisgICAgICAgICAgICBzbG90LnNldFJlZ2lzdGVyU2xvdCgm
ZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBh
cmFtZXRlcnNdLmdldEpTVmFsdWUoKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKGQtPmV4
dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXS5qc1ZhbHVlKGV4ZWMpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjYsOSArMTIyLDkgQEAgYm9vbCBBcmd1bWVu
dHM6OmdldE93blByb3BlcnR5U2xvdChFeGVjUwogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUudG9BcnJheUluZGV4KCZpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYg
aSA8IGQtPm51bUFyZ3VtZW50cyAmJiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIWQtPmRlbGV0
ZWRBcmd1bWVudHNbaV0pKSB7CiAgICAgICAgIGlmIChpIDwgZC0+bnVtUGFyYW1ldGVycykKLSAg
ICAgICAgICAgIGQtPmFjdGl2YXRpb24tPnVuY2hlY2tlZFN5bWJvbFRhYmxlR2V0KGQtPmZpcnN0
UGFyYW1ldGVySW5kZXggKyBpLCBzbG90KTsKKyAgICAgICAgICAgIHNsb3Quc2V0UmVnaXN0ZXJT
bG90KCZkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShkLT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+
bnVtUGFyYW1ldGVyc10uZ2V0SlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUo
ZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdLmpzVmFsdWUoZXhlYykpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE4OSw3ICsxNDUsNyBAQCB2b2lkIEFy
Z3VtZW50czo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zCiB7CiAgICAgaWYgKGkgPCBkLT5udW1B
cmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRz
W2ldKSkgewogICAgICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBk
LT5hY3RpdmF0aW9uLT51bmNoZWNrZWRTeW1ib2xUYWJsZVB1dChkLT5maXJzdFBhcmFtZXRlcklu
ZGV4ICsgaSwgdmFsdWUpOworICAgICAgICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1l
dGVySW5kZXggKyBpXSA9IHZhbHVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkLT5leHRy
YUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10gPSB2YWx1ZTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjA0LDcgKzE2MCw3IEBAIHZvaWQgQXJndW1lbnRzOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb24KICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgmaXNBcnJh
eUluZGV4KTsKICAgICBpZiAoaXNBcnJheUluZGV4ICYmIGkgPCBkLT5udW1Bcmd1bWVudHMgJiYg
KCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRzW2ldKSkgewogICAg
ICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBkLT5hY3RpdmF0aW9u
LT51bmNoZWNrZWRTeW1ib2xUYWJsZVB1dChkLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaSwgdmFs
dWUpOworICAgICAgICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBp
XSA9IHZhbHVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkLT5leHRyYUFyZ3VtZW50c1tp
IC0gZC0+bnVtUGFyYW1ldGVyc10gPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuOwpJbmRleDoga2pz
L0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9Bcmd1bWVudHMuaAkocmV2aXNpb24gMzcw
ODkpCisrKyBranMvQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE5ICsyNCwzNyBA
QAogI2lmbmRlZiBBcmd1bWVudHNfaAogI2RlZmluZSBBcmd1bWVudHNfaAogCi0jaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJNYWNoaW5lLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgY2xhc3MgSlNBY3RpdmF0aW9uOwotICAgIGNsYXNz
IEpTRnVuY3Rpb247Ci0gICAgY2xhc3MgUmVnaXN0ZXI7CisgICAgc3RydWN0IEFyZ3VtZW50c0Rh
dGEgOiBOb25jb3B5YWJsZSB7CisgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbjsKKwor
ICAgICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzOworICAgICAgICBpbnQgZmlyc3RQYXJhbWV0
ZXJJbmRleDsKKyAgICAgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzOworCisgICAgICAgIFJlZ2lz
dGVyKiByZWdpc3RlcnM7CisgICAgICAgIE93bkFycmF5UHRyPFJlZ2lzdGVyPiByZWdpc3RlckFy
cmF5OworCisgICAgICAgIFJlZ2lzdGVyKiBleHRyYUFyZ3VtZW50czsKKyAgICAgICAgT3duQXJy
YXlQdHI8Ym9vbD4gZGVsZXRlZEFyZ3VtZW50czsKKyAgICAgICAgUmVnaXN0ZXIgZXh0cmFBcmd1
bWVudHNGaXhlZEJ1ZmZlcls0XTsKKworICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7CisgICAg
ICAgIGJvb2wgb3ZlcnJvZGVMZW5ndGggOiAxOworICAgICAgICBib29sIG92ZXJyb2RlQ2FsbGVl
IDogMTsKKyAgICB9OwogCi0gICAgc3RydWN0IEFyZ3VtZW50c0RhdGE7CiAKICAgICBjbGFzcyBB
cmd1bWVudHMgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXJndW1l
bnRzKEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU0FjdGl2YXRpb24qLCBpbnQgZmlyc3RBcmd1
bWVudEluZGV4LCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MpOworICAgICAgICBBcmd1bWVudHMo
RXhlY1N0YXRlKiwgUmVnaXN0ZXIqIGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyhFeGVj
U3RhdGUqLCBKU0FjdGl2YXRpb24qKTsKICAgICAgICAgdmlydHVhbCB+QXJndW1lbnRzKCk7CiAK
ICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtNDUsNiArNjMsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIEFy
Z0xpc3QmKTsKIAorICAgICAgICB2b2lkIGNvcHlSZWdpc3RlcnMoKTsKKyAgICAgICAgdm9pZCBz
ZXRSZWdpc3RlcnMoUmVnaXN0ZXIqIHJlZ2lzdGVycykgeyBkLT5yZWdpc3RlcnMgPSByZWdpc3Rl
cnM7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNTUsOSArNzYs
MTA0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCisgICAgICAgIHZvaWQgaW5p
dChFeGVjU3RhdGUqLCBSZWdpc3RlciogY2FsbEZyYW1lKTsKKwogICAgICAgICBPd25QdHI8QXJn
dW1lbnRzRGF0YT4gZDsKICAgICB9OwogCisgICAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjppbml0
KEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIEpT
RnVuY3Rpb24qIGNhbGxlZTsKKyAgICAgICAgaW50IGZpcnN0UGFyYW1ldGVySW5kZXg7CisgICAg
ICAgIFJlZ2lzdGVyKiBhcmd2OworICAgICAgICBpbnQgbnVtQXJndW1lbnRzOworICAgICAgICBl
eGVjLT5tYWNoaW5lKCktPmdldEFyZ3VtZW50c0RhdGEoY2FsbEZyYW1lLCBjYWxsZWUsIGZpcnN0
UGFyYW1ldGVySW5kZXgsIGFyZ3YsIG51bUFyZ3VtZW50cyk7CisKKyAgICAgICAgZC0+bnVtUGFy
YW1ldGVycyA9IGNhbGxlZS0+bnVtUGFyYW1ldGVycygpOworICAgICAgICBkLT5maXJzdFBhcmFt
ZXRlckluZGV4ID0gZmlyc3RQYXJhbWV0ZXJJbmRleDsKKyAgICAgICAgZC0+bnVtQXJndW1lbnRz
ID0gbnVtQXJndW1lbnRzOworCisgICAgICAgIGQtPnJlZ2lzdGVycyA9IGNhbGxGcmFtZTsKKwor
ICAgICAgICBSZWdpc3RlciogZXh0cmFBcmd1bWVudHM7CisgICAgICAgIGlmIChkLT5udW1Bcmd1
bWVudHMgPD0gZC0+bnVtUGFyYW1ldGVycykKKyAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzID0g
MDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1FeHRyYUFyZ3VtZW50
cyA9IGQtPm51bUFyZ3VtZW50cyAtIGQtPm51bVBhcmFtZXRlcnM7CisgICAgICAgICAgICBpZiAo
bnVtRXh0cmFBcmd1bWVudHMgPiBzaXplb2YoZC0+ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcikg
LyBzaXplb2YoUmVnaXN0ZXIpKQorICAgICAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzID0gbmV3
IFJlZ2lzdGVyW251bUV4dHJhQXJndW1lbnRzXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBleHRyYUFyZ3VtZW50cyA9IGQtPmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXI7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmd1bWVudHM7ICsr
aSkKKyAgICAgICAgICAgICAgICBleHRyYUFyZ3VtZW50c1tpXSA9IGFyZ3ZbZC0+bnVtUGFyYW1l
dGVycyArIGldOworICAgICAgICB9CisKKyAgICAgICAgZC0+ZXh0cmFBcmd1bWVudHMgPSBleHRy
YUFyZ3VtZW50czsKKworICAgICAgICBkLT5jYWxsZWUgPSBjYWxsZWU7CisgICAgICAgIGQtPm92
ZXJyb2RlTGVuZ3RoID0gZmFsc2U7CisgICAgICAgIGQtPm92ZXJyb2RlQ2FsbGVlID0gZmFsc2U7
CisgICAgfQorCisgICAgaW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhl
YywgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKKyAgICAgICAgOiBKU09iamVjdChleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQorICAgICAgICAsIGQobmV3IEFy
Z3VtZW50c0RhdGEpCisgICAgeworICAgICAgICBkLT5hY3RpdmF0aW9uID0gMDsKKyAgICAgICAg
aW5pdChleGVjLCBjYWxsRnJhbWUpOworICAgIH0KKworICAgIGlubGluZSBBcmd1bWVudHM6OkFy
Z3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbikKKyAgICAg
ICAgOiBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVj
dHVyZSgpKQorICAgICAgICAsIGQobmV3IEFyZ3VtZW50c0RhdGEpCisgICAgeworICAgICAgICBB
U1NFUlQoYWN0aXZhdGlvbik7CisgICAgICAgIGQtPmFjdGl2YXRpb24gPSBhY3RpdmF0aW9uOwor
ICAgICAgICBpbml0KGV4ZWMsICZhY3RpdmF0aW9uLT5yZWdpc3RlckF0KDApKTsKKyAgICB9CisK
KyAgICBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmNvcHlSZWdpc3RlcnMoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFkLT5hY3RpdmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKCFkLT5yZWdpc3RlckFy
cmF5KTsKKworICAgICAgICBzaXplX3QgbnVtUGFyYW1ldGVyc01pbnVzVGhpcyA9IGQtPmNhbGxl
ZS0+bV9ib2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVBhcmFtZXRlcnMgLSAxOworICAgICAg
ICBzaXplX3QgbnVtVmFycyA9IGQtPmNhbGxlZS0+bV9ib2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgp
Lm51bVZhcnM7CisgICAgICAgIHNpemVfdCBudW1Mb2NhbHMgPSBudW1WYXJzICsgbnVtUGFyYW1l
dGVyc01pbnVzVGhpczsKKworICAgICAgICBpZiAoIW51bUxvY2FscykKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBudW1QYXJhbWV0ZXJzTWludXNU
aGlzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBzaXplX3Qg
cmVnaXN0ZXJBcnJheVNpemUgPSBudW1Mb2NhbHMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7CisKKyAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVyQXJyYXkgPSBuZXcgUmVnaXN0
ZXJbcmVnaXN0ZXJBcnJheVNpemVdOworICAgICAgICBtZW1jcHkocmVnaXN0ZXJBcnJheSwgZC0+
cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVyQXJyYXlTaXplICogc2l6ZW9mKFJl
Z2lzdGVyKSk7CisgICAgICAgIGQtPnJlZ2lzdGVyQXJyYXkuc2V0KHJlZ2lzdGVyQXJyYXkpOwor
ICAgICAgICBkLT5yZWdpc3RlcnMgPSByZWdpc3RlckFycmF5ICsgcmVnaXN0ZXJPZmZzZXQ7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBKU0FjdGl2YXRpb24gZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJl
IHNvIGl0IGNhbiBnZXQgYXQgQXJndW1lbnRzOjpzZXRSZWdpc3RlcnMuCisgICAgaW5saW5lIHZv
aWQgSlNBY3RpdmF0aW9uOjpjb3B5UmVnaXN0ZXJzKEpTVmFsdWUqIGFyZ3VtZW50cykKKyAgICB7
CisgICAgICAgIEFTU0VSVCghZCgpLT5yZWdpc3RlckFycmF5KTsKKworICAgICAgICBzaXplX3Qg
bnVtUGFyYW1ldGVyc01pbnVzVGhpcyA9IGQoKS0+ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRl
Q29kZSgpLm51bVBhcmFtZXRlcnMgLSAxOworICAgICAgICBzaXplX3QgbnVtVmFycyA9IGQoKS0+
ZnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVZhcnM7CisgICAgICAgIHNpemVf
dCBudW1Mb2NhbHMgPSBudW1WYXJzICsgbnVtUGFyYW1ldGVyc01pbnVzVGhpczsKKworICAgICAg
ICBpZiAoIW51bUxvY2FscykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSBudW1QYXJhbWV0ZXJzTWludXNUaGlzICsgUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemUgPSBudW1M
b2NhbHMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAgUmVn
aXN0ZXIqIHJlZ2lzdGVyQXJyYXkgPSBjb3B5UmVnaXN0ZXJBcnJheShkKCktPnJlZ2lzdGVycyAt
IHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFycmF5U2l6ZSk7CisgICAgICAgIHNldFJlZ2lzdGVy
cyhyZWdpc3RlckFycmF5ICsgcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVyQXJyYXkpOworICAgICAg
ICBpZiAoYXJndW1lbnRzICYmIGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5mbykp
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5zZXRSZWdp
c3RlcnMocmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICB9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gQXJndW1lbnRzX2gKSW5kZXg6IGtqcy9KU0FjdGl2YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU0FjdGl2YXRpb24uY3BwCShyZXZpc2lvbiAzNzA4
OSkKKysrIGtqcy9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3
LDcgQEAgSlNWYWx1ZSogSlNBY3RpdmF0aW9uOjphcmd1bWVudHNHZXR0ZXIoRQogCiAgICAgQXJn
dW1lbnRzKiBhcmd1bWVudHMgPSBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPih0aGlzT2JqLT5kKCkt
PnJlZ2lzdGVyc1tSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5qc1ZhbHVl
KGV4ZWMpKTsKICAgICBpZiAoIWFyZ3VtZW50cykgewotICAgICAgICBhcmd1bWVudHMgPSB0aGlz
T2JqLT5jcmVhdGVBcmd1bWVudHNPYmplY3QoZXhlYyk7CisgICAgICAgIGFyZ3VtZW50cyA9IG5l
dyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHRoaXNPYmopOwogICAgICAgICB0aGlzT2JqLT5kKCkt
PnJlZ2lzdGVyc1tSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IGFyZ3Vt
ZW50czsKICAgICB9CiAKQEAgLTE3MiwxNSArMTcyLDQgQEAgUHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmMgSlNBY3RpdmF0aW9uOgogICAgIHJldHVybiBhcmd1bWVudHNHZXR0ZXI7CiB9CiAKLUFy
Z3VtZW50cyogSlNBY3RpdmF0aW9uOjpjcmVhdGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uOwotICAgIFJlZ2lzdGVyKiBhcmd2Owot
ICAgIGludCBhcmdjOwotICAgIGludCBmaXJzdFBhcmFtZXRlckluZGV4OwotICAgIGV4ZWMtPm1h
Y2hpbmUoKS0+Z2V0QXJndW1lbnRzRGF0YShkKCktPnJlZ2lzdGVycywgZnVuY3Rpb24sIGZpcnN0
UGFyYW1ldGVySW5kZXgsIGFyZ3YsIGFyZ2MpOwotCi0gICAgcmV0dXJuIG5ldyAoZXhlYykgQXJn
dW1lbnRzKGV4ZWMsIGZ1bmN0aW9uLCB0aGlzLCBmaXJzdFBhcmFtZXRlckluZGV4LCBhcmd2LCBh
cmdjKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBranMvSlNBY3RpdmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2pzL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAzNzA4OSkKKysrIGtq
cy9KU0FjdGl2YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNTMgKzQzLDM2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEpTQWN0aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxlT2Jq
ZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7CiAgICAgcHVibGlj
OgotICAgICAgICBKU0FjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+LCBSZWdpc3RlciopOworICAgICAgICBKU0FjdGl2YXRpb24oRXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiwgUmVnaXN0ZXIqKTsKICAgICAgICAgdmly
dHVhbCB+SlNBY3RpdmF0aW9uKCk7Ci0gICAgICAgIAorCiAgICAgICAgIHZpcnR1YWwgdm9pZCBt
YXJrKCk7CiAKICAgICAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY1Njb3BlKCkgY29uc3Q7CiAK
ICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgaW5saW5lIHZvaWQgdW5j
aGVja2VkU3ltYm9sVGFibGVHZXQoaW50IGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHNsb3Quc2V0UmVnaXN0ZXJTbG90KCZyZWdpc3RlckF0KGluZGV4
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgSlNWYWx1ZSogdW5jaGVja2VkU3ltYm9s
VGFibGVHZXRWYWx1ZShpbnQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBy
ZWdpc3RlckF0KGluZGV4KS5nZXRKU1ZhbHVlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgUHV0
UHJvcGVydHlTbG90Jik7CiAKLSAgICAgICAgaW5saW5lIHZvaWQgdW5jaGVja2VkU3ltYm9sVGFi
bGVQdXQoaW50IGluZGV4LCBKU1ZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmVnaXN0ZXJBdChpbmRleCkgPSB2YWx1ZTsKLSAgICAgICAgfQotCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBwdXRXaXRoQXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgSlNW
YWx1ZSosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRl
UHJvcGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKIAog
ICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7
CiAKLSAgICAgICAgdm9pZCBjb3B5UmVnaXN0ZXJzKCk7CisgICAgICAgIHZvaWQgY29weVJlZ2lz
dGVycyhKU1ZhbHVlKiBhcmd1bWVudHMpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgICAgICBORVZFUl9JTkxJTkUgQXJn
dW1lbnRzKiBjcmVhdGVBcmd1bWVudHNPYmplY3QoRXhlY1N0YXRlKik7Ci0KICAgICBwcml2YXRl
OgogICAgICAgICBzdHJ1Y3QgSlNBY3RpdmF0aW9uRGF0YSA6IHB1YmxpYyBKU1ZhcmlhYmxlT2Jq
ZWN0RGF0YSB7Ci0gICAgICAgICAgICBKU0FjdGl2YXRpb25EYXRhKFBhc3NSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5XywgUmVnaXN0ZXIqIHJlZ2lzdGVycykKLSAgICAgICAg
ICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKCZmdW5jdGlvbkJvZHlfLT5zeW1ib2xUYWJs
ZSgpLCByZWdpc3RlcnMpCi0gICAgICAgICAgICAgICAgLCBmdW5jdGlvbkJvZHkoZnVuY3Rpb25C
b2R5XykKKyAgICAgICAgICAgIEpTQWN0aXZhdGlvbkRhdGEoUGFzc1JlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiBmdW5jdGlvbkJvZHksIFJlZ2lzdGVyKiByZWdpc3RlcnMpCisgICAgICAgICAgICAg
ICAgOiBKU1ZhcmlhYmxlT2JqZWN0RGF0YSgmZnVuY3Rpb25Cb2R5LT5zeW1ib2xUYWJsZSgpLCBy
ZWdpc3RlcnMpCisgICAgICAgICAgICAgICAgLCBmdW5jdGlvbkJvZHkoZnVuY3Rpb25Cb2R5KQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5OyAvLyBPd25zIHRoZSBzeW1ib2wgdGFibGUgYW5kIGNv
ZGUgYmxvY2sKKyAgICAgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJv
ZHk7CiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgSlNWYWx1ZSogYXJndW1l
bnRzR2V0dGVyKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKQEAgLTk4LDI0ICs4MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0FjdGl2
YXRpb25EYXRhKiBkKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uRGF0
YSo+KEpTVmFyaWFibGVPYmplY3Q6OmQpOyB9CiAgICAgfTsKICAgICAKLSAgICBpbmxpbmUgdm9p
ZCBKU0FjdGl2YXRpb246OmNvcHlSZWdpc3RlcnMoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFk
KCktPnJlZ2lzdGVyQXJyYXkpOwotCi0gICAgICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNU
aGlzID0gZCgpLT5mdW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVDb2RlKCkubnVtUGFyYW1ldGVy
cyAtIDE7Ci0gICAgICAgIHNpemVfdCBudW1WYXJzID0gZCgpLT5mdW5jdGlvbkJvZHktPmdlbmVy
YXRlZEJ5dGVDb2RlKCkubnVtVmFyczsKLSAgICAgICAgc2l6ZV90IG51bUxvY2FscyA9IG51bVZh
cnMgKyBudW1QYXJhbWV0ZXJzTWludXNUaGlzOwotCi0gICAgICAgIGlmICghbnVtTG9jYWxzKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IG51bVBh
cmFtZXRlcnNNaW51c1RoaXMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0g
ICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZSA9IG51bUxvY2FscyArIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLQotICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJBcnJh
eSA9IGNvcHlSZWdpc3RlckFycmF5KGQoKS0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJl
Z2lzdGVyQXJyYXlTaXplKTsKLSAgICAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVyQXJyYXkgKyBy
ZWdpc3Rlck9mZnNldCwgcmVnaXN0ZXJBcnJheSk7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEpTQWN0aXZhdGlvbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23952</attachid>
            <date>2008-09-30 13:36:48 -0700</date>
            <delta_ts>2008-09-30 15:20:34 -0700</delta_ts>
            <desc>Patch to move lexical &apos;arguments&apos; detection to the parser</desc>
            <filename>parser.diff</filename>
            <type>text/plain</type>
            <size>23913</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MTA4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDgtMDktMzAgIENhbWVyb24g
WndhcmljaCAgPHp3YXJpY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgYWxsIGRldGVjdGlvbiBvZiAnYXJndW1lbnRzJyBp
biBhIGxleGljYWwgc2NvcGUgdG8gdGhlIHBhcnNlciwgaW4KKyAgICAgICAgcHJlcGFyYXRpb24g
Zm9yIGZpeGluZworCisgICAgICAgIEJ1ZyAyMTEyMzogdXNpbmcgImFyZ3VtZW50cyIgaW4gYSBm
dW5jdGlvbiBzaG91bGQgbm90IGZvcmNlIGNyZWF0aW9uIG9mIGFuIGFjdGl2YXRpb24gb2JqZWN0
CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjM+
CisKKyAgICAgICAgKiBWTS9Db2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUdl
bmVyYXRvcjo6Q29kZUdlbmVyYXRvcik6CisgICAgICAgICoga2pzL05vZGVJbmZvLmg6CisgICAg
ICAgICoga2pzL2dyYW1tYXIueToKKwogMjAwOC0wOS0zMCAgTWFyayBSb3dlICA8bXJvd2VAYXBw
bGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzcwODkpCisrKyBKYXZhU2Ny
aXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDM0ICsy
OTIsMjQgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgIGVt
aXRPcGNvZGUob3BfaW5pdCk7CiAgICAgY29kZUJsb2NrLT5nbG9iYWxEYXRhID0gbV9nbG9iYWxE
YXRhOwogCi0gICAgYm9vbCB1c2VzQXJndW1lbnRzID0gZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1l
bnRzKCk7CisgICAgaWYgKGZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgICAg
IGVtaXRPcGNvZGUob3BfaW5pdF9hcmd1bWVudHMpOworICAgICAgICBtX2NvZGVCbG9jay0+bmVl
ZHNGdWxsU2NvcGVDaGFpbiA9IHRydWU7CisgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIuc2V0
SW5kZXgoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyk7CisgICAgICAgIHN5
bWJvbFRhYmxlLT5hZGQocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy51c3RyaW5nKCkucmVwKCks
IFN5bWJvbFRhYmxlRW50cnkoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cykp
OworICAgIH0KIAogICAgIGNvbnN0IE5vZGU6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sg
PSBmdW5jdGlvbkJvZHktPmZ1bmN0aW9uU3RhY2soKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRnVuY0RlY2xOb2RlKiBm
dW5jRGVjbCA9IGZ1bmN0aW9uU3RhY2tbaV0uZ2V0KCk7CiAgICAgICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gZnVuY0RlY2wtPm1faWRlbnQ7Ci0gICAgICAgIGlmIChpZGVudCA9PSBwcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQotICAgICAgICAgICAgdXNlc0FyZ3VtZW50cyA9IHRydWU7
CiAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC51c3RyaW5nKCkucmVwKCkpOwogICAgICAg
ICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50LCBmYWxzZSksIGZ1bmNEZWNsKTsKICAgICB9
CiAKICAgICBjb25zdCBOb2RlOjpWYXJTdGFjayYgdmFyU3RhY2sgPSBmdW5jdGlvbkJvZHktPnZh
clN0YWNrKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0
OwotICAgICAgICBpZiAoaWRlbnQgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewotICAg
ICAgICAgICAgdXNlc0FyZ3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xh
cmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKLSAgICB9Ci0KLSAgICBpZiAodXNlc0FyZ3VtZW50
cykgewotICAgICAgICBlbWl0T3Bjb2RlKG9wX2luaXRfYXJndW1lbnRzKTsKLSAgICAgICAgbV9j
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4gPSB0cnVlOwotICAgICAgICBtX2FyZ3VtZW50
c1JlZ2lzdGVyLnNldEluZGV4KFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMp
OwotICAgICAgICBzeW1ib2xUYWJsZS0+YWRkKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMudXN0
cmluZygpLnJlcCgpLCBTeW1ib2xUYWJsZUVudHJ5KFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBcmd1bWVudHMpKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFj
ay5zaXplKCk7ICsraSkKKyAgICAgICAgYWRkVmFyKHZhclN0YWNrW2ldLmZpcnN0LCB2YXJTdGFj
a1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCk7CiAKICAgICBWZWN0
b3I8SWRlbnRpZmllcj4mIHBhcmFtZXRlcnMgPSBmdW5jdGlvbkJvZHktPnBhcmFtZXRlcnMoKTsK
ICAgICBtX25leHRQYXJhbWV0ZXIgPSAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IC0gcGFyYW1ldGVycy5zaXplKCkgLSAxOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL05vZGVJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL05vZGVJbmZvLmgJKHJldmlz
aW9uIDM3MDg5KQorKysgSmF2YVNjcmlwdENvcmUva2pzL05vZGVJbmZvLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEZlYXR1cmVJbmZv
IG1fZmVhdHVyZUluZm87CiAgICAgICAgIGludCBtX251bUNvbnN0YW50czsKICAgICB9OwotICAg
IAorCisgICAgdHlwZWRlZiBOb2RlRmVhdHVyZUluZm88RnVuY0RlY2xOb2RlKj4gRnVuY0RlY2xO
b2RlSW5mbzsgICAgCiAgICAgdHlwZWRlZiBOb2RlRmVhdHVyZUluZm88RnVuY0V4cHJOb2RlKj4g
RnVuY0V4cHJOb2RlSW5mbzsKICAgICB0eXBlZGVmIE5vZGVGZWF0dXJlSW5mbzxFeHByZXNzaW9u
Tm9kZSo+IEV4cHJlc3Npb25Ob2RlSW5mbzsKICAgICB0eXBlZGVmIE5vZGVGZWF0dXJlSW5mbzxB
cmd1bWVudHNOb2RlKj4gQXJndW1lbnRzTm9kZUluZm87CkBAIC02Myw2ICs2NCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIHR5cGVkZWYgTm9kZURlY2xhcmF0aW9uSW5mbzxDbGF1c2VMaXN0PiBD
bGF1c2VMaXN0SW5mbzsKICAgICB0eXBlZGVmIE5vZGVEZWNsYXJhdGlvbkluZm88RXhwcmVzc2lv
bk5vZGUqPiBWYXJEZWNsTGlzdEluZm87CiAgICAgdHlwZWRlZiBOb2RlRGVjbGFyYXRpb25JbmZv
PENvbnN0RGVjbExpc3Q+IENvbnN0RGVjbExpc3RJbmZvOworICAgIHR5cGVkZWYgTm9kZURlY2xh
cmF0aW9uSW5mbzxQYXJhbWV0ZXJMaXN0PiBQYXJhbWV0ZXJMaXN0SW5mbzsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2dyYW1tYXIueQkocmV2aXNpb24gMzcwODkpCisrKyBK
YXZhU2NyaXB0Q29yZS9ranMvZ3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYw
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFRvVmFyRGVjbGFyYXRpbwogCiAgICAgLy8g
ZXhwcmVzc2lvbiBzdWJ0cmVlcwogICAgIEV4cHJlc3Npb25Ob2RlSW5mbyAgZXhwcmVzc2lvbk5v
ZGU7Ci0gICAgRnVuY0RlY2xOb2RlKiAgICAgICBmdW5jRGVjbE5vZGU7CisgICAgRnVuY0RlY2xO
b2RlSW5mbyAgICBmdW5jRGVjbE5vZGU7CiAgICAgUHJvcGVydHlOb2RlSW5mbyAgICBwcm9wZXJ0
eU5vZGU7CiAgICAgQXJndW1lbnRzTm9kZUluZm8gICBhcmd1bWVudHNOb2RlOwogICAgIENvbnN0
RGVjbE5vZGVJbmZvICAgY29uc3REZWNsTm9kZTsKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgYXBwZW5kVG9WYXJEZWNsYXJhdGlvCiAgICAgQ29uc3REZWNsTGlzdEluZm8g
ICBjb25zdERlY2xMaXN0OwogICAgIENsYXVzZUxpc3RJbmZvICAgICAgY2xhdXNlTGlzdDsKICAg
ICBFbGVtZW50TGlzdEluZm8gICAgIGVsZW1lbnRMaXN0OwotICAgIFBhcmFtZXRlckxpc3QgICAg
ICAgcGFyYW1ldGVyTGlzdDsKKyAgICBQYXJhbWV0ZXJMaXN0SW5mbyAgIHBhcmFtZXRlckxpc3Q7
CiAKICAgICBPcGVyYXRvciAgICAgICAgICAgIG9wOwogfQpAQCAtMzE0LDcgKzMxNCw3IEBAIFBy
b3BlcnR5OgogICB8IE5VTUJFUiAnOicgQXNzaWdubWVudEV4cHIgICAgICAgICAgIHsgJCQgPSBj
cmVhdGVOb2RlRmVhdHVyZUluZm88UHJvcGVydHlOb2RlKj4obmV3IFByb3BlcnR5Tm9kZShHTE9C
QUxfREFUQSwgSWRlbnRpZmllcihHTE9CQUxfREFUQSwgVVN0cmluZzo6ZnJvbSgkMSkpLCAkMy5t
X25vZGUsIFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQpLCAkMy5tX2ZlYXR1cmVJbmZvLCAkMy5tX251
bUNvbnN0YW50cyk7IH0KICAgfCBJREVOVCBJREVOVCAnKCcgJyknIE9QRU5CUkFDRSBGdW5jdGlv
bkJvZHkgQ0xPU0VCUkFDRSAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPFByb3BlcnR5
Tm9kZSo+KG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZShnbG9iYWxQdHIsICokMSwgKiQy
LCAwLCAkNiwgTEVYRVItPnNvdXJjZVJhbmdlKCQ1LCAkNykpLCBDbG9zdXJlRmVhdHVyZSwgMCk7
IERCRygkNiwgQDUsIEA3KTsgaWYgKCEkJC5tX25vZGUpIFlZQUJPUlQ7IH0KICAgfCBJREVOVCBJ
REVOVCAnKCcgRm9ybWFsUGFyYW1ldGVyTGlzdCAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBD
TE9TRUJSQUNFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9
IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxQcm9wZXJ0eU5vZGUqPihtYWtlR2V0dGVyT3JTZXR0ZXJQ
cm9wZXJ0eU5vZGUoZ2xvYmFsUHRyLCAqJDEsICokMiwgJDQuaGVhZCwgJDcsIExFWEVSLT5zb3Vy
Y2VSYW5nZSgkNiwgJDgpKSwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDcsIEA2LCBAOCk7IGlm
ICghJCQubV9ub2RlKSBZWUFCT1JUOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbzxQcm9wZXJ0eU5vZGUqPihtYWtl
R2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eU5vZGUoZ2xvYmFsUHRyLCAqJDEsICokMiwgJDQubV9ub2Rl
LmhlYWQsICQ3LCBMRVhFUi0+c291cmNlUmFuZ2UoJDYsICQ4KSksICQ0Lm1fZmVhdHVyZUluZm8g
fCBDbG9zdXJlRmVhdHVyZSwgMCk7IERCRygkNywgQDYsIEA4KTsgaWYgKCEkJC5tX25vZGUpIFlZ
QUJPUlQ7IH0KIDsKIAogUHJvcGVydHlMaXN0OgpAQCAtODE5LDcgKzgxOSw3IEBAIFZhcmlhYmxl
RGVjbGFyYXRpb25MaXN0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJCQubV92YXJEZWNsYXJhdGlvbnMgPSBuZXcgUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFy
YXRpb25TdGFja3M6OlZhclN0YWNrPihHTE9CQUxfREFUQSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdChHTE9CQUxf
REFUQSwgJCQubV92YXJEZWNsYXJhdGlvbnMsICokMSwgMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0dXJlSW5mbyA9IDA7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2ZlYXR1cmVJ
bmZvID0gKCokMSA9PSBHTE9CQUxfREFUQS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKSA/IEFy
Z3VtZW50c0ZlYXR1cmUgOiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJCQubV9udW1Db25zdGFudHMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgfCBJREVOVCBJbml0aWFsaXplciAgICAgICAgICAgICAgICAgICB7
IEFzc2lnblJlc29sdmVOb2RlKiBub2RlID0gbmV3IEFzc2lnblJlc29sdmVOb2RlKEdMT0JBTF9E
QVRBLCAqJDEsICQyLm1fbm9kZSwgJDIubV9mZWF0dXJlSW5mbyAmIEFzc2lnbkZlYXR1cmUpOwpA
QCAtODI4LDcgKzgyOCw3IEBAIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0OgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMgPSBuZXcg
UGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPihHTE9CQUxf
REFUQSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRU
b1ZhckRlY2xhcmF0aW9uTGlzdChHTE9CQUxfREFUQSwgJCQubV92YXJEZWNsYXJhdGlvbnMsICok
MSwgRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVyKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2ZlYXR1cmVJbmZvID0g
JDIubV9mZWF0dXJlSW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkLm1fZmVhdHVyZUluZm8gPSAoKCokMSA9PSBHTE9CQUxfREFUQS0+cHJvcGVydHlOYW1l
cy0+YXJndW1lbnRzKSA/IEFyZ3VtZW50c0ZlYXR1cmUgOiAwKSB8ICQyLm1fZmVhdHVyZUluZm87
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX251bUNvbnN0
YW50cyA9ICQyLm1fbnVtQ29uc3RhbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgfCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCAnLCcgSURFTlQKQEAgLTgz
Niw3ICs4MzYsNyBAQCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fdmFyRGVjbGFyYXRpb25zID0gJDEubV92YXJE
ZWNsYXJhdGlvbnM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdChHTE9CQUxfREFUQSwgJCQubV92YXJEZWNsYXJhdGlv
bnMsICokMywgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
JC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJCQubV9mZWF0dXJlSW5mbyA9ICQxLm1fZmVhdHVyZUluZm87CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2ZlYXR1cmVJbmZvID0gJDEu
bV9mZWF0dXJlSW5mbyB8ICgoKiQzID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1
bWVudHMpID8gQXJndW1lbnRzRmVhdHVyZSA6IDApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJCQubV9udW1Db25zdGFudHMgPSAkMS5tX251bUNvbnN0YW50czsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgIHwgVmFyaWFibGVE
ZWNsYXJhdGlvbkxpc3QgJywnIElERU5UIEluaXRpYWxpemVyCkBAIC04NDYsNyArODQ2LDcgQEAg
VmFyaWFibGVEZWNsYXJhdGlvbkxpc3Q6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25zOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9WYXJEZWNs
YXJhdGlvbkxpc3QoR0xPQkFMX0RBVEEsICQkLm1fdmFyRGVjbGFyYXRpb25zLCAqJDMsIERlY2xh
cmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0dXJlSW5mbyA9ICQxLm1fZmVh
dHVyZUluZm8gfCAkNC5tX2ZlYXR1cmVJbmZvOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJCQubV9mZWF0dXJlSW5mbyA9ICQxLm1fZmVhdHVyZUluZm8gfCAoKCok
MyA9PSBHTE9CQUxfREFUQS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKSA/IEFyZ3VtZW50c0Zl
YXR1cmUgOiAwKSB8ICQ0Lm1fZmVhdHVyZUluZm87CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkJC5tX251bUNvbnN0YW50cyA9ICQxLm1fbnVtQ29uc3RhbnRzICsg
JDQubV9udW1Db25zdGFudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogOwpAQCAtODU2LDcgKzg1Niw3IEBAIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbjoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fdmFyRGVjbGFy
YXRpb25zID0gbmV3IFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJT
dGFjaz4oR0xPQkFMX0RBVEEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoR0xPQkFMX0RBVEEsICQkLm1fdmFyRGVj
bGFyYXRpb25zLCAqJDEsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJCQubV9mdW5jRGVjbGFyYXRpb25zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICQkLm1fZmVhdHVyZUluZm8gPSAwOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0dXJlSW5mbyA9ICgqJDEgPT0gR0xP
QkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJlIDog
MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbnVtQ29u
c3RhbnRzID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
IHwgSURFTlQgSW5pdGlhbGl6ZXJOb0luICAgICAgICAgICAgICAgeyBBc3NpZ25SZXNvbHZlTm9k
ZSogbm9kZSA9IG5ldyBBc3NpZ25SZXNvbHZlTm9kZShHTE9CQUxfREFUQSwgKiQxLCAkMi5tX25v
ZGUsICQyLm1fZmVhdHVyZUluZm8gJiBBc3NpZ25GZWF0dXJlKTsKQEAgLTg2NSw3ICs4NjUsNyBA
QCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdE5vSW46CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9IG5ldyBQYXJzZXJSZWZDb3Vu
dGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KEdMT0JBTF9EQVRBKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRp
b25MaXN0KEdMT0JBTF9EQVRBLCAkJC5tX3ZhckRlY2xhcmF0aW9ucywgKiQxLCBEZWNsYXJhdGlv
blN0YWNrczo6SGFzSW5pdGlhbGl6ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJCQubV9mdW5jRGVjbGFyYXRpb25zID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fZmVhdHVyZUluZm8gPSAkMi5tX2ZlYXR1cmVJ
bmZvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0
dXJlSW5mbyA9ICgoKiQxID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMp
ID8gQXJndW1lbnRzRmVhdHVyZSA6IDApIHwgJDIubV9mZWF0dXJlSW5mbzsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbnVtQ29uc3RhbnRzID0gJDIubV9u
dW1Db25zdGFudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICB8IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbiAnLCcgSURFTlQKQEAgLTg3Myw3ICs4NzMs
NyBAQCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdE5vSW46CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFy
YXRpb25zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
VG9WYXJEZWNsYXJhdGlvbkxpc3QoR0xPQkFMX0RBVEEsICQkLm1fdmFyRGVjbGFyYXRpb25zLCAq
JDMsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9m
dW5jRGVjbGFyYXRpb25zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICQkLm1fZmVhdHVyZUluZm8gPSAkMS5tX2ZlYXR1cmVJbmZvOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0dXJlSW5mbyA9ICQxLm1fZmVh
dHVyZUluZm8gfCAoKCokMyA9PSBHTE9CQUxfREFUQS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRz
KSA/IEFyZ3VtZW50c0ZlYXR1cmUgOiAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLm1fbnVtQ29uc3RhbnRzID0gJDEubV9udW1Db25zdGFudHM7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICB8IFZhcmlhYmxlRGVjbGFy
YXRpb25MaXN0Tm9JbiAnLCcgSURFTlQgSW5pdGlhbGl6ZXJOb0luCkBAIC04ODMsNyArODgzLDcg
QEAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3ROb0luOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMgPSAkMS5tX3ZhckRlY2xhcmF0
aW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
VmFyRGVjbGFyYXRpb25MaXN0KEdMT0JBTF9EQVRBLCAkJC5tX3ZhckRlY2xhcmF0aW9ucywgKiQz
LCBEZWNsYXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mdW5jRGVjbGFyYXRpb25zID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fZmVhdHVyZUluZm8gPSAk
MS5tX2ZlYXR1cmVJbmZvIHwgJDQubV9mZWF0dXJlSW5mbzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICQkLm1fZmVhdHVyZUluZm8gPSAkMS5tX2ZlYXR1cmVJbmZv
IHwgKCgqJDMgPT0gR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgPyBBcmd1
bWVudHNGZWF0dXJlIDogMCkgfCAkNC5tX2ZlYXR1cmVJbmZvOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9udW1Db25zdGFudHMgPSAkMS5tX251bUNvbnN0
YW50cyArICQ0Lm1fbnVtQ29uc3RhbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KIDsKQEAgLTkxNyw4ICs5MTcsOCBAQCBDb25zdERlY2xhcmF0aW9uTGlzdDoK
IDsKIAogQ29uc3REZWNsYXJhdGlvbjoKLSAgICBJREVOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvPENvbnN0RGVjbE5vZGUqPihuZXcg
Q29uc3REZWNsTm9kZShHTE9CQUxfREFUQSwgKiQxLCAwKSwgMCwgMCk7IH0KLSAgfCBJREVOVCBJ
bml0aWFsaXplciAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZv
PENvbnN0RGVjbE5vZGUqPihuZXcgQ29uc3REZWNsTm9kZShHTE9CQUxfREFUQSwgKiQxLCAkMi5t
X25vZGUpLCAkMi5tX2ZlYXR1cmVJbmZvLCAkMi5tX251bUNvbnN0YW50cyk7IH0KKyAgICBJREVO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJ
bmZvPENvbnN0RGVjbE5vZGUqPihuZXcgQ29uc3REZWNsTm9kZShHTE9CQUxfREFUQSwgKiQxLCAw
KSwgKCokMSA9PSBHTE9CQUxfREFUQS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKSA/IEFyZ3Vt
ZW50c0ZlYXR1cmUgOiAwLCAwKTsgfQorICB8IElERU5UIEluaXRpYWxpemVyICAgICAgICAgICAg
ICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88Q29uc3REZWNsTm9kZSo+KG5ldyBD
b25zdERlY2xOb2RlKEdMT0JBTF9EQVRBLCAqJDEsICQyLm1fbm9kZSksICgoKiQxID09IEdMT0JB
TF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpID8gQXJndW1lbnRzRmVhdHVyZSA6IDAp
IHwgJDIubV9mZWF0dXJlSW5mbywgJDIubV9udW1Db25zdGFudHMpOyB9CiA7CiAKIEluaXRpYWxp
emVyOgpAQCAtOTg1LDE0ICs5ODUsMTQgQEAgSXRlcmF0aW9uU3RhdGVtZW50OgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRm9ySW5Ob2RlICpmb3JJbiA9IG5ldyBG
b3JJbk5vZGUoR0xPQkFMX0RBVEEsICokNCwgMCwgJDYubV9ub2RlLCAkOC5tX25vZGUsIEA1LmZp
cnN0X2NvbHVtbiwgQDUuZmlyc3RfY29sdW1uIC0gQDQuZmlyc3RfY29sdW1uLCBANi5sYXN0X2Nv
bHVtbiAtIEA1LmZpcnN0X2NvbHVtbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTRVRfRVhDRVBUSU9OX0xPQ0FUSU9OKGZvckluLCBANC5maXJzdF9jb2x1bW4s
IEA1LmZpcnN0X2NvbHVtbiArIDEsIEA2Lmxhc3RfY29sdW1uKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KEdMT0JB
TF9EQVRBLCAkOC5tX3ZhckRlY2xhcmF0aW9ucywgKiQ0LCBEZWNsYXJhdGlvblN0YWNrczo6SGFz
SW5pdGlhbGl6ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JCQgPSBjcmVhdGVOb2RlRGVjbGFyYXRpb25JbmZvPFN0YXRlbWVudE5vZGUqPihmb3JJbiwgJDgu
bV92YXJEZWNsYXJhdGlvbnMsICQ4Lm1fZnVuY0RlY2xhcmF0aW9ucywgJDYubV9mZWF0dXJlSW5m
byB8ICQ4Lm1fZmVhdHVyZUluZm8sICQ2Lm1fbnVtQ29uc3RhbnRzICsgJDgubV9udW1Db25zdGFu
dHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBjcmVh
dGVOb2RlRGVjbGFyYXRpb25JbmZvPFN0YXRlbWVudE5vZGUqPihmb3JJbiwgJDgubV92YXJEZWNs
YXJhdGlvbnMsICQ4Lm1fZnVuY0RlY2xhcmF0aW9ucywgKCgqJDQgPT0gR0xPQkFMX0RBVEEtPnBy
b3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJlIDogMCkgfCAkNi5tX2Zl
YXR1cmVJbmZvIHwgJDgubV9mZWF0dXJlSW5mbywgJDYubV9udW1Db25zdGFudHMgKyAkOC5tX251
bUNvbnN0YW50cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
QkcoJCQubV9ub2RlLCBAMSwgQDcpOyB9CiAgIHwgRk9SICcoJyBWQVIgSURFTlQgSW5pdGlhbGl6
ZXJOb0luIElOVE9LRU4gRXhwciAnKScgU3RhdGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyBGb3JJbk5vZGUgKmZvckluID0gbmV3IEZvckluTm9kZShHTE9C
QUxfREFUQSwgKiQ0LCAkNS5tX25vZGUsICQ3Lm1fbm9kZSwgJDkubV9ub2RlLCBANS5maXJzdF9j
b2x1bW4sIEA1LmZpcnN0X2NvbHVtbiAtIEA0LmZpcnN0X2NvbHVtbiwgQDUubGFzdF9jb2x1bW4g
LSBANS5maXJzdF9jb2x1bW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0VUX0VYQ0VQVElPTl9MT0NBVElPTihmb3JJbiwgQDQuZmlyc3RfY29sdW1uLCBANi5m
aXJzdF9jb2x1bW4gKyAxLCBANy5sYXN0X2NvbHVtbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdChHTE9CQUxfREFU
QSwgJDkubV92YXJEZWNsYXJhdGlvbnMsICokNCwgRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRp
YWxpemVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0g
Y3JlYXRlTm9kZURlY2xhcmF0aW9uSW5mbzxTdGF0ZW1lbnROb2RlKj4oZm9ySW4sICQ5Lm1fdmFy
RGVjbGFyYXRpb25zLCAkOS5tX2Z1bmNEZWNsYXJhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICQ1Lm1fZmVhdHVyZUluZm8gfCAkNy5tX2ZlYXR1cmVJbmZvIHwgJDkubV9m
ZWF0dXJlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgqJDQgPT0gR0xP
QkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJlIDog
MCkgfCAkNS5tX2ZlYXR1cmVJbmZvIHwgJDcubV9mZWF0dXJlSW5mbyB8ICQ5Lm1fZmVhdHVyZUlu
Zm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ1Lm1fbnVtQ29uc3RhbnRzICsg
JDcubV9udW1Db25zdGFudHMgKyAkOS5tX251bUNvbnN0YW50cyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEQkcoJCQubV9ub2RlLCBAMSwgQDgpOyB9CiA7CkBA
IC0xMTU3LDIzICsxMTU3LDI1IEBAIERlYnVnZ2VyU3RhdGVtZW50OgogOwogCiBGdW5jdGlvbkRl
Y2xhcmF0aW9uOgotICAgIEZVTkNUSU9OIElERU5UICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9u
Qm9keSBDTE9TRUJSQUNFIHsgJCQgPSBuZXcgRnVuY0RlY2xOb2RlKEdMT0JBTF9EQVRBLCAqJDIs
ICQ2LCBMRVhFUi0+c291cmNlUmFuZ2UoJDUsICQ3KSk7IERCRygkNiwgQDUsIEA3KTsgfQorICAg
IEZVTkNUSU9OIElERU5UICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNF
IHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNEZWNsTm9kZShHTE9CQUxfREFU
QSwgKiQyLCAkNiwgTEVYRVItPnNvdXJjZVJhbmdlKCQ1LCAkNykpLCAoKCokMiA9PSBHTE9CQUxf
REFUQS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKSA/IEFyZ3VtZW50c0ZlYXR1cmUgOiAwKSB8
IENsb3N1cmVGZWF0dXJlLCAwKTsgREJHKCQ2LCBANSwgQDcpOyB9CiAgIHwgRlVOQ1RJT04gSURF
TlQgJygnIEZvcm1hbFBhcmFtZXRlckxpc3QgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xP
U0VCUkFDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBu
ZXcgRnVuY0RlY2xOb2RlKEdMT0JBTF9EQVRBLCAqJDIsICQ3LCBMRVhFUi0+c291cmNlUmFuZ2Uo
JDYsICQ4KSwgJDQuaGVhZCk7IERCRygkNywgQDYsIEA4KTsgfQorICAgICAgeyAkJCA9IGNyZWF0
ZU5vZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0RlY2xOb2RlKEdMT0JBTF9EQVRBLCAqJDIsICQ3LCBM
RVhFUi0+c291cmNlUmFuZ2UoJDYsICQ4KSwgJDQubV9ub2RlLmhlYWQpLCAoKCokMiA9PSBHTE9C
QUxfREFUQS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKSA/IEFyZ3VtZW50c0ZlYXR1cmUgOiAw
KSB8ICQ0Lm1fZmVhdHVyZUluZm8gfCBDbG9zdXJlRmVhdHVyZSwgMCk7IERCRygkNywgQDYsIEA4
KTsgfQogOwogCiBGdW5jdGlvbkV4cHI6CiAgICAgRlVOQ1RJT04gJygnICcpJyBPUEVOQlJBQ0Ug
RnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbyhuZXcg
RnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCBHTE9CQUxfREFUQS0+cHJvcGVydHlOYW1lcy0+bnVs
bElkZW50aWZpZXIsICQ1LCBMRVhFUi0+c291cmNlUmFuZ2UoJDQsICQ2KSksIENsb3N1cmVGZWF0
dXJlLCAwKTsgREJHKCQ1LCBANCwgQDYpOyB9Ci0gIHwgRlVOQ1RJT04gJygnIEZvcm1hbFBhcmFt
ZXRlckxpc3QgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3Jl
YXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRXhwck5vZGUoR0xPQkFMX0RBVEEsIEdMT0JBTF9E
QVRBLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllciwgJDYsIExFWEVSLT5zb3VyY2VSYW5n
ZSgkNSwgJDcpLCAkMy5oZWFkKSwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDYsIEA1LCBANyk7
IH0KLSAgfCBGVU5DVElPTiBJREVOVCAnKCcgJyknIE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xP
U0VCUkFDRSB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRXhwck5vZGUoR0xP
QkFMX0RBVEEsICokMiwgJDYsIExFWEVSLT5zb3VyY2VSYW5nZSgkNSwgJDcpKSwgQ2xvc3VyZUZl
YXR1cmUsIDApOyBEQkcoJDYsIEA1LCBANyk7IH0KLSAgfCBGVU5DVElPTiBJREVOVCAnKCcgRm9y
bWFsUGFyYW1ldGVyTGlzdCAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFIHsg
JCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9kZShHTE9CQUxfREFUQSwg
KiQyLCAkNywgTEVYRVItPnNvdXJjZVJhbmdlKCQ2LCAkOCksICQ0LmhlYWQpLCBDbG9zdXJlRmVh
dHVyZSwgMCk7IERCRygkNywgQDYsIEA4KTsgfQorICB8IEZVTkNUSU9OICcoJyBGb3JtYWxQYXJh
bWV0ZXJMaXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNy
ZWF0ZU5vZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCBHTE9CQUxf
REFUQS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsICQ2LCBMRVhFUi0+c291cmNlUmFu
Z2UoJDUsICQ3KSwgJDMubV9ub2RlLmhlYWQpLCAkMy5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZl
YXR1cmUsIDApOyBEQkcoJDYsIEA1LCBANyk7IH0KKyAgfCBGVU5DVElPTiBJREVOVCAnKCcgJykn
IE9QRU5CUkFDRSBGdW5jdGlvbkJvZHkgQ0xPU0VCUkFDRSB7ICQkID0gY3JlYXRlTm9kZUZlYXR1
cmVJbmZvKG5ldyBGdW5jRXhwck5vZGUoR0xPQkFMX0RBVEEsICokMiwgJDYsIExFWEVSLT5zb3Vy
Y2VSYW5nZSgkNSwgJDcpKSwgKCgqJDIgPT0gR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFy
Z3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJlIDogMCkgfCBDbG9zdXJlRmVhdHVyZSwgMCk7IERC
RygkNiwgQDUsIEA3KTsgfQorICB8IEZVTkNUSU9OIElERU5UICcoJyBGb3JtYWxQYXJhbWV0ZXJM
aXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5v
ZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCAqJDIsICQ3LCBMRVhF
Ui0+c291cmNlUmFuZ2UoJDYsICQ4KSwgJDQubV9ub2RlLmhlYWQpLCAoKCokMiA9PSBHTE9CQUxf
REFUQS0+cHJvcGVydHlOYW1lcy0+YXJndW1lbnRzKSA/IEFyZ3VtZW50c0ZlYXR1cmUgOiAwKSB8
ICQ0Lm1fZmVhdHVyZUluZm8gfCBDbG9zdXJlRmVhdHVyZSwgMCk7IERCRygkNywgQDYsIEA4KTsg
fQogOwogCiBGb3JtYWxQYXJhbWV0ZXJMaXN0OgotICAgIElERU5UICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQuaGVhZCA9IG5ldyBQYXJhbWV0ZXJOb2RlKEdMT0JBTF9EQVRBLCAq
JDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudGFpbCA9
ICQkLmhlYWQ7IH0KLSAgfCBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcsJyBJREVOVCAgICAgICB7ICQk
LmhlYWQgPSAkMS5oZWFkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJCQudGFpbCA9IG5ldyBQYXJhbWV0ZXJOb2RlKEdMT0JBTF9EQVRBLCAkMS50YWlsLCAqJDMp
OyB9CisgICAgSURFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5tX25vZGUu
aGVhZCA9IG5ldyBQYXJhbWV0ZXJOb2RlKEdMT0JBTF9EQVRBLCAqJDEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0dXJlSW5mbyA9ICgqJDEgPT0g
R0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPmFyZ3VtZW50cykgPyBBcmd1bWVudHNGZWF0dXJl
IDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9k
ZS50YWlsID0gJCQubV9ub2RlLmhlYWQ7IH0KKyAgfCBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcsJyBJ
REVOVCAgICAgICB7ICQkLm1fbm9kZS5oZWFkID0gJDEubV9ub2RlLmhlYWQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2ZlYXR1cmVJbmZvID0gJDEubV9m
ZWF0dXJlSW5mbyB8ICgoKiQzID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVu
dHMpID8gQXJndW1lbnRzRmVhdHVyZSA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJCQubV9ub2RlLnRhaWwgPSBuZXcgUGFyYW1ldGVyTm9kZShHTE9CQUxf
REFUQSwgJDEubV9ub2RlLnRhaWwsICokMyk7ICB9CiA7CiAKIEZ1bmN0aW9uQm9keToKQEAgLTEy
MTksNyArMTIyMSw3IEBAIFNvdXJjZUVsZW1lbnRzOgogOwogCiBTb3VyY2VFbGVtZW50OgotICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24gICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRGVj
bGFyYXRpb25JbmZvPFN0YXRlbWVudE5vZGUqPigkMSwgMCwgbmV3IFBhcnNlclJlZkNvdW50ZWRE
YXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPihHTE9CQUxfREFUQSksIENsb3N1
cmVGZWF0dXJlLCAwKTsgJCQubV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhLmFwcGVuZCgkMSk7IH0K
KyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9k
ZURlY2xhcmF0aW9uSW5mbzxTdGF0ZW1lbnROb2RlKj4oJDEubV9ub2RlLCAwLCBuZXcgUGFyc2Vy
UmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s+KEdMT0JBTF9E
QVRBKSwgJDEubV9mZWF0dXJlSW5mbywgMCk7ICQkLm1fZnVuY0RlY2xhcmF0aW9ucy0+ZGF0YS5h
cHBlbmQoJDEubV9ub2RlKTsgfQogICB8IFN0YXRlbWVudCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgJCQgPSAkMTsgfQogOwogIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzcxMDgpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOC0w
OS0zMCAgQ2FtZXJvbiBad2FyaWNoICA8endhcmljaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNvbWUgdGVzdHMgZm9yICdm
LmFyZ3VtZW50cycuCisKKyAgICAgICAgKiBmYXN0L2pzL2Z1bmN0aW9uLWRvdC1hcmd1bWVudHMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2Z1bmN0aW9uLWRvdC1hcmd1
bWVudHMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZXNvdXJjZXMvZnVuY3Rpb24t
ZG90LWFyZ3VtZW50cy5qczogQWRkZWQuCisKIDIwMDgtMDktMjkgIENocmlzIEZsZWl6YWNoICA8
Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFu
LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1kb3QtYXJndW1lbnRzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRvdC1h
cmd1bWVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9mdW5jdGlvbi1kb3QtYXJndW1lbnRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNyBAQAorVGhpcyB0ZXN0IGNoZWNrcyBjb3JuZXIgY2FzZXMgb2YgJ2YuYXJndW1lbnRz
Jy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgYXNzaWduX3Rlc3QoKSBp
cyB0cnVlCitQQVNTIGFzc2lnbl92YXJfaW5pdF90ZXN0KCkgaXMgdHJ1ZQorUEFTUyBhc3NpZ25f
dmFyX2luaXRfdGVzdDIoKSBpcyB0cnVlCitQQVNTIGFzc2lnbl9jb25zdF9pbml0X3Rlc3QoKSBp
cyB0cnVlCitQQVNTIGFzc2lnbl9jb25zdF9pbml0X3Rlc3QyKCkgaXMgdHJ1ZQorUEFTUyBhc3Np
Z25fZm9yX2luaXRfdGVzdCgpIGlzIHRydWUKK1BBU1MgYXNzaWduX2Zvcl9pbml0X3Rlc3QyKCkg
aXMgdHJ1ZQorUEFTUyBhc3NpZ25fZm9yX2luX2luaXRfdGVzdCgpIGlzIHRydWUKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRvdC1hcmd1bWVudHMuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRvdC1hcmd1bWVudHMuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZnVuY3Rpb24tZG90LWFyZ3VtZW50cy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2Z1bmN0aW9uLWRvdC1hcmd1bWVudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvZnVuY3Rpb24tZG90LWFyZ3Vt
ZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9mdW5j
dGlvbi1kb3QtYXJndW1lbnRzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZXNvdXJjZXMvZnVuY3Rpb24tZG90LWFyZ3VtZW50cy5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDkgQEAKK2Rlc2NyaXB0aW9uKAorIlRoaXMgdGVzdCBjaGVja3MgY29ybmVyIGNhc2Vz
IG9mICdmLmFyZ3VtZW50cycuIgorKTsKKworZnVuY3Rpb24gYXNzaWduX3Rlc3QoKQoreworICAg
IGZ1bmN0aW9uIGcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc2lnbl90ZXN0LmFyZ3VtZW50
czsKKyAgICB9CisKKyAgICBhcmd1bWVudHMgPSB0cnVlOworICAgIHJldHVybiBnKCk7Cit9CisK
K3Nob3VsZEJlVHJ1ZSgiYXNzaWduX3Rlc3QoKSIpOworCitmdW5jdGlvbiBhc3NpZ25fdmFyX2lu
aXRfdGVzdCgpCit7CisgICAgZnVuY3Rpb24gZygpCisgICAgeworICAgICAgICByZXR1cm4gYXNz
aWduX3Zhcl9pbml0X3Rlc3QuYXJndW1lbnRzOworICAgIH0KKworICAgIHZhciBhcmd1bWVudHMg
PSB0cnVlOworICAgIHJldHVybiBnKCk7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiYXNzaWduX3Zhcl9p
bml0X3Rlc3QoKSIpOworCitmdW5jdGlvbiBhc3NpZ25fdmFyX2luaXRfdGVzdDIoKQoreworICAg
IGZ1bmN0aW9uIGcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc2lnbl92YXJfaW5pdF90ZXN0
Mi5hcmd1bWVudHM7CisgICAgfQorCisgICAgdmFyIGEsIGFyZ3VtZW50cyA9IHRydWU7CisgICAg
cmV0dXJuIGcoKTsKK30KKworc2hvdWxkQmVUcnVlKCJhc3NpZ25fdmFyX2luaXRfdGVzdDIoKSIp
OworCitmdW5jdGlvbiBhc3NpZ25fY29uc3RfaW5pdF90ZXN0KCkKK3sKKyAgICBmdW5jdGlvbiBn
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhc3NpZ25fY29uc3RfaW5pdF90ZXN0LmFyZ3VtZW50
czsKKyAgICB9CisKKyAgICBjb25zdCBhcmd1bWVudHMgPSB0cnVlOworICAgIHJldHVybiBnKCk7
Cit9CisKK3Nob3VsZEJlVHJ1ZSgiYXNzaWduX2NvbnN0X2luaXRfdGVzdCgpIik7CisKK2Z1bmN0
aW9uIGFzc2lnbl9jb25zdF9pbml0X3Rlc3QyKCkKK3sKKyAgICBmdW5jdGlvbiBnKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhc3NpZ25fY29uc3RfaW5pdF90ZXN0Mi5hcmd1bWVudHM7CisgICAg
fQorCisgICAgY29uc3QgYSwgYXJndW1lbnRzID0gdHJ1ZTsKKyAgICByZXR1cm4gZygpOworfQor
CitzaG91bGRCZVRydWUoImFzc2lnbl9jb25zdF9pbml0X3Rlc3QyKCkiKTsKKworZnVuY3Rpb24g
YXNzaWduX2Zvcl9pbml0X3Rlc3QoKQoreworICAgIGZ1bmN0aW9uIGcoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFzc2lnbl9mb3JfaW5pdF90ZXN0LmFyZ3VtZW50czsKKyAgICB9CisKKyAgICBm
b3IgKHZhciBhcmd1bWVudHMgPSB0cnVlOyBmYWxzZTspIHsgfQorICAgIHJldHVybiBnKCk7Cit9
CisKK3Nob3VsZEJlVHJ1ZSgiYXNzaWduX2Zvcl9pbml0X3Rlc3QoKSIpOworCitmdW5jdGlvbiBh
c3NpZ25fZm9yX2luaXRfdGVzdDIoKQoreworICAgIGZ1bmN0aW9uIGcoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFzc2lnbl9mb3JfaW5pdF90ZXN0Mi5hcmd1bWVudHM7CisgICAgfQorCisgICAg
Zm9yICh2YXIgYSwgYXJndW1lbnRzID0gdHJ1ZTsgZmFsc2U7KSB7IH0KKyAgICByZXR1cm4gZygp
OworfQorCitzaG91bGRCZVRydWUoImFzc2lnbl9mb3JfaW5pdF90ZXN0MigpIik7CisKK2Z1bmN0
aW9uIGFzc2lnbl9mb3JfaW5faW5pdF90ZXN0KCkKK3sKKyAgICBmdW5jdGlvbiBnKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhc3NpZ25fZm9yX2luX2luaXRfdGVzdC5hcmd1bWVudHM7CisgICAg
fQorCisgICAgZm9yIChhcmd1bWVudHMgPSB0cnVlOyBmYWxzZTspIHsgfQorICAgIHJldHVybiBn
KCk7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiYXNzaWduX2Zvcl9pbl9pbml0X3Rlc3QoKSIpOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23966</attachid>
            <date>2008-09-30 22:21:58 -0700</date>
            <delta_ts>2008-10-01 12:04:14 -0700</delta_ts>
            <desc>Patch in progress</desc>
            <filename>thorny.diff</filename>
            <type>text/plain</type>
            <size>26867</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NUSS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ1RJLmNwcAkocmV2aXNpb24gMzcx
MzQpCisrKyBWTS9DVEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg2LDggKzExODYsMTEgQEAg
dm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXQ6IHsKLSAgICAgICAgICAgIC8vIENoZWNrIGZv
ciBhbiBhY3RpdmF0aW9uIC0gaWYgdGhlcmUgaXMgb25lLCBqdW1wIHRvIHRoZSBob29rIGJlbG93
LgotICAgICAgICAgICAgbV9qaXQuY21wbF9pMzJtKDAsIFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxD
YWxsZWVBY3RpdmF0aW9uICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2
OjplZGkpOworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gYWN0aXZhdGlvbiBvciBhbiAn
YXJndW1lbnRzJyBvYmplY3QsIHdlIHRlYXIgaXQKKyAgICAgICAgICAgIC8vIG9mZiBieSBqdW1w
aW5nIHRvIHRoZSBob29rIGJlbG93LgorICAgICAgICAgICAgbV9qaXQubW92bF9tcihSZWdpc3Rl
ckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbiAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ppdC5vcmxf
bXIoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpLCBYODY6OmVheCk7CisgICAgICAgICAgICBt
X2ppdC5jbXBsX2kzMnIoMCwgWDg2OjplYXgpOwogICAgICAgICAgICAgWDg2QXNzZW1ibGVyOjpK
bXBTcmMgYWN0aXZhdGlvbiA9IG1faml0LmVtaXRVbmxpbmtlZEpuZSgpOwogICAgICAgICAgICAg
WDg2QXNzZW1ibGVyOjpKbXBEc3QgYWN0aXZhdGVkID0gbV9qaXQubGFiZWwoKTsKIApAQCAtMTIx
Nyw5ICsxMjIwLDkgQEAgdm9pZCBDVEk6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAgICAgbV9qaXQucHVzaGxfcihYODY6OmVkeCk7CiAgICAgICAgICAgICBtX2ppdC5yZXQoKTsK
IAotICAgICAgICAgICAgLy8gQWN0aXZhdGlvbiBob29rCisgICAgICAgICAgICAvLyBBY3RpdmF0
aW9uIGFuZCAnYXJndW1lbnRzJyBob29rCiAgICAgICAgICAgICBtX2ppdC5saW5rKGFjdGl2YXRp
b24sIG1faml0LmxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdENhbGwoaSwgTWFjaGluZTo6Y3Rp
X29wX3JldF9hY3RpdmF0aW9uKTsKKyAgICAgICAgICAgIGVtaXRDYWxsKGksIE1hY2hpbmU6OmN0
aV9vcF9yZXRfYWN0aXZhdGlvbl9hcmd1bWVudHMpOwogICAgICAgICAgICAgbV9qaXQubGluayht
X2ppdC5lbWl0VW5saW5rZWRKbXAoKSwgYWN0aXZhdGVkKTsKIAogICAgICAgICAgICAgLy8gUHJv
ZmlsaW5nIGhvb2sKSW5kZXg6IFZNL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAzNzEzNCkKKysrIFZNL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDEsNiArMjQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCB0aGlzUmVn
aXN0ZXI7CiAgICAgICAgIGJvb2wgbmVlZHNGdWxsU2NvcGVDaGFpbjsKICAgICAgICAgYm9vbCB1
c2VzRXZhbDsKKyAgICAgICAgYm9vbCB1c2VzQXJndW1lbnRzOwogICAgICAgICBDb2RlVHlwZSBj
b2RlVHlwZTsKICAgICAgICAgUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2U7CiAgICAgICAg
IHVuc2lnbmVkIHNvdXJjZU9mZnNldDsKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAzNzEzNCkKKysrIFZNL0Nv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMTAgKzI5MiwxMiBAQCBDb2Rl
R2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgZW1pdE9wY29kZShvcF9p
bml0KTsKICAgICBjb2RlQmxvY2stPmdsb2JhbERhdGEgPSBtX2dsb2JhbERhdGE7CiAKLSAgICBp
ZiAoZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCkpIHsKKyAgICBib29sIHVzZXNBcmd1bWVu
dHMgPSBmdW5jdGlvbkJvZHktPnVzZXNBcmd1bWVudHMoKTsKKyAgICBjb2RlQmxvY2stPnVzZXNB
cmd1bWVudHMgPSB1c2VzQXJndW1lbnRzOworICAgIGlmICh1c2VzQXJndW1lbnRzKSB7CiAgICAg
ICAgIGVtaXRPcGNvZGUob3BfaW5pdF9hcmd1bWVudHMpOwotICAgICAgICBtX2NvZGVCbG9jay0+
bmVlZHNGdWxsU2NvcGVDaGFpbiA9IHRydWU7CiAgICAgICAgIG1fYXJndW1lbnRzUmVnaXN0ZXIu
c2V0SW5kZXgoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyk7CisgICAgICAg
IC8vIGFkZFZhcihwcm9wZXJ0eU5hbWVzKCkuVVRDLCBmYWxzZSk7CiAgICAgICAgIHN5bWJvbFRh
YmxlLT5hZGQocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cy51c3RyaW5nKCkucmVwKCksIFN5bWJv
bFRhYmxlRW50cnkoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cykpOwogICAg
IH0KIApJbmRleDogVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5jcHAJ
KHJldmlzaW9uIDM3MTM0KQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgw
MSwxMCArODAxLDEzIEBAIE5FVkVSX0lOTElORSBib29sIE1hY2hpbmU6OnVud2luZENhbGxGcmEK
ICAgICBpZiAob2xkQ29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQogICAgICAgICBzY29w
ZUNoYWluLT5kZXJlZigpOwogCi0gICAgLy8gSWYgdGhpcyBjYWxsIGZyYW1lIGNyZWF0ZWQgYW4g
YWN0aXZhdGlvbiwgdGVhciBpdCBvZmYuCi0gICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biA9IHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFjdGl2YXRpb25dLmpzVmFsdWUoZXhlYykpKSB7CisgICAgLy8gSWYgdGhpcyBjYWxsIGZy
YW1lIGNyZWF0ZWQgYW4gYWN0aXZhdGlvbiBvciBhbiAnYXJndW1lbnRzJyBvYmplY3QsIHRlYXIg
aXQgb2ZmLgorICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxK
U0FjdGl2YXRpb24qPihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5n
ZXRKU1ZhbHVlKCkpKSB7CiAgICAgICAgIEFTU0VSVChhY3RpdmF0aW9uLT5pc09iamVjdCgmSlNB
Y3RpdmF0aW9uOjppbmZvKSk7Ci0gICAgICAgIGFjdGl2YXRpb24tPmNvcHlSZWdpc3RlcnMoKTsK
KyAgICAgICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lzdGVycyhyW1JlZ2lzdGVyRmlsZTo6T3B0aW9u
YWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSk7CisgICAgfSBlbHNlIGlmIChKU1ZhbHVl
KiBhcmd1bWVudHMgPSByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdl
dEpTVmFsdWUoKSkgeworICAgICAgICBpZiAoYXJndW1lbnRzLT5pc09iamVjdCgmQXJndW1lbnRz
OjppbmZvKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50cykt
PmNvcHlSZWdpc3RlcnMoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCogcmV0dXJuUEMgPSByW1Jl
Z2lzdGVyRmlsZTo6UmV0dXJuUENdLnYoKTsKQEAgLTMzNjAsMTAgKzMzNjMsMTQgQEAgSlNWYWx1
ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAKICAgICAgICAg
aW50IHJlc3VsdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKIAotICAgICAgICBpZiAoSlNBY3RpdmF0
aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZp
bGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uanNWYWx1ZShleGVjKSkpIHsKKyAgICAgICAg
Ly8gSWYgdGhpcyBjYWxsIGZyYW1lIGNyZWF0ZWQgYW4gYWN0aXZhdGlvbiBvciBhbiAnYXJndW1l
bnRzJyBvYmplY3QsIHRlYXIgaXQgb2ZmLgorICAgICAgICBpZiAoSlNBY3RpdmF0aW9uKiBhY3Rp
dmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKSkgewogICAgICAgICAgICAgQVNTRVJU
KCFjb2RlQmxvY2sociktPm5lZWRzRnVsbFNjb3BlQ2hhaW4gfHwgc2NvcGVDaGFpbihyKS0+b2Jq
ZWN0ID09IGFjdGl2YXRpb24pOwogICAgICAgICAgICAgQVNTRVJUKGFjdGl2YXRpb24tPmlzT2Jq
ZWN0KCZKU0FjdGl2YXRpb246OmluZm8pKTsKLSAgICAgICAgICAgIGFjdGl2YXRpb24tPmNvcHlS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGFjdGl2YXRpb24tPmNvcHlSZWdpc3RlcnMocltSZWdp
c3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpOworICAgICAg
ICB9IGVsc2UgaWYgKEpTVmFsdWUqIGFyZ3VtZW50cyA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25h
bENhbGxlZUFyZ3VtZW50c10uZ2V0SlNWYWx1ZSgpKSB7CisgICAgICAgICAgICBpZiAoYXJndW1l
bnRzLT5pc09iamVjdCgmQXJndW1lbnRzOjppbmZvKSkKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5jb3B5UmVnaXN0ZXJzKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkKQEAgLTM0MTcsOCArMzQy
NCwxMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
IE5FWFRfT1BDT0RFOwogICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfaW5pdF9hcmd1bWVudHMp
IHsKLSAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3Rp
dmF0aW9uKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNW
YWx1ZSgpKTsKLSAgICAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRz
XSA9IGFjdGl2YXRpb24tPmNyZWF0ZUFyZ3VtZW50c09iamVjdChleGVjKTsKKyAgICAgICAgSlNW
YWx1ZSogYWN0aXZhdGlvbiA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRp
b25dLmdldEpTVmFsdWUoKTsKKyAgICAgICAgaWYgKGFjdGl2YXRpb24pIHsKKyAgICAgICAgICAg
IEFTU0VSVChhY3RpdmF0aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7CisgICAg
ICAgICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gbmV3IChl
eGVjKSBBcmd1bWVudHMoZXhlYywgc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlv
bikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25h
bENhbGxlZUFyZ3VtZW50c10gPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCByKTsKKyAgICAg
ICAgCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CkBAIC0zODQ4
LDE1ICszODYwLDE2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnJldHJpZXZlQXJndW1lbnRzKEV4ZWMK
ICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEFyZ3VtZW50cyog
YXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4ocltSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQXJndW1lbnRzXS5qc1ZhbHVlKGV4ZWMpKTsKKyAgICBKU1ZhbHVlKiBhcmd1bWVu
dHMgPSBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSk7CiAgICAgaWYgKCFhcmd1bWVudHMpIHsKICAgICAg
ICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4o
cltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKTsK
LSAgICAgICAgaWYgKCFhY3RpdmF0aW9uKSB7Ci0gICAgICAgICAgICBhY3RpdmF0aW9uID0gbmV3
IChleGVjKSBKU0FjdGl2YXRpb24oZXhlYywgZnVuY3Rpb24tPm1fYm9keSwgcik7Ci0gICAgICAg
ICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXSA9IGFjdGl2YXRp
b247CisgICAgICAgIGlmICghYWN0aXZhdGlvbikKKyAgICAgICAgICAgIGFyZ3VtZW50cyA9IG5l
dyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChhY3RpdmF0aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7CisgICAg
ICAgICAgICBhcmd1bWVudHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCBzdGF0aWNfY2Fz
dDxKU0FjdGl2YXRpb24qPihhY3RpdmF0aW9uKSk7CiAgICAgICAgIH0KIAotICAgICAgICBhcmd1
bWVudHMgPSBhY3RpdmF0aW9uLT5jcmVhdGVBcmd1bWVudHNPYmplY3QoZXhlYyk7CiAgICAgICAg
IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBhcmd1bWVudHM7CiAg
ICAgfQogCkBAIC00NTk5LDIxICs0NjEyLDI4IEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX2luaXRf
YXJndW1lbnRzKENUSV8KIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKICAgICBS
ZWdpc3RlciogciA9IEFSR19yOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IHN0YXRp
Y19jYXN0PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2
YXRpb25dLmdldEpTVmFsdWUoKSk7Ci0gICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVl
QXJndW1lbnRzXSA9IGFjdGl2YXRpb24tPmNyZWF0ZUFyZ3VtZW50c09iamVjdChleGVjKTsKKwor
ICAgIEpTVmFsdWUqIGFjdGl2YXRpb24gPSByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVB
Y3RpdmF0aW9uXS5nZXRKU1ZhbHVlKCk7CisgICAgaWYgKGFjdGl2YXRpb24pIHsKKyAgICAgICAg
QVNTRVJUKGFjdGl2YXRpb24tPmlzT2JqZWN0KCZKU0FjdGl2YXRpb246OmluZm8pKTsKKyAgICAg
ICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IG5ldyAoZXhlYykg
QXJndW1lbnRzKGV4ZWMsIHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24pKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1l
bnRzXSA9IG5ldyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHIpOwogfQogCi12b2lkIE1hY2hpbmU6
OmN0aV9vcF9yZXRfYWN0aXZhdGlvbihDVElfQVJHUykKK3ZvaWQgTWFjaGluZTo6Y3RpX29wX3Jl
dF9hY3RpdmF0aW9uX2FyZ3VtZW50cyhDVElfQVJHUykKIHsKLSAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBBUkdfZXhlYzsKICAgICBSZWdpc3RlciogciA9IEFSR19yOwogCi0gICAgSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uanNWYWx1ZShleGVjKSk7Ci0gICAgQVNTRVJUKGFj
dGl2YXRpb24pOwotCi0gICAgQVNTRVJUKCFjb2RlQmxvY2sociktPm5lZWRzRnVsbFNjb3BlQ2hh
aW4gfHwgc2NvcGVDaGFpbihyKS0+b2JqZWN0ID09IGFjdGl2YXRpb24pOwotICAgIEFTU0VSVChh
Y3RpdmF0aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7Ci0gICAgYWN0aXZhdGlv
bi0+Y29weVJlZ2lzdGVycygpOworICAgIC8vIElmIHRoaXMgY2FsbCBmcmFtZSBjcmVhdGVkIGFu
IGFjdGl2YXRpb24gb3IgYW4gJ2FyZ3VtZW50cycgb2JqZWN0LCB0ZWFyIGl0IG9mZi4KKyAgICBp
ZiAoSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4o
cltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKSkg
eworICAgICAgICBBU1NFUlQoIWNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbiB8fCBz
Y29wZUNoYWluKHIpLT5vYmplY3QgPT0gYWN0aXZhdGlvbik7CisgICAgICAgIEFTU0VSVChhY3Rp
dmF0aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7CisgICAgICAgIGFjdGl2YXRp
b24tPmNvcHlSZWdpc3RlcnMocltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRz
XS5nZXRKU1ZhbHVlKCkpOworICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogYXJndW1lbnRzID0gcltS
ZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpIHsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50cy0+aXNPYmplY3QoJkFyZ3VtZW50czo6aW5mbykpCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxBcmd1bWVudHMqPihhcmd1bWVudHMpLT5jb3B5UmVnaXN0ZXJzKCk7
CisgICAgfQogfQogCiB2b2lkIE1hY2hpbmU6OmN0aV9vcF9yZXRfcHJvZmlsZXIoQ1RJX0FSR1Mp
CkluZGV4OiBWTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5oCShyZXZpc2lv
biAzNzEzNCkKKysrIFZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgdm9pZCogU0ZYX0NBTEwgY3RpX29w
X2NhbGxfSlNGdW5jdGlvbihDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhf
Q0FMTCBjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0aW9uKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGlj
IHZvaWQgU0ZYX0NBTEwgY3RpX29wX2luaXRfYXJndW1lbnRzKENUSV9BUkdTKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3JldF9hY3RpdmF0aW9uKENUSV9BUkdTKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3JldF9hY3RpdmF0aW9uX2FyZ3VtZW50
cyhDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9yZXRfcHJv
ZmlsZXIoQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcmV0
X3Njb3BlQ2hhaW4oQ1RJX0FSR1MpOwogICAgICAgICBzdGF0aWMgSlNWYWx1ZSogU0ZYX0NBTEwg
Y3RpX29wX25ld19hcnJheShDVElfQVJHUyk7CkluZGV4OiBranMvQXJndW1lbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvQXJndW1lbnRzLmNwcAkocmV2aXNpb24gMzcxMzQpCisrKyBranMvQXJn
dW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNTMgKzM3LDYgQEAgQVNTRVJUX0NMQVNT
X0ZJVFNfSU5fQ0VMTChBcmd1bWVudHMpOwogCiBjb25zdCBDbGFzc0luZm8gQXJndW1lbnRzOjpp
bmZvID0geyAiQXJndW1lbnRzIiwgMCwgMCwgMCB9OwogCi1zdHJ1Y3QgQXJndW1lbnRzRGF0YSA6
IE5vbmNvcHlhYmxlIHsKLSAgICBBcmd1bWVudHNEYXRhKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlv
biwgdW5zaWduZWQgbnVtUGFyYW1ldGVycywgaW50IGZpcnN0UGFyYW1ldGVySW5kZXgsIHVuc2ln
bmVkIG51bUFyZ3VtZW50cywgSlNGdW5jdGlvbiogY2FsbGVlKQotICAgICAgICA6IGFjdGl2YXRp
b24oYWN0aXZhdGlvbikKLSAgICAgICAgLCBudW1QYXJhbWV0ZXJzKG51bVBhcmFtZXRlcnMpCi0g
ICAgICAgICwgZmlyc3RQYXJhbWV0ZXJJbmRleChmaXJzdFBhcmFtZXRlckluZGV4KQotICAgICAg
ICAsIG51bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgZXh0cmFBcmd1bWVudHMo
MCkKLSAgICAgICAgLCBjYWxsZWUoY2FsbGVlKQotICAgICAgICAsIG92ZXJyb2RlTGVuZ3RoKGZh
bHNlKQotICAgICAgICAsIG92ZXJyb2RlQ2FsbGVlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb247Ci0KLSAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJz
OwotICAgIGludCBmaXJzdFBhcmFtZXRlckluZGV4OwotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50
czsKLSAgICBSZWdpc3RlciogZXh0cmFBcmd1bWVudHM7Ci0gICAgT3duQXJyYXlQdHI8Ym9vbD4g
ZGVsZXRlZEFyZ3VtZW50czsKLSAgICBSZWdpc3RlciBleHRyYUFyZ3VtZW50c0ZpeGVkQnVmZmVy
WzRdOwotCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlOwotICAgIGJvb2wgb3ZlcnJvZGVMZW5ndGgg
OiAxOwotICAgIGJvb2wgb3ZlcnJvZGVDYWxsZWUgOiAxOwotfTsKLQotLy8gRUNNQSAxMC4xLjgK
LUFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rp
b24sIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiwgaW50IGZpcnN0UGFyYW1ldGVySW5kZXgsIFJl
Z2lzdGVyKiBhcmd2LCBpbnQgYXJnYykKLSAgICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCi0gICAgLCBkKG5ldyBBcmd1bWVudHNE
YXRhKGFjdGl2YXRpb24sIGZ1bmN0aW9uLT5udW1QYXJhbWV0ZXJzKCksIGZpcnN0UGFyYW1ldGVy
SW5kZXgsIGFyZ2MsIGZ1bmN0aW9uKSkKLXsKLSAgICBBU1NFUlQoYWN0aXZhdGlvbik7Ci0gIAot
ICAgIGlmIChkLT5udW1Bcmd1bWVudHMgPiBkLT5udW1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHVu
c2lnbmVkIG51bUV4dHJhQXJndW1lbnRzID0gZC0+bnVtQXJndW1lbnRzIC0gZC0+bnVtUGFyYW1l
dGVyczsKLSAgICAgICAgUmVnaXN0ZXIqIGV4dHJhQXJndW1lbnRzOwotICAgICAgICBpZiAobnVt
RXh0cmFBcmd1bWVudHMgPiBzaXplb2YoZC0+ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcikgLyBz
aXplb2YoUmVnaXN0ZXIpKQotICAgICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSBuZXcgUmVnaXN0
ZXJbbnVtRXh0cmFBcmd1bWVudHNdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleHRyYUFy
Z3VtZW50cyA9IGQtPmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXI7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1FeHRyYUFyZ3VtZW50czsgKytpKQotICAgICAgICAgICAgZXh0
cmFBcmd1bWVudHNbaV0gPSBhcmd2W2QtPm51bVBhcmFtZXRlcnMgKyBpXTsKLSAgICAgICAgZC0+
ZXh0cmFBcmd1bWVudHMgPSBleHRyYUFyZ3VtZW50czsKLSAgICB9Ci19Ci0KIEFyZ3VtZW50czo6
fkFyZ3VtZW50cygpCiB7CiAgICAgaWYgKGQtPmV4dHJhQXJndW1lbnRzICE9IGQtPmV4dHJhQXJn
dW1lbnRzRml4ZWRCdWZmZXIpCkBAIC05NCw2ICs0Nyw5IEBAIHZvaWQgQXJndW1lbnRzOjptYXJr
KCkgCiB7CiAgICAgSlNPYmplY3Q6Om1hcmsoKTsKIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkLT5udW1QYXJhbWV0ZXJzOyArK2kpCisgICAgICAgIGQtPnJlZ2lzdGVyc1tpXS5tYXJr
KCk7CisKICAgICBpZiAoZC0+ZXh0cmFBcmd1bWVudHMpIHsKICAgICAgICAgdW5zaWduZWQgbnVt
RXh0cmFBcmd1bWVudHMgPSBkLT5udW1Bcmd1bWVudHMgLSBkLT5udW1QYXJhbWV0ZXJzOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmd1bWVudHM7ICsraSkgewpA
QCAtMTA1LDcgKzYxLDcgQEAgdm9pZCBBcmd1bWVudHM6Om1hcmsoKSAKICAgICBpZiAoIWQtPmNh
bGxlZS0+bWFya2VkKCkpCiAgICAgICAgIGQtPmNhbGxlZS0+bWFyaygpOwogCi0gICAgaWYgKCFk
LT5hY3RpdmF0aW9uLT5tYXJrZWQoKSkKKyAgICBpZiAoZC0+YWN0aXZhdGlvbiAmJiAhZC0+YWN0
aXZhdGlvbi0+bWFya2VkKCkpCiAgICAgICAgIGQtPmFjdGl2YXRpb24tPm1hcmsoKTsKIH0KIApA
QCAtMTE4LDE2ICs3NCwxNiBAQCB2b2lkIEFyZ3VtZW50czo6ZmlsbEFyZ0xpc3QoRXhlY1N0YXRl
KiBlCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZC0+bnVtUGFyYW1ldGVycyA9PSBkLT5udW1B
cmd1bWVudHMpIHsKLSAgICAgICAgICAgIGFyZ3MuaW5pdGlhbGl6ZSgmZC0+YWN0aXZhdGlvbi0+
cmVnaXN0ZXJBdChkLT5maXJzdFBhcmFtZXRlckluZGV4KSwgZC0+bnVtQXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIGFyZ3MuaW5pdGlhbGl6ZSgmZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVy
SW5kZXhdLCBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgdW5zaWduZWQgcGFyYW1ldGVyc0xlbmd0aCA9IG1pbihkLT5udW1QYXJhbWV0
ZXJzLCBkLT5udW1Bcmd1bWVudHMpOwogICAgICAgICB1bnNpZ25lZCBpID0gMDsKICAgICAgICAg
Zm9yICg7IGkgPCBwYXJhbWV0ZXJzTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBhcmdzLmFwcGVu
ZChkLT5hY3RpdmF0aW9uLT51bmNoZWNrZWRTeW1ib2xUYWJsZUdldFZhbHVlKGQtPmZpcnN0UGFy
YW1ldGVySW5kZXggKyBpKSk7CisgICAgICAgICAgICBhcmdzLmFwcGVuZChkLT5yZWdpc3RlcnNb
ZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldLmpzVmFsdWUoZXhlYykpOwogICAgICAgICBmb3Ig
KDsgaSA8IGQtPm51bUFyZ3VtZW50czsgKytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+
ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdLmdldEpTVmFsdWUoKSk7CisgICAg
ICAgICAgICBhcmdzLmFwcGVuZChkLT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVy
c10uanNWYWx1ZShleGVjKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzNSwxMyAr
OTEsMTMgQEAgdm9pZCBBcmd1bWVudHM6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZQogICAgIHVu
c2lnbmVkIGkgPSAwOwogICAgIGZvciAoOyBpIDwgcGFyYW1ldGVyc0xlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGlmICghZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkKLSAgICAgICAgICAgIGFyZ3MuYXBw
ZW5kKGQtPmFjdGl2YXRpb24tPnVuY2hlY2tlZFN5bWJvbFRhYmxlR2V0VmFsdWUoZC0+Zmlyc3RQ
YXJhbWV0ZXJJbmRleCArIGkpKTsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPnJlZ2lzdGVy
c1tkLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaV0uanNWYWx1ZShleGVjKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7CiAgICAgfQogICAgIGZv
ciAoOyBpIDwgZC0+bnVtQXJndW1lbnRzOyArK2kpIHsKICAgICAgICAgaWYgKCFkLT5kZWxldGVk
QXJndW1lbnRzW2ldKQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+ZXh0cmFBcmd1bWVudHNb
aSAtIGQtPm51bVBhcmFtZXRlcnNdLmdldEpTVmFsdWUoKSk7CisgICAgICAgICAgICBhcmdzLmFw
cGVuZChkLT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10uanNWYWx1ZShleGVj
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGdldChleGVjLCBpKSk7
CiAgICAgfQpAQCAtMTUxLDkgKzEwNyw5IEBAIGJvb2wgQXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1MKIHsKICAgICBpZiAoaSA8IGQtPm51bUFyZ3VtZW50cyAmJiAoIWQtPmRlbGV0
ZWRBcmd1bWVudHMgfHwgIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pKSB7CiAgICAgICAgIGlmIChp
IDwgZC0+bnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgIGQtPmFjdGl2YXRpb24tPnVuY2hlY2tl
ZFN5bWJvbFRhYmxlR2V0KGQtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpLCBzbG90KTsKKyAgICAg
ICAgICAgIHNsb3Quc2V0UmVnaXN0ZXJTbG90KCZkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0
ZXJJbmRleCArIGldKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShk
LT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10uZ2V0SlNWYWx1ZSgpKTsKKyAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBhcmFt
ZXRlcnNdLmpzVmFsdWUoZXhlYykpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTE2Niw5ICsxMjIsOSBAQCBib29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoJmlzQXJyYXlJbmRl
eCk7CiAgICAgaWYgKGlzQXJyYXlJbmRleCAmJiBpIDwgZC0+bnVtQXJndW1lbnRzICYmICghZC0+
ZGVsZXRlZEFyZ3VtZW50cyB8fCAhZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkpIHsKICAgICAgICAg
aWYgKGkgPCBkLT5udW1QYXJhbWV0ZXJzKQotICAgICAgICAgICAgZC0+YWN0aXZhdGlvbi0+dW5j
aGVja2VkU3ltYm9sVGFibGVHZXQoZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGksIHNsb3QpOwor
ICAgICAgICAgICAgc2xvdC5zZXRSZWdpc3RlclNsb3QoJmQtPnJlZ2lzdGVyc1tkLT5maXJzdFBh
cmFtZXRlckluZGV4ICsgaV0pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzbG90LnNldFZh
bHVlKGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXS5nZXRKU1ZhbHVlKCkp
OworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShkLT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+bnVt
UGFyYW1ldGVyc10uanNWYWx1ZShleGVjKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMTg5LDcgKzE0NSw3IEBAIHZvaWQgQXJndW1lbnRzOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCB1bnMKIHsKICAgICBpZiAoaSA8IGQtPm51bUFyZ3VtZW50cyAmJiAoIWQtPmRlbGV0ZWRBcmd1
bWVudHMgfHwgIWQtPmRlbGV0ZWRBcmd1bWVudHNbaV0pKSB7CiAgICAgICAgIGlmIChpIDwgZC0+
bnVtUGFyYW1ldGVycykKLSAgICAgICAgICAgIGQtPmFjdGl2YXRpb24tPnVuY2hlY2tlZFN5bWJv
bFRhYmxlUHV0KGQtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpLCB2YWx1ZSk7CisgICAgICAgICAg
ICBkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldID0gdmFsdWU7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0
ZXJzXSA9IHZhbHVlOwogICAgICAgICByZXR1cm47CkBAIC0yMDQsNyArMTYwLDcgQEAgdm9pZCBB
cmd1bWVudHM6OnB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbgogICAgIHVuc2lnbmVkIGkgPSBwcm9w
ZXJ0eU5hbWUudG9BcnJheUluZGV4KCZpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5k
ZXggJiYgaSA8IGQtPm51bUFyZ3VtZW50cyAmJiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIWQt
PmRlbGV0ZWRBcmd1bWVudHNbaV0pKSB7CiAgICAgICAgIGlmIChpIDwgZC0+bnVtUGFyYW1ldGVy
cykKLSAgICAgICAgICAgIGQtPmFjdGl2YXRpb24tPnVuY2hlY2tlZFN5bWJvbFRhYmxlUHV0KGQt
PmZpcnN0UGFyYW1ldGVySW5kZXggKyBpLCB2YWx1ZSk7CisgICAgICAgICAgICBkLT5yZWdpc3Rl
cnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldID0gdmFsdWU7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXSA9IHZhbHVl
OwogICAgICAgICByZXR1cm47CkluZGV4OiBranMvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL0FyZ3VtZW50cy5oCShyZXZpc2lvbiAzNzEzNCkKKysrIGtqcy9Bcmd1bWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsMTkgKzI0LDM3IEBACiAjaWZuZGVmIEFyZ3VtZW50c19oCiAjZGVm
aW5lIEFyZ3VtZW50c19oCiAKLSNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTQWN0
aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorI2luY2x1ZGUgIk1hY2hpbmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBj
bGFzcyBKU0FjdGl2YXRpb247Ci0gICAgY2xhc3MgSlNGdW5jdGlvbjsKLSAgICBjbGFzcyBSZWdp
c3RlcjsKKyAgICBzdHJ1Y3QgQXJndW1lbnRzRGF0YSA6IE5vbmNvcHlhYmxlIHsKKyAgICAgICAg
SlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOworCisgICAgICAgIHVuc2lnbmVkIG51bVBhcmFtZXRl
cnM7CisgICAgICAgIGludCBmaXJzdFBhcmFtZXRlckluZGV4OworICAgICAgICB1bnNpZ25lZCBu
dW1Bcmd1bWVudHM7CisKKyAgICAgICAgUmVnaXN0ZXIqIHJlZ2lzdGVyczsKKyAgICAgICAgT3du
QXJyYXlQdHI8UmVnaXN0ZXI+IHJlZ2lzdGVyQXJyYXk7CisKKyAgICAgICAgUmVnaXN0ZXIqIGV4
dHJhQXJndW1lbnRzOworICAgICAgICBPd25BcnJheVB0cjxib29sPiBkZWxldGVkQXJndW1lbnRz
OworICAgICAgICBSZWdpc3RlciBleHRyYUFyZ3VtZW50c0ZpeGVkQnVmZmVyWzRdOworCisgICAg
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZTsKKyAgICAgICAgYm9vbCBvdmVycm9kZUxlbmd0aCA6IDE7
CisgICAgICAgIGJvb2wgb3ZlcnJvZGVDYWxsZWUgOiAxOworICAgIH07CiAKLSAgICBzdHJ1Y3Qg
QXJndW1lbnRzRGF0YTsKIAogICAgIGNsYXNzIEFyZ3VtZW50cyA6IHB1YmxpYyBKU09iamVjdCB7
CiAgICAgcHVibGljOgotICAgICAgICBBcmd1bWVudHMoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbios
IEpTQWN0aXZhdGlvbiosIGludCBmaXJzdEFyZ3VtZW50SW5kZXgsIFJlZ2lzdGVyKiBhcmd2LCBp
bnQgYXJnYyk7CisgICAgICAgIEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBSZWdpc3RlciogY2FsbEZy
YW1lKTsKKyAgICAgICAgQXJndW1lbnRzKEV4ZWNTdGF0ZSosIEpTQWN0aXZhdGlvbiopOwogICAg
ICAgICB2aXJ0dWFsIH5Bcmd1bWVudHMoKTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87CkBAIC00NSw2ICs2Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZv
aWQgZmlsbEFyZ0xpc3QoRXhlY1N0YXRlKiwgQXJnTGlzdCYpOwogCisgICAgICAgIHZvaWQgY29w
eVJlZ2lzdGVycygpOworICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhSZWdpc3RlciogcmVnaXN0
ZXJzKSB7IGQtPnJlZ2lzdGVycyA9IHJlZ2lzdGVyczsgfQorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CkBAIC01NSw5ICs3NiwxMDQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
ICZpbmZvOyB9CiAKKyAgICAgICAgdm9pZCBpbml0KEV4ZWNTdGF0ZSosIFJlZ2lzdGVyKiBjYWxs
RnJhbWUpOworCiAgICAgICAgIE93blB0cjxBcmd1bWVudHNEYXRhPiBkOwogICAgIH07CiAKKyAg
ICBpbmxpbmUgdm9pZCBBcmd1bWVudHM6OmluaXQoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rlciog
Y2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOworICAgICAgICBp
bnQgZmlyc3RQYXJhbWV0ZXJJbmRleDsKKyAgICAgICAgUmVnaXN0ZXIqIGFyZ3Y7CisgICAgICAg
IGludCBudW1Bcmd1bWVudHM7CisgICAgICAgIGV4ZWMtPm1hY2hpbmUoKS0+Z2V0QXJndW1lbnRz
RGF0YShjYWxsRnJhbWUsIGNhbGxlZSwgZmlyc3RQYXJhbWV0ZXJJbmRleCwgYXJndiwgbnVtQXJn
dW1lbnRzKTsKKworICAgICAgICBkLT5udW1QYXJhbWV0ZXJzID0gY2FsbGVlLT5udW1QYXJhbWV0
ZXJzKCk7CisgICAgICAgIGQtPmZpcnN0UGFyYW1ldGVySW5kZXggPSBmaXJzdFBhcmFtZXRlcklu
ZGV4OworICAgICAgICBkLT5udW1Bcmd1bWVudHMgPSBudW1Bcmd1bWVudHM7CisKKyAgICAgICAg
ZC0+cmVnaXN0ZXJzID0gY2FsbEZyYW1lOworCisgICAgICAgIFJlZ2lzdGVyKiBleHRyYUFyZ3Vt
ZW50czsKKyAgICAgICAgaWYgKGQtPm51bUFyZ3VtZW50cyA8PSBkLT5udW1QYXJhbWV0ZXJzKQor
ICAgICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSAwOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG51bUV4dHJhQXJndW1lbnRzID0gZC0+bnVtQXJndW1lbnRzIC0gZC0+bnVt
UGFyYW1ldGVyczsKKyAgICAgICAgICAgIGlmIChudW1FeHRyYUFyZ3VtZW50cyA+IHNpemVvZihk
LT5leHRyYUFyZ3VtZW50c0ZpeGVkQnVmZmVyKSAvIHNpemVvZihSZWdpc3RlcikpCisgICAgICAg
ICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSBuZXcgUmVnaXN0ZXJbbnVtRXh0cmFBcmd1bWVudHNd
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzID0gZC0+
ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcjsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1FeHRyYUFyZ3VtZW50czsgKytpKQorICAgICAgICAgICAgICAgIGV4dHJhQXJn
dW1lbnRzW2ldID0gYXJndltkLT5udW1QYXJhbWV0ZXJzICsgaV07CisgICAgICAgIH0KKworICAg
ICAgICBkLT5leHRyYUFyZ3VtZW50cyA9IGV4dHJhQXJndW1lbnRzOworCisgICAgICAgIGQtPmNh
bGxlZSA9IGNhbGxlZTsKKyAgICAgICAgZC0+b3ZlcnJvZGVMZW5ndGggPSBmYWxzZTsKKyAgICAg
ICAgZC0+b3ZlcnJvZGVDYWxsZWUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpbmxpbmUgQXJndW1l
bnRzOjpBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlciogY2FsbEZyYW1lKQorICAg
ICAgICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3Ry
dWN0dXJlKCkpCisgICAgICAgICwgZChuZXcgQXJndW1lbnRzRGF0YSkKKyAgICB7CisgICAgICAg
IGQtPmFjdGl2YXRpb24gPSAwOworICAgICAgICBpbml0KGV4ZWMsIGNhbGxGcmFtZSk7CisgICAg
fQorCisgICAgaW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uKQorICAgICAgICA6IEpTT2JqZWN0KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+YXJndW1lbnRzU3RydWN0dXJlKCkpCisgICAgICAgICwgZChuZXcgQXJn
dW1lbnRzRGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VSVChhY3RpdmF0aW9uKTsKKyAgICAgICAg
ZC0+YWN0aXZhdGlvbiA9IGFjdGl2YXRpb247CisgICAgICAgIGluaXQoZXhlYywgJmFjdGl2YXRp
b24tPnJlZ2lzdGVyQXQoMCkpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIEFyZ3VtZW50czo6
Y29weVJlZ2lzdGVycygpCisgICAgeworICAgICAgICBBU1NFUlQoIWQtPmFjdGl2YXRpb24pOwor
ICAgICAgICBBU1NFUlQoIWQtPnJlZ2lzdGVyQXJyYXkpOworCisgICAgICAgIHNpemVfdCBudW1Q
YXJhbWV0ZXJzTWludXNUaGlzID0gZC0+Y2FsbGVlLT5tX2JvZHktPmdlbmVyYXRlZEJ5dGVDb2Rl
KCkubnVtUGFyYW1ldGVycyAtIDE7CisgICAgICAgIHNpemVfdCBudW1WYXJzID0gZC0+Y2FsbGVl
LT5tX2JvZHktPmdlbmVyYXRlZEJ5dGVDb2RlKCkubnVtVmFyczsKKyAgICAgICAgc2l6ZV90IG51
bUxvY2FscyA9IG51bVZhcnMgKyBudW1QYXJhbWV0ZXJzTWludXNUaGlzOworCisgICAgICAgIGlm
ICghbnVtTG9jYWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IG51bVBhcmFtZXRlcnNNaW51c1RoaXMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CisgICAgICAgIHNpemVfdCByZWdpc3RlckFycmF5U2l6ZSA9IG51bUxvY2Fs
cyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKworICAgICAgICBSZWdpc3Rl
ciogcmVnaXN0ZXJBcnJheSA9IG5ldyBSZWdpc3RlcltyZWdpc3RlckFycmF5U2l6ZV07CisgICAg
ICAgIG1lbWNweShyZWdpc3RlckFycmF5LCBkLT5yZWdpc3RlcnMgLSByZWdpc3Rlck9mZnNldCwg
cmVnaXN0ZXJBcnJheVNpemUgKiBzaXplb2YoUmVnaXN0ZXIpKTsKKyAgICAgICAgZC0+cmVnaXN0
ZXJBcnJheS5zZXQocmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGQtPnJlZ2lzdGVycyA9IHJlZ2lz
dGVyQXJyYXkgKyByZWdpc3Rlck9mZnNldDsKKyAgICB9CisKKyAgICAvLyBUaGlzIEpTQWN0aXZh
dGlvbiBmdW5jdGlvbiBpcyBkZWZpbmVkIGhlcmUgc28gaXQgY2FuIGdldCBhdCBBcmd1bWVudHM6
OnNldFJlZ2lzdGVycy4KKyAgICBpbmxpbmUgdm9pZCBKU0FjdGl2YXRpb246OmNvcHlSZWdpc3Rl
cnMoSlNWYWx1ZSogYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFkKCktPnJlZ2lz
dGVyQXJyYXkpOworCisgICAgICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0gZCgp
LT5mdW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVDb2RlKCkubnVtUGFyYW1ldGVycyAtIDE7Cisg
ICAgICAgIHNpemVfdCBudW1WYXJzID0gZCgpLT5mdW5jdGlvbkJvZHktPmdlbmVyYXRlZEJ5dGVD
b2RlKCkubnVtVmFyczsKKyAgICAgICAgc2l6ZV90IG51bUxvY2FscyA9IG51bVZhcnMgKyBudW1Q
YXJhbWV0ZXJzTWludXNUaGlzOworCisgICAgICAgIGlmICghbnVtTG9jYWxzKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IG51bVBhcmFtZXRlcnNN
aW51c1RoaXMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgIHNp
emVfdCByZWdpc3RlckFycmF5U2l6ZSA9IG51bUxvY2FscyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKKworICAgICAgICBSZWdpc3RlciogcmVnaXN0ZXJBcnJheSA9IGNvcHlS
ZWdpc3RlckFycmF5KGQoKS0+cmVnaXN0ZXJzIC0gcmVnaXN0ZXJPZmZzZXQsIHJlZ2lzdGVyQXJy
YXlTaXplKTsKKyAgICAgICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVyQXJyYXkgKyByZWdpc3Rlck9m
ZnNldCwgcmVnaXN0ZXJBcnJheSk7CisgICAgICAgIGlmIChhcmd1bWVudHMgJiYgYXJndW1lbnRz
LT5pc09iamVjdCgmQXJndW1lbnRzOjppbmZvKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEFy
Z3VtZW50cyo+KGFyZ3VtZW50cyktPnNldFJlZ2lzdGVycyhyZWdpc3RlckFycmF5ICsgcmVnaXN0
ZXJPZmZzZXQpOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBBcmd1
bWVudHNfaApJbmRleDoga2pzL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pT
QWN0aXZhdGlvbi5jcHAJKHJldmlzaW9uIDM3MTM0KQorKysga2pzL0pTQWN0aXZhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBKU1ZhbHVlKiBKU0FjdGl2YXRpb246
OmFyZ3VtZW50c0dldHRlcihFCiAKICAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IHN0YXRpY19j
YXN0PEFyZ3VtZW50cyo+KHRoaXNPYmotPmQoKS0+cmVnaXN0ZXJzW1JlZ2lzdGVyRmlsZTo6T3B0
aW9uYWxDYWxsZWVBcmd1bWVudHNdLmpzVmFsdWUoZXhlYykpOwogICAgIGlmICghYXJndW1lbnRz
KSB7Ci0gICAgICAgIGFyZ3VtZW50cyA9IHRoaXNPYmotPmNyZWF0ZUFyZ3VtZW50c09iamVjdChl
eGVjKTsKKyAgICAgICAgYXJndW1lbnRzID0gbmV3IChleGVjKSBBcmd1bWVudHMoZXhlYywgdGhp
c09iaik7CiAgICAgICAgIHRoaXNPYmotPmQoKS0+cmVnaXN0ZXJzW1JlZ2lzdGVyRmlsZTo6T3B0
aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gYXJndW1lbnRzOwogICAgIH0KIApAQCAtMTcyLDE1ICsx
NzIsNCBAQCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBKU0FjdGl2YXRpb246CiAgICAgcmV0
dXJuIGFyZ3VtZW50c0dldHRlcjsKIH0KIAotQXJndW1lbnRzKiBKU0FjdGl2YXRpb246OmNyZWF0
ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNGdW5jdGlvbiogZnVu
Y3Rpb247Ci0gICAgUmVnaXN0ZXIqIGFyZ3Y7Ci0gICAgaW50IGFyZ2M7Ci0gICAgaW50IGZpcnN0
UGFyYW1ldGVySW5kZXg7Ci0gICAgZXhlYy0+bWFjaGluZSgpLT5nZXRBcmd1bWVudHNEYXRhKGQo
KS0+cmVnaXN0ZXJzLCBmdW5jdGlvbiwgZmlyc3RQYXJhbWV0ZXJJbmRleCwgYXJndiwgYXJnYyk7
Ci0KLSAgICByZXR1cm4gbmV3IChleGVjKSBBcmd1bWVudHMoZXhlYywgZnVuY3Rpb24sIHRoaXMs
IGZpcnN0UGFyYW1ldGVySW5kZXgsIGFyZ3YsIGFyZ2MpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IGtqcy9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNBY3RpdmF0
aW9uLmgJKHJldmlzaW9uIDM3MTM0KQorKysga2pzL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw1MyArNDMsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBY3Rp
dmF0aW9uIDogcHVibGljIEpTVmFyaWFibGVPYmplY3QgewogICAgICAgICB0eXBlZGVmIEpTVmFy
aWFibGVPYmplY3QgQmFzZTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQWN0aXZhdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4sIFJlZ2lzdGVyKik7Cisg
ICAgICAgIEpTQWN0aXZhdGlvbihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+LCBSZWdpc3RlciopOwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsKLSAgICAg
ICAgCisKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNEeW5hbWljU2NvcGUoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3Qm
KTsKIAotICAgICAgICBpbmxpbmUgdm9pZCB1bmNoZWNrZWRTeW1ib2xUYWJsZUdldChpbnQgaW5k
ZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKLSAgICAgICAgewotICAgICAgICAgICAgc2xvdC5zZXRS
ZWdpc3RlclNsb3QoJnJlZ2lzdGVyQXQoaW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlu
bGluZSBKU1ZhbHVlKiB1bmNoZWNrZWRTeW1ib2xUYWJsZUdldFZhbHVlKGludCBpbmRleCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyQXQoaW5kZXgpLmdldEpTVmFsdWUo
KTsKLSAgICAgICAgfQotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICBp
bmxpbmUgdm9pZCB1bmNoZWNrZWRTeW1ib2xUYWJsZVB1dChpbnQgaW5kZXgsIEpTVmFsdWUqIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlckF0KGluZGV4KSA9IHZhbHVlOwot
ICAgICAgICB9Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRv
VGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKIAotICAgICAgICB2b2lkIGNvcHlSZWdpc3Rl
cnMoKTsKKyAgICAgICAgdm9pZCBjb3B5UmVnaXN0ZXJzKEpTVmFsdWUqIGFyZ3VtZW50cyk7CiAg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29u
c3QgeyByZXR1cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZv
OwogCi0gICAgICAgIE5FVkVSX0lOTElORSBBcmd1bWVudHMqIGNyZWF0ZUFyZ3VtZW50c09iamVj
dChFeGVjU3RhdGUqKTsKLQogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU0FjdGl2YXRp
b25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3REYXRhIHsKLSAgICAgICAgICAgIEpTQWN0
aXZhdGlvbkRhdGEoUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHlfLCBS
ZWdpc3RlciogcmVnaXN0ZXJzKQotICAgICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdERh
dGEoJmZ1bmN0aW9uQm9keV8tPnN5bWJvbFRhYmxlKCksIHJlZ2lzdGVycykKLSAgICAgICAgICAg
ICAgICAsIGZ1bmN0aW9uQm9keShmdW5jdGlvbkJvZHlfKQorICAgICAgICAgICAgSlNBY3RpdmF0
aW9uRGF0YShQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSwgUmVnaXN0
ZXIqIHJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKCZm
dW5jdGlvbkJvZHktPnN5bWJvbFRhYmxlKCksIHJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICAs
IGZ1bmN0aW9uQm9keShmdW5jdGlvbkJvZHkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHk7IC8v
IE93bnMgdGhlIHN5bWJvbCB0YWJsZSBhbmQgY29kZSBibG9jaworICAgICAgICAgICAgUmVmUHRy
PEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keTsKICAgICAgICAgfTsKICAgICAgICAgCiAg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwpAQCAtOTgsMjQgKzgxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTQWN0aXZhdGlvbkRhdGEqIGQoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb25EYXRhKj4oSlNWYXJpYWJsZU9iamVjdDo6ZCk7IH0K
ICAgICB9OwogICAgIAotICAgIGlubGluZSB2b2lkIEpTQWN0aXZhdGlvbjo6Y29weVJlZ2lzdGVy
cygpCi0gICAgewotICAgICAgICBBU1NFUlQoIWQoKS0+cmVnaXN0ZXJBcnJheSk7Ci0KLSAgICAg
ICAgc2l6ZV90IG51bVBhcmFtZXRlcnNNaW51c1RoaXMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2Vu
ZXJhdGVkQnl0ZUNvZGUoKS5udW1QYXJhbWV0ZXJzIC0gMTsKLSAgICAgICAgc2l6ZV90IG51bVZh
cnMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVkQnl0ZUNvZGUoKS5udW1WYXJzOwotICAg
ICAgICBzaXplX3QgbnVtTG9jYWxzID0gbnVtVmFycyArIG51bVBhcmFtZXRlcnNNaW51c1RoaXM7
Ci0KLSAgICAgICAgaWYgKCFudW1Mb2NhbHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gbnVtUGFyYW1ldGVyc01pbnVzVGhpcyArIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlT
aXplID0gbnVtTG9jYWxzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotCi0g
ICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlckFycmF5ID0gY29weVJlZ2lzdGVyQXJyYXkoZCgpLT5y
ZWdpc3RlcnMgLSByZWdpc3Rlck9mZnNldCwgcmVnaXN0ZXJBcnJheVNpemUpOwotICAgICAgICBz
ZXRSZWdpc3RlcnMocmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFycmF5
KTsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNBY3RpdmF0aW9u
X2gKSW5kZXg6IG1hc20vWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbWFzbS9YODZBc3Nl
bWJsZXIuaAkocmV2aXNpb24gMzcxMzQpCisrKyBtYXNtL1g4NkFzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgcHVibGljOgogICAgICAgICBPUF9BRERfRXZHdiAg
ICAgICAgICAgICAgICAgICAgID0gMHgwMSwKICAgICAgICAgT1BfQUREX0d2RXYgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDMsCiAgICAgICAgIE9QX09SX0V2R3YgICAgICAgICAgICAgICAgICAg
ICAgPSAweDA5LAorICAgICAgICBPUF9PUl9HdkV2ICAgICAgICAgICAgICAgICAgICAgID0gMHgw
QiwKICAgICAgICAgT1BfMkJZVEVfRVNDQVBFICAgICAgICAgICAgICAgICA9IDB4MEYsCiAgICAg
ICAgIE9QX0FORF9Fdkd2ICAgICAgICAgICAgICAgICAgICAgPSAweDIxLAogICAgICAgICBPUF9T
VUJfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHgyOSwKQEAgLTQ0Myw2ICs0NDQsMTIgQEAg
cHVibGljOgogICAgICAgICBlbWl0TW9kUm1fcnIoc3JjLCBkc3QpOwogICAgIH0KIAorICAgIHZv
aWQgb3JsX21yKGludCBvZmZzZXQsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBkc3QpCisg
ICAgeworICAgICAgICBtX2J1ZmZlci0+cHV0Qnl0ZShPUF9PUl9HdkV2KTsKKyAgICAgICAgZW1p
dE1vZFJtX3JtKGRzdCwgYmFzZSwgb2Zmc2V0KTsKKyAgICB9CisKICAgICB2b2lkIG9ybF9pMzJy
KGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9idWZmZXItPnB1dEJ5
dGUoT1BfR1JPVVAxX0V2SWIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23983</attachid>
            <date>2008-10-01 12:04:14 -0700</date>
            <delta_ts>2008-10-01 13:09:58 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>arguments.diff</filename>
            <type>text/plain</type>
            <size>43596</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MTQ3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAKKzIwMDgtMTAtMDEgIENhbWVyb24g
WndhcmljaCAgPHp3YXJpY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyMTEyMzogdXNpbmcgImFyZ3VtZW50cyIgaW4gYSBm
dW5jdGlvbiBzaG91bGQgbm90IGZvcmNlIGNyZWF0aW9uIG9mIGFuIGFjdGl2YXRpb24gb2JqZWN0
CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjM+
CisKKyAgICAgICAgTWFrZSB0aGUgJ2FyZ3VtZW50cycgb2JqZWN0IG5vdCByZXF1aXJlIGEgSlNB
Y3RpdmF0aW9uLiBXZSBzdG9yZSB0aGUKKyAgICAgICAgJ2FyZ3VtZW50cycgb2JqZWN0IGluIHRo
ZSBPcHRpb25hbENhbGxlZUFyZ3VtZW50cyBjYWxsIGZyYW1lIHNsb3QuIFdlCisgICAgICAgIG5l
ZWQgdG8gYmUgYWJsZSB0byBnZXQgdGhlIG9yaWdpbmFsICdhcmd1bWVudHMnIG9iamVjdCB0byB0
ZWFyIGl0IG9mZgorICAgICAgICB3aGVuIHJldHVybmluZyBmcm9tIGEgZnVuY3Rpb24sIGJ1dCAn
YXJndW1lbnRzJyBtYXkgYmUgYXNzaWduZWQgdG8gaW4gYQorICAgICAgICBudW1iZXIgb2Ygd2F5
cy4KKworICAgICAgICBUaGVyZWZvcmUsIHdlIHVzZSB0aGUgT3B0aW9uYWxDYWxsZWVBcmd1bWVu
dHMgc2xvdCB3aGVuIHdlIHdhbnQgdG8gZ2V0CisgICAgICAgIHRoZSBvcmlnaW5hbCBhY3RpdmF0
aW9uIG9yIHdlIGtub3cgdGhhdCAnYXJndW1lbnRzJyB3YXMgbm90IGFzc2lnbmVkIGEKKyAgICAg
ICAgZGlmZmVyZW50IHZhbHVlLiBXaGVuICdhcmd1bWVudHMnIG1heSBoYXZlIGJlZW4gYXNzaWdu
ZWQgYSBuZXcgdmFsdWUsCisgICAgICAgIHdlIHVzZSBhIG5ldyBsb2NhbCB2YXJpYWJsZSB0aGF0
IGlzIGluaXRpYWxpemVkIHdpdGggJ2FyZ3VtZW50cycuIFNpbmNlCisgICAgICAgIGEgZnVuY3Rp
b24gcGFyYW1ldGVyIG5hbWVkICdhcmd1bWVudHMnIG1heSBvdmVyd3JpdGUgdGhlIHZhbHVlIG9m
CisgICAgICAgICdhcmd1bWVudHMnLCB3ZSBhbHNvIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBsb29r
IHVwICdhcmd1bWVudHMnIGluIHRoZQorICAgICAgICBzeW1ib2wgdGFibGUsIHNvIHdlIGdldCB0
aGUgcGFyYW1ldGVyIG5hbWVkICdhcmd1bWVudHMnIGluc3RlYWQgb2YgdGhlCisgICAgICAgIGxv
Y2FsIHZhcmlhYmxlIHRoYXQgd2UgaGF2ZSBhZGRlZCBmb3IgaG9sZGluZyB0aGUgJ2FyZ3VtZW50
cycgb2JqZWN0LgorCisgICAgICAgIFRoaXMgaXMgYSAxOS4xJSB3aW4gb24gdGhlIFY4IFJheXRy
YWNlIGJlbmNobWFyayB1c2luZyB0aGUgU3VuU3BpZGVyCisgICAgICAgIGhhcm5lc3MsIGFuZCBh
IDIwLjclIHdpbiB1c2luZyB0aGUgVjggaGFybmVzcy4gVGhpcyBhbW91bnRzIHRvIGEgNi41JQor
ICAgICAgICB0b3RhbCBzcGVlZHVwIG9uIHRoZSBWOCBiZW5jaG1hcmsgc3VpdGUgdXNpbmcgdGhl
IFY4IGhhcm5lc3MuCisKKyAgICAgICAgKiBWTS9DVEkuY3BwOgorICAgICAgICAoSlNDOjpDVEk6
OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAqIFZNL0NvZGVCbG9jay5oOgorICAg
ICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpDb2RlR2VuZXJhdG9y
OjpDb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDoKKyAgICAgICAgKEpT
Qzo6TWFjaGluZTo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpyZXRyaWV2ZUFyZ3VtZW50cyk6
CisgICAgICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9pbml0X2FyZ3VtZW50cyk6CisgICAgICAg
IChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9yZXRfYWN0aXZhdGlvbl9hcmd1bWVudHMpOgorICAgICAg
ICAqIFZNL01hY2hpbmUuaDoKKyAgICAgICAgKiBWTS9SZWdpc3RlckZpbGUuaDoKKyAgICAgICAg
KEpTQzo6UmVnaXN0ZXJGaWxlOjopOgorICAgICAgICAqIGtqcy9Bcmd1bWVudHMuY3BwOgorICAg
ICAgICAoSlNDOjpBcmd1bWVudHM6Om1hcmspOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OmZp
bGxBcmdMaXN0KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnB1dCk6CisgICAgICAgICoga2pzL0FyZ3VtZW50
cy5oOgorICAgICAgICAoSlNDOjpBcmd1bWVudHM6OnNldFJlZ2lzdGVycyk6CisgICAgICAgIChK
U0M6OkFyZ3VtZW50czo6aW5pdCk6CisgICAgICAgIChKU0M6OkFyZ3VtZW50czo6QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzOjpjb3B5UmVnaXN0ZXJzKToKKyAgICAgICAgKEpT
Qzo6SlNBY3RpdmF0aW9uOjpjb3B5UmVnaXN0ZXJzKToKKyAgICAgICAgKiBranMvSlNBY3RpdmF0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjphcmd1bWVudHNHZXR0ZXIpOgor
ICAgICAgICAqIGtqcy9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9u
OjpKU0FjdGl2YXRpb25EYXRhOjpKU0FjdGl2YXRpb25EYXRhKToKKyAgICAgICAgKiBranMvZ3Jh
bW1hci55OgorICAgICAgICAqIGtqcy9ub2Rlcy5oOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6
OnNldFVzZXNBcmd1bWVudHMpOgorICAgICAgICAqIG1hc20vWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpv
cmxfbXIpOgorCiAyMDA4LTA5LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9W
TS9DVEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL0NUSS5jcHAJKHJldmlz
aW9uIDM3MTQ0KQorKysgSmF2YVNjcmlwdENvcmUvVk0vQ1RJLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5MCw4ICsxMTkwLDExIEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmV0OiB7Ci0g
ICAgICAgICAgICAvLyBDaGVjayBmb3IgYW4gYWN0aXZhdGlvbiAtIGlmIHRoZXJlIGlzIG9uZSwg
anVtcCB0byB0aGUgaG9vayBiZWxvdy4KLSAgICAgICAgICAgIG1faml0LmNtcGxfaTMybSgwLCBS
ZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbiAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IGFuIGFjdGl2YXRpb24gb3IgYW4gJ2FyZ3VtZW50cycgb2JqZWN0LCB3ZSB0ZWFyIGl0CisgICAg
ICAgICAgICAvLyBvZmYgYnkganVtcGluZyB0byB0aGUgaG9vayBiZWxvdy4KKyAgICAgICAgICAg
IG1faml0Lm1vdmxfbXIoUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb24gKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgbV9qaXQub3JsX21yKFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1
bWVudHMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSwgWDg2
OjplYXgpOworICAgICAgICAgICAgbV9qaXQuY21wbF9pMzJyKDAsIFg4Njo6ZWF4KTsKICAgICAg
ICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wU3JjIGFjdGl2YXRpb24gPSBtX2ppdC5lbWl0VW5saW5r
ZWRKbmUoKTsKICAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6Sm1wRHN0IGFjdGl2YXRlZCA9IG1f
aml0LmxhYmVsKCk7CiAKQEAgLTEyMjEsOSArMTIyNCw5IEBAIHZvaWQgQ1RJOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIG1faml0LnB1c2hsX3IoWDg2OjplZHgpOwogICAg
ICAgICAgICAgbV9qaXQucmV0KCk7CiAKLSAgICAgICAgICAgIC8vIEFjdGl2YXRpb24gaG9vawor
ICAgICAgICAgICAgLy8gQWN0aXZhdGlvbiBhbmQgJ2FyZ3VtZW50cycgaG9vawogICAgICAgICAg
ICAgbV9qaXQubGluayhhY3RpdmF0aW9uLCBtX2ppdC5sYWJlbCgpKTsKLSAgICAgICAgICAgIGVt
aXRDYWxsKGksIE1hY2hpbmU6OmN0aV9vcF9yZXRfYWN0aXZhdGlvbik7CisgICAgICAgICAgICBl
bWl0Q2FsbChpLCBNYWNoaW5lOjpjdGlfb3BfcmV0X2FjdGl2YXRpb25fYXJndW1lbnRzKTsKICAg
ICAgICAgICAgIG1faml0LmxpbmsobV9qaXQuZW1pdFVubGlua2VkSm1wKCksIGFjdGl2YXRlZCk7
CiAKICAgICAgICAgICAgIC8vIFByb2ZpbGluZyBob29rCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9W
TS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2su
aAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMjQxLDYgKzI0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBp
bnQgdGhpc1JlZ2lzdGVyOwogICAgICAgICBib29sIG5lZWRzRnVsbFNjb3BlQ2hhaW47CiAgICAg
ICAgIGJvb2wgdXNlc0V2YWw7CisgICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50czsKICAgICAgICAg
Q29kZVR5cGUgY29kZVR5cGU7CiAgICAgICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
OwogICAgICAgICB1bnNpZ25lZCBzb3VyY2VPZmZzZXQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9W
TS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9Db2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9Db2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDExICsyOTIsMTIgQEAgQ29kZUdl
bmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgIGVtaXRPcGNvZGUob3BfaW5p
dCk7CiAgICAgY29kZUJsb2NrLT5nbG9iYWxEYXRhID0gbV9nbG9iYWxEYXRhOwogCi0gICAgaWYg
KGZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgYm9vbCB1c2VzQXJndW1lbnRz
ID0gZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCk7CisgICAgY29kZUJsb2NrLT51c2VzQXJn
dW1lbnRzID0gdXNlc0FyZ3VtZW50czsKKyAgICBpZiAodXNlc0FyZ3VtZW50cykgewogICAgICAg
ICBlbWl0T3Bjb2RlKG9wX2luaXRfYXJndW1lbnRzKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4gPSB0cnVlOwogICAgICAgICBtX2FyZ3VtZW50c1JlZ2lzdGVyLnNl
dEluZGV4KFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMpOwotICAgICAgICBz
eW1ib2xUYWJsZS0+YWRkKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMudXN0cmluZygpLnJlcCgp
LCBTeW1ib2xUYWJsZUVudHJ5KFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMp
KTsKKyAgICAgICAgYWRkVmFyKHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMsIGZhbHNlKTsKICAg
ICB9CiAKICAgICBjb25zdCBOb2RlOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0gZnVu
Y3Rpb25Cb2R5LT5mdW5jdGlvblN0YWNrKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNo
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2
aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAxLDEwICs4MDEsMTMgQEAgTkVWRVJfSU5MSU5FIGJvb2wgTWFjaGluZTo6dW53
aW5kQ2FsbEZyYQogICAgIGlmIChvbGRDb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCiAg
ICAgICAgIHNjb3BlQ2hhaW4tPmRlcmVmKCk7CiAKLSAgICAvLyBJZiB0aGlzIGNhbGwgZnJhbWUg
Y3JlYXRlZCBhbiBhY3RpdmF0aW9uLCB0ZWFyIGl0IG9mZi4KLSAgICBpZiAoSlNBY3RpdmF0aW9u
KiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZpbGU6
Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uanNWYWx1ZShleGVjKSkpIHsKKyAgICAvLyBJZiB0
aGlzIGNhbGwgZnJhbWUgY3JlYXRlZCBhbiBhY3RpdmF0aW9uIG9yIGFuICdhcmd1bWVudHMnIG9i
amVjdCwgdGVhciBpdCBvZmYuCisgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IHN0
YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFj
dGl2YXRpb25dLmdldEpTVmFsdWUoKSkpIHsKICAgICAgICAgQVNTRVJUKGFjdGl2YXRpb24tPmlz
T2JqZWN0KCZKU0FjdGl2YXRpb246OmluZm8pKTsKLSAgICAgICAgYWN0aXZhdGlvbi0+Y29weVJl
Z2lzdGVycygpOworICAgICAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKHJbUmVnaXN0ZXJG
aWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10uZ2V0SlNWYWx1ZSgpKTsKKyAgICB9IGVsc2Ug
aWYgKEpTVmFsdWUqIGFyZ3VtZW50cyA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFy
Z3VtZW50c10uZ2V0SlNWYWx1ZSgpKSB7CisgICAgICAgIGlmIChhcmd1bWVudHMtPmlzT2JqZWN0
KCZBcmd1bWVudHM6OmluZm8pKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4o
YXJndW1lbnRzKS0+Y29weVJlZ2lzdGVycygpOwogICAgIH0KICAgICAKICAgICB2b2lkKiByZXR1
cm5QQyA9IHJbUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQ10udigpOwpAQCAtMzM2MCwxMCArMzM2Mywx
NCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAg
IAogICAgICAgICBpbnQgcmVzdWx0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogCi0gICAgICAgIGlm
IChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihy
W1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5qc1ZhbHVlKGV4ZWMpKSkg
eworICAgICAgICAvLyBJZiB0aGlzIGNhbGwgZnJhbWUgY3JlYXRlZCBhbiBhY3RpdmF0aW9uIG9y
IGFuICdhcmd1bWVudHMnIG9iamVjdCwgdGVhciBpdCBvZmYuCisgICAgICAgIGlmIChKU0FjdGl2
YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihyW1JlZ2lzdGVy
RmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5nZXRKU1ZhbHVlKCkpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoIWNvZGVCbG9jayhyKS0+bmVlZHNGdWxsU2NvcGVDaGFpbiB8fCBzY29wZUNo
YWluKHIpLT5vYmplY3QgPT0gYWN0aXZhdGlvbik7CiAgICAgICAgICAgICBBU1NFUlQoYWN0aXZh
dGlvbi0+aXNPYmplY3QoJkpTQWN0aXZhdGlvbjo6aW5mbykpOwotICAgICAgICAgICAgYWN0aXZh
dGlvbi0+Y29weVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lz
dGVycyhyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogYXJndW1lbnRzID0gcltSZWdpc3RlckZp
bGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCkpIHsKKyAgICAgICAgICAg
IGlmIChhcmd1bWVudHMtPmlzT2JqZWN0KCZBcmd1bWVudHM6OmluZm8pKQorICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50cyktPmNvcHlSZWdpc3RlcnMoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKQpAQCAt
MzQxNyw4ICszNDI0LDE2IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQogICAgIEJFR0lOX09QQ09ERShvcF9pbml0
X2FyZ3VtZW50cykgewotICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNf
Y2FzdDxKU0FjdGl2YXRpb24qPihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0
aW9uXS5nZXRKU1ZhbHVlKCkpOwotICAgICAgICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxs
ZWVBcmd1bWVudHNdID0gYWN0aXZhdGlvbi0+Y3JlYXRlQXJndW1lbnRzT2JqZWN0KGV4ZWMpOwor
ICAgICAgICBKU1ZhbHVlKiBhY3RpdmF0aW9uID0gcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2Fs
bGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpOworICAgICAgICBBcmd1bWVudHMqIGFyZ3VtZW50
czsKKyAgICAgICAgaWYgKGFjdGl2YXRpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChhY3RpdmF0
aW9uLT5pc09iamVjdCgmSlNBY3RpdmF0aW9uOjppbmZvKSk7CisgICAgICAgICAgICBhcmd1bWVu
dHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24q
PihhY3RpdmF0aW9uKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXJndW1lbnRzID0g
bmV3IChleGVjKSBBcmd1bWVudHMoZXhlYywgcik7CisgICAgICAgIHJbUmVnaXN0ZXJGaWxlOjpP
cHRpb25hbENhbGxlZUFyZ3VtZW50c10gPSBhcmd1bWVudHM7CisgICAgICAgIHJbUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudHNSZWdpc3Rlcl0gPSBhcmd1bWVudHM7CisgICAgICAgIAogICAgICAgICAr
K3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMzg0OCwxNiArMzg2MywyNCBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpyZXRyaWV2ZUFyZ3VtZW50cyhFeGVjCiAgICAgaWYgKCFyKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IHN0
YXRpY19jYXN0PEFyZ3VtZW50cyo+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3Vt
ZW50c10uanNWYWx1ZShleGVjKSk7Ci0gICAgaWYgKCFhcmd1bWVudHMpIHsKLSAgICAgICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdp
c3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKTsKLSAgICAg
ICAgaWYgKCFhY3RpdmF0aW9uKSB7Ci0gICAgICAgICAgICBhY3RpdmF0aW9uID0gbmV3IChleGVj
KSBKU0FjdGl2YXRpb24oZXhlYywgZnVuY3Rpb24tPm1fYm9keSwgcik7Ci0gICAgICAgICAgICBy
W1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXSA9IGFjdGl2YXRpb247Cisg
ICAgSlNWYWx1ZSogYXJndW1lbnRzOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gTWFjaGlu
ZTo6Y29kZUJsb2NrKHIpOworICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1bWVudHMpIHsKKyAg
ICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKTsKKyAgICAg
ICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Cb2R5Tm9k
ZSo+KGNvZGVCbG9jay0+b3duZXJOb2RlKS0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgaW50IGFy
Z3VtZW50c0luZGV4ID0gc3ltYm9sVGFibGUuZ2V0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMudXN0cmluZygpLnJlcCgpKS5nZXRJbmRleCgpOworICAgICAgICBhcmd1bWVudHMgPSBy
W2FyZ3VtZW50c0luZGV4XS5qc1ZhbHVlKGV4ZWMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFy
Z3VtZW50cyA9IHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50c10uZ2V0SlNW
YWx1ZSgpOworICAgICAgICBpZiAoIWFyZ3VtZW50cykgeworICAgICAgICAgICAgSlNBY3RpdmF0
aW9uKiBhY3RpdmF0aW9uID0gc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4ocltSZWdpc3RlckZp
bGU6Ok9wdGlvbmFsQ2FsbGVlQWN0aXZhdGlvbl0uZ2V0SlNWYWx1ZSgpKTsKKyAgICAgICAgICAg
IGlmIChhY3RpdmF0aW9uKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50cyA9IG5ldyAoZXhlYykg
QXJndW1lbnRzKGV4ZWMsIGFjdGl2YXRpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50cyA9IG5ldyAoZXhlYykgQXJndW1lbnRzKGV4ZWMsIHIpOworICAgICAg
ICAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXSA9IGFyZ3VtZW50
czsKICAgICAgICAgfQotCi0gICAgICAgIGFyZ3VtZW50cyA9IGFjdGl2YXRpb24tPmNyZWF0ZUFy
Z3VtZW50c09iamVjdChleGVjKTsKLSAgICAgICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2Fs
bGVlQXJndW1lbnRzXSA9IGFyZ3VtZW50czsKKyAgICAgICAgQVNTRVJUKGFyZ3VtZW50cy0+aXNP
YmplY3QoJkFyZ3VtZW50czo6aW5mbykpOwogICAgIH0KIAogICAgIHJldHVybiBhcmd1bWVudHM7
CkBAIC00NTk5LDIxICs0NjIyLDMxIEBAIHZvaWQgTWFjaGluZTo6Y3RpX29wX2luaXRfYXJndW1l
bnRzKENUSV8KIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKICAgICBSZWdpc3Rl
ciogciA9IEFSR19yOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IHN0YXRpY19jYXN0
PEpTQWN0aXZhdGlvbio+KHJbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFjdGl2YXRpb25d
LmdldEpTVmFsdWUoKSk7Ci0gICAgcltSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1l
bnRzXSA9IGFjdGl2YXRpb24tPmNyZWF0ZUFyZ3VtZW50c09iamVjdChleGVjKTsKKworICAgIEpT
VmFsdWUqIGFjdGl2YXRpb24gPSByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0
aW9uXS5nZXRKU1ZhbHVlKCk7CisgICAgQXJndW1lbnRzKiBhcmd1bWVudHM7CisgICAgaWYgKGFj
dGl2YXRpb24pIHsKKyAgICAgICAgQVNTRVJUKGFjdGl2YXRpb24tPmlzT2JqZWN0KCZKU0FjdGl2
YXRpb246OmluZm8pKTsKKyAgICAgICAgYXJndW1lbnRzID0gbmV3IChleGVjKSBBcmd1bWVudHMo
ZXhlYywgc3RhdGljX2Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbikpOworICAgIH0gZWxz
ZQorICAgICAgICBhcmd1bWVudHMgPSBuZXcgKGV4ZWMpIEFyZ3VtZW50cyhleGVjLCByKTsKKyAg
ICByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gYXJndW1lbnRzOwor
ICAgIHJbUmVnaXN0ZXJGaWxlOjpBcmd1bWVudHNSZWdpc3Rlcl0gPSBhcmd1bWVudHM7CiB9CiAK
LXZvaWQgTWFjaGluZTo6Y3RpX29wX3JldF9hY3RpdmF0aW9uKENUSV9BUkdTKQordm9pZCBNYWNo
aW5lOjpjdGlfb3BfcmV0X2FjdGl2YXRpb25fYXJndW1lbnRzKENUSV9BUkdTKQogewotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwogICAgIFJlZ2lzdGVyKiByID0gQVJHX3I7CiAKLSAg
ICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxKU0FjdGl2YXRpb24qPihy
W1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5qc1ZhbHVlKGV4ZWMpKTsK
LSAgICBBU1NFUlQoYWN0aXZhdGlvbik7Ci0KLSAgICBBU1NFUlQoIWNvZGVCbG9jayhyKS0+bmVl
ZHNGdWxsU2NvcGVDaGFpbiB8fCBzY29wZUNoYWluKHIpLT5vYmplY3QgPT0gYWN0aXZhdGlvbik7
Ci0gICAgQVNTRVJUKGFjdGl2YXRpb24tPmlzT2JqZWN0KCZKU0FjdGl2YXRpb246OmluZm8pKTsK
LSAgICBhY3RpdmF0aW9uLT5jb3B5UmVnaXN0ZXJzKCk7CisgICAgLy8gSWYgdGhpcyBjYWxsIGZy
YW1lIGNyZWF0ZWQgYW4gYWN0aXZhdGlvbiBvciBhbiAnYXJndW1lbnRzJyBvYmplY3QsIHRlYXIg
aXQgb2ZmLgorICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBzdGF0aWNfY2FzdDxK
U0FjdGl2YXRpb24qPihyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBY3RpdmF0aW9uXS5n
ZXRKU1ZhbHVlKCkpKSB7CisgICAgICAgIEFTU0VSVCghY29kZUJsb2NrKHIpLT5uZWVkc0Z1bGxT
Y29wZUNoYWluIHx8IHNjb3BlQ2hhaW4ociktPm9iamVjdCA9PSBhY3RpdmF0aW9uKTsKKyAgICAg
ICAgQVNTRVJUKGFjdGl2YXRpb24tPmlzT2JqZWN0KCZKU0FjdGl2YXRpb246OmluZm8pKTsKKyAg
ICAgICAgYWN0aXZhdGlvbi0+Y29weVJlZ2lzdGVycyhyW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxD
YWxsZWVBcmd1bWVudHNdLmdldEpTVmFsdWUoKSk7CisgICAgfSBlbHNlIGlmIChKU1ZhbHVlKiBh
cmd1bWVudHMgPSByW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdLmdldEpT
VmFsdWUoKSkgeworICAgICAgICBpZiAoYXJndW1lbnRzLT5pc09iamVjdCgmQXJndW1lbnRzOjpp
bmZvKSkKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEFyZ3VtZW50cyo+KGFyZ3VtZW50cyktPmNv
cHlSZWdpc3RlcnMoKTsKKyAgICB9CiB9CiAKIHZvaWQgTWFjaGluZTo6Y3RpX29wX3JldF9wcm9m
aWxlcihDVElfQVJHUykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL01hY2hpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmgJKHJldmlzaW9uIDM3MTQ0KQorKysg
SmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYz
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkKiBTRlhfQ0FMTCBjdGlf
b3BfY2FsbF9KU0Z1bmN0aW9uKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGljIEpTVmFsdWUqIFNG
WF9DQUxMIGN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24oQ1RJX0FSR1MpOwogICAgICAgICBzdGF0
aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfaW5pdF9hcmd1bWVudHMoQ1RJX0FSR1MpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcmV0X2FjdGl2YXRpb24oQ1RJX0FSR1MpOwor
ICAgICAgICBzdGF0aWMgdm9pZCBTRlhfQ0FMTCBjdGlfb3BfcmV0X2FjdGl2YXRpb25fYXJndW1l
bnRzKENUSV9BUkdTKTsKICAgICAgICAgc3RhdGljIHZvaWQgU0ZYX0NBTEwgY3RpX29wX3JldF9w
cm9maWxlcihDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIFNGWF9DQUxMIGN0aV9vcF9y
ZXRfc2NvcGVDaGFpbihDVElfQVJHUyk7CiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBTRlhfQ0FM
TCBjdGlfb3BfbmV3X2FycmF5KENUSV9BUkdTKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL1Jl
Z2lzdGVyRmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL1ZNL1JlZ2lzdGVyRmls
ZS5oCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRDb3JlL1ZNL1JlZ2lzdGVyRmlsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH07CiAKICAgICAgICAgZW51bSB7IFByb2dyYW1Db2RlVGhpc1JlZ2lzdGVyID0gLUNhbGxG
cmFtZUhlYWRlclNpemUgLSAxIH07CisgICAgICAgIGVudW0geyBBcmd1bWVudHNSZWdpc3RlciA9
IDAgfTsKIAogICAgICAgICBlbnVtIHsgRGVmYXVsdENhcGFjaXR5ID0gMiAqIDEwMjQgKiAxMDI0
IC8gc2l6ZW9mKFJlZ2lzdGVyKSB9OwogICAgICAgICBlbnVtIHsgRGVmYXVsdE1heEdsb2JhbHMg
PSA4ICogMTAyNCB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDM3
MTQ0KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDUzICszNyw2IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoQXJndW1lbnRzKTsK
IAogY29uc3QgQ2xhc3NJbmZvIEFyZ3VtZW50czo6aW5mbyA9IHsgIkFyZ3VtZW50cyIsIDAsIDAs
IDAgfTsKIAotc3RydWN0IEFyZ3VtZW50c0RhdGEgOiBOb25jb3B5YWJsZSB7Ci0gICAgQXJndW1l
bnRzRGF0YShKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24sIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMs
IGludCBmaXJzdFBhcmFtZXRlckluZGV4LCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIEpTRnVuY3Rp
b24qIGNhbGxlZSkKLSAgICAgICAgOiBhY3RpdmF0aW9uKGFjdGl2YXRpb24pCi0gICAgICAgICwg
bnVtUGFyYW1ldGVycyhudW1QYXJhbWV0ZXJzKQotICAgICAgICAsIGZpcnN0UGFyYW1ldGVySW5k
ZXgoZmlyc3RQYXJhbWV0ZXJJbmRleCkKLSAgICAgICAgLCBudW1Bcmd1bWVudHMobnVtQXJndW1l
bnRzKQotICAgICAgICAsIGV4dHJhQXJndW1lbnRzKDApCi0gICAgICAgICwgY2FsbGVlKGNhbGxl
ZSkKLSAgICAgICAgLCBvdmVycm9kZUxlbmd0aChmYWxzZSkKLSAgICAgICAgLCBvdmVycm9kZUNh
bGxlZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
OwotCi0gICAgdW5zaWduZWQgbnVtUGFyYW1ldGVyczsKLSAgICBpbnQgZmlyc3RQYXJhbWV0ZXJJ
bmRleDsKLSAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHM7Ci0gICAgUmVnaXN0ZXIqIGV4dHJhQXJn
dW1lbnRzOwotICAgIE93bkFycmF5UHRyPGJvb2w+IGRlbGV0ZWRBcmd1bWVudHM7Ci0gICAgUmVn
aXN0ZXIgZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcls0XTsKLQotICAgIEpTRnVuY3Rpb24qIGNh
bGxlZTsKLSAgICBib29sIG92ZXJyb2RlTGVuZ3RoIDogMTsKLSAgICBib29sIG92ZXJyb2RlQ2Fs
bGVlIDogMTsKLX07Ci0KLS8vIEVDTUEgMTAuMS44Ci1Bcmd1bWVudHM6OkFyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU0FjdGl2YXRpb24qIGFjdGl2YXRp
b24sIGludCBmaXJzdFBhcmFtZXRlckluZGV4LCBSZWdpc3RlciogYXJndiwgaW50IGFyZ2MpCi0g
ICAgOiBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVj
dHVyZSgpKQotICAgICwgZChuZXcgQXJndW1lbnRzRGF0YShhY3RpdmF0aW9uLCBmdW5jdGlvbi0+
bnVtUGFyYW1ldGVycygpLCBmaXJzdFBhcmFtZXRlckluZGV4LCBhcmdjLCBmdW5jdGlvbikpCi17
Ci0gICAgQVNTRVJUKGFjdGl2YXRpb24pOwotICAKLSAgICBpZiAoZC0+bnVtQXJndW1lbnRzID4g
ZC0+bnVtUGFyYW1ldGVycykgewotICAgICAgICB1bnNpZ25lZCBudW1FeHRyYUFyZ3VtZW50cyA9
IGQtPm51bUFyZ3VtZW50cyAtIGQtPm51bVBhcmFtZXRlcnM7Ci0gICAgICAgIFJlZ2lzdGVyKiBl
eHRyYUFyZ3VtZW50czsKLSAgICAgICAgaWYgKG51bUV4dHJhQXJndW1lbnRzID4gc2l6ZW9mKGQt
PmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXIpIC8gc2l6ZW9mKFJlZ2lzdGVyKSkKLSAgICAgICAg
ICAgIGV4dHJhQXJndW1lbnRzID0gbmV3IFJlZ2lzdGVyW251bUV4dHJhQXJndW1lbnRzXTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZXh0cmFBcmd1bWVudHMgPSBkLT5leHRyYUFyZ3VtZW50
c0ZpeGVkQnVmZmVyOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFB
cmd1bWVudHM7ICsraSkKLSAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzW2ldID0gYXJndltkLT5u
dW1QYXJhbWV0ZXJzICsgaV07Ci0gICAgICAgIGQtPmV4dHJhQXJndW1lbnRzID0gZXh0cmFBcmd1
bWVudHM7Ci0gICAgfQotfQotCiBBcmd1bWVudHM6On5Bcmd1bWVudHMoKQogewogICAgIGlmIChk
LT5leHRyYUFyZ3VtZW50cyAhPSBkLT5leHRyYUFyZ3VtZW50c0ZpeGVkQnVmZmVyKQpAQCAtOTQs
NiArNDcsMTEgQEAgdm9pZCBBcmd1bWVudHM6Om1hcmsoKSAKIHsKICAgICBKU09iamVjdDo6bWFy
aygpOwogCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGQtPm51bVBhcmFtZXRlcnM7ICsr
aSkgeworICAgICAgICBpZiAoIWQtPnJlZ2lzdGVyc1tpXS5tYXJrZWQoKSkKKyAgICAgICAgICAg
IGQtPnJlZ2lzdGVyc1tpXS5tYXJrKCk7CisgICAgfQorCiAgICAgaWYgKGQtPmV4dHJhQXJndW1l
bnRzKSB7CiAgICAgICAgIHVuc2lnbmVkIG51bUV4dHJhQXJndW1lbnRzID0gZC0+bnVtQXJndW1l
bnRzIC0gZC0+bnVtUGFyYW1ldGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUV4dHJhQXJndW1lbnRzOyArK2kpIHsKQEAgLTEwNSw3ICs2Myw3IEBAIHZvaWQgQXJndW1l
bnRzOjptYXJrKCkgCiAgICAgaWYgKCFkLT5jYWxsZWUtPm1hcmtlZCgpKQogICAgICAgICBkLT5j
YWxsZWUtPm1hcmsoKTsKIAotICAgIGlmICghZC0+YWN0aXZhdGlvbi0+bWFya2VkKCkpCisgICAg
aWYgKGQtPmFjdGl2YXRpb24gJiYgIWQtPmFjdGl2YXRpb24tPm1hcmtlZCgpKQogICAgICAgICBk
LT5hY3RpdmF0aW9uLT5tYXJrKCk7CiB9CiAKQEAgLTExOCwxNiArNzYsMTYgQEAgdm9pZCBBcmd1
bWVudHM6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGQtPm51bVBhcmFtZXRlcnMgPT0gZC0+bnVtQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBhcmdz
LmluaXRpYWxpemUoJmQtPmFjdGl2YXRpb24tPnJlZ2lzdGVyQXQoZC0+Zmlyc3RQYXJhbWV0ZXJJ
bmRleCksIGQtPm51bUFyZ3VtZW50cyk7CisgICAgICAgICAgICBhcmdzLmluaXRpYWxpemUoJmQt
PnJlZ2lzdGVyc1tkLT5maXJzdFBhcmFtZXRlckluZGV4XSwgZC0+bnVtQXJndW1lbnRzKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIHVuc2lnbmVkIHBhcmFtZXRl
cnNMZW5ndGggPSBtaW4oZC0+bnVtUGFyYW1ldGVycywgZC0+bnVtQXJndW1lbnRzKTsKICAgICAg
ICAgdW5zaWduZWQgaSA9IDA7CiAgICAgICAgIGZvciAoOyBpIDwgcGFyYW1ldGVyc0xlbmd0aDsg
KytpKQotICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+YWN0aXZhdGlvbi0+dW5jaGVja2VkU3lt
Ym9sVGFibGVHZXRWYWx1ZShkLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaSkpOworICAgICAgICAg
ICAgYXJncy5hcHBlbmQoZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXS5q
c1ZhbHVlKGV4ZWMpKTsKICAgICAgICAgZm9yICg7IGkgPCBkLT5udW1Bcmd1bWVudHM7ICsraSkK
LSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJh
bWV0ZXJzXS5nZXRKU1ZhbHVlKCkpOworICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+ZXh0cmFB
cmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdLmpzVmFsdWUoZXhlYykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0xMzUsMTMgKzkzLDEzIEBAIHZvaWQgQXJndW1lbnRzOjpmaWxs
QXJnTGlzdChFeGVjU3RhdGUqIGUKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8
IHBhcmFtZXRlcnNMZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoIWQtPmRlbGV0ZWRBcmd1bWVu
dHNbaV0pCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChkLT5hY3RpdmF0aW9uLT51bmNoZWNrZWRT
eW1ib2xUYWJsZUdldFZhbHVlKGQtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpKSk7CisgICAgICAg
ICAgICBhcmdzLmFwcGVuZChkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGld
LmpzVmFsdWUoZXhlYykpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhcmdzLmFwcGVuZChn
ZXQoZXhlYywgaSkpOwogICAgIH0KICAgICBmb3IgKDsgaSA8IGQtPm51bUFyZ3VtZW50czsgKytp
KSB7CiAgICAgICAgIGlmICghZC0+ZGVsZXRlZEFyZ3VtZW50c1tpXSkKLSAgICAgICAgICAgIGFy
Z3MuYXBwZW5kKGQtPmV4dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXS5nZXRKU1Zh
bHVlKCkpOworICAgICAgICAgICAgYXJncy5hcHBlbmQoZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQt
Pm51bVBhcmFtZXRlcnNdLmpzVmFsdWUoZXhlYykpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBhcmdzLmFwcGVuZChnZXQoZXhlYywgaSkpOwogICAgIH0KQEAgLTE1MSw5ICsxMDksOSBAQCBi
b29sIEFyZ3VtZW50czo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTCiB7CiAgICAgaWYgKGkgPCBk
LT5udW1Bcmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJn
dW1lbnRzW2ldKSkgewogICAgICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAg
ICAgICBkLT5hY3RpdmF0aW9uLT51bmNoZWNrZWRTeW1ib2xUYWJsZUdldChkLT5maXJzdFBhcmFt
ZXRlckluZGV4ICsgaSwgc2xvdCk7CisgICAgICAgICAgICBzbG90LnNldFJlZ2lzdGVyU2xvdCgm
ZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBpXSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBh
cmFtZXRlcnNdLmdldEpTVmFsdWUoKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKGQtPmV4
dHJhQXJndW1lbnRzW2kgLSBkLT5udW1QYXJhbWV0ZXJzXS5qc1ZhbHVlKGV4ZWMpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjYsOSArMTI0LDkgQEAgYm9vbCBBcmd1bWVu
dHM6OmdldE93blByb3BlcnR5U2xvdChFeGVjUwogICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5h
bWUudG9BcnJheUluZGV4KCZpc0FycmF5SW5kZXgpOwogICAgIGlmIChpc0FycmF5SW5kZXggJiYg
aSA8IGQtPm51bUFyZ3VtZW50cyAmJiAoIWQtPmRlbGV0ZWRBcmd1bWVudHMgfHwgIWQtPmRlbGV0
ZWRBcmd1bWVudHNbaV0pKSB7CiAgICAgICAgIGlmIChpIDwgZC0+bnVtUGFyYW1ldGVycykKLSAg
ICAgICAgICAgIGQtPmFjdGl2YXRpb24tPnVuY2hlY2tlZFN5bWJvbFRhYmxlR2V0KGQtPmZpcnN0
UGFyYW1ldGVySW5kZXggKyBpLCBzbG90KTsKKyAgICAgICAgICAgIHNsb3Quc2V0UmVnaXN0ZXJT
bG90KCZkLT5yZWdpc3RlcnNbZC0+Zmlyc3RQYXJhbWV0ZXJJbmRleCArIGldKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShkLT5leHRyYUFyZ3VtZW50c1tpIC0gZC0+
bnVtUGFyYW1ldGVyc10uZ2V0SlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUo
ZC0+ZXh0cmFBcmd1bWVudHNbaSAtIGQtPm51bVBhcmFtZXRlcnNdLmpzVmFsdWUoZXhlYykpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE4OSw3ICsxNDcsNyBAQCB2b2lkIEFy
Z3VtZW50czo6cHV0KEV4ZWNTdGF0ZSogZXhlYywgdW5zCiB7CiAgICAgaWYgKGkgPCBkLT5udW1B
cmd1bWVudHMgJiYgKCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRz
W2ldKSkgewogICAgICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBk
LT5hY3RpdmF0aW9uLT51bmNoZWNrZWRTeW1ib2xUYWJsZVB1dChkLT5maXJzdFBhcmFtZXRlcklu
ZGV4ICsgaSwgdmFsdWUpOworICAgICAgICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1l
dGVySW5kZXggKyBpXSA9IHZhbHVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkLT5leHRy
YUFyZ3VtZW50c1tpIC0gZC0+bnVtUGFyYW1ldGVyc10gPSB2YWx1ZTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjA0LDcgKzE2Miw3IEBAIHZvaWQgQXJndW1lbnRzOjpwdXQoRXhlY1N0YXRlKiBleGVj
LCBjb24KICAgICB1bnNpZ25lZCBpID0gcHJvcGVydHlOYW1lLnRvQXJyYXlJbmRleCgmaXNBcnJh
eUluZGV4KTsKICAgICBpZiAoaXNBcnJheUluZGV4ICYmIGkgPCBkLT5udW1Bcmd1bWVudHMgJiYg
KCFkLT5kZWxldGVkQXJndW1lbnRzIHx8ICFkLT5kZWxldGVkQXJndW1lbnRzW2ldKSkgewogICAg
ICAgICBpZiAoaSA8IGQtPm51bVBhcmFtZXRlcnMpCi0gICAgICAgICAgICBkLT5hY3RpdmF0aW9u
LT51bmNoZWNrZWRTeW1ib2xUYWJsZVB1dChkLT5maXJzdFBhcmFtZXRlckluZGV4ICsgaSwgdmFs
dWUpOworICAgICAgICAgICAgZC0+cmVnaXN0ZXJzW2QtPmZpcnN0UGFyYW1ldGVySW5kZXggKyBp
XSA9IHZhbHVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkLT5leHRyYUFyZ3VtZW50c1tp
IC0gZC0+bnVtUGFyYW1ldGVyc10gPSB2YWx1ZTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL0FyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2tqcy9Bcmd1bWVudHMuaAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
QXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE5ICsyNCwzNyBAQAogI2lmbmRlZiBB
cmd1bWVudHNfaAogI2RlZmluZSBBcmd1bWVudHNfaAogCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIK
KyNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5j
bHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJNYWNoaW5lLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewogCi0gICAgY2xhc3MgSlNBY3RpdmF0aW9uOwotICAgIGNsYXNzIEpTRnVuY3Rpb247
Ci0gICAgY2xhc3MgUmVnaXN0ZXI7CisgICAgc3RydWN0IEFyZ3VtZW50c0RhdGEgOiBOb25jb3B5
YWJsZSB7CisgICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbjsKKworICAgICAgICB1bnNp
Z25lZCBudW1QYXJhbWV0ZXJzOworICAgICAgICBpbnQgZmlyc3RQYXJhbWV0ZXJJbmRleDsKKyAg
ICAgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzOworCisgICAgICAgIFJlZ2lzdGVyKiByZWdpc3Rl
cnM7CisgICAgICAgIE93bkFycmF5UHRyPFJlZ2lzdGVyPiByZWdpc3RlckFycmF5OworCisgICAg
ICAgIFJlZ2lzdGVyKiBleHRyYUFyZ3VtZW50czsKKyAgICAgICAgT3duQXJyYXlQdHI8Ym9vbD4g
ZGVsZXRlZEFyZ3VtZW50czsKKyAgICAgICAgUmVnaXN0ZXIgZXh0cmFBcmd1bWVudHNGaXhlZEJ1
ZmZlcls0XTsKKworICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7CisgICAgICAgIGJvb2wgb3Zl
cnJvZGVMZW5ndGggOiAxOworICAgICAgICBib29sIG92ZXJyb2RlQ2FsbGVlIDogMTsKKyAgICB9
OwogCi0gICAgc3RydWN0IEFyZ3VtZW50c0RhdGE7CiAKICAgICBjbGFzcyBBcmd1bWVudHMgOiBw
dWJsaWMgSlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgQXJndW1lbnRzKEV4ZWNTdGF0
ZSosIEpTRnVuY3Rpb24qLCBKU0FjdGl2YXRpb24qLCBpbnQgZmlyc3RBcmd1bWVudEluZGV4LCBS
ZWdpc3RlciogYXJndiwgaW50IGFyZ2MpOworICAgICAgICBBcmd1bWVudHMoRXhlY1N0YXRlKiwg
UmVnaXN0ZXIqIGNhbGxGcmFtZSk7CisgICAgICAgIEFyZ3VtZW50cyhFeGVjU3RhdGUqLCBKU0Fj
dGl2YXRpb24qKTsKICAgICAgICAgdmlydHVhbCB+QXJndW1lbnRzKCk7CiAKICAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwpAQCAtNDUsNiArNjMsOSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB2b2lkIGZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSosIEFyZ0xpc3QmKTsKIAor
ICAgICAgICB2b2lkIGNvcHlSZWdpc3RlcnMoKTsKKyAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMo
UmVnaXN0ZXIqIHJlZ2lzdGVycykgeyBkLT5yZWdpc3RlcnMgPSByZWdpc3RlcnM7IH0KKwogICAg
IHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNTUsOSArNzYsMTAyIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCisgICAgICAgIHZvaWQgaW5pdChFeGVjU3RhdGUq
LCBSZWdpc3RlciogY2FsbEZyYW1lKTsKKwogICAgICAgICBPd25QdHI8QXJndW1lbnRzRGF0YT4g
ZDsKICAgICB9OwogCisgICAgaW5saW5lIHZvaWQgQXJndW1lbnRzOjppbml0KEV4ZWNTdGF0ZSog
ZXhlYywgUmVnaXN0ZXIqIGNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIEpTRnVuY3Rpb24qIGNh
bGxlZTsKKyAgICAgICAgaW50IGZpcnN0UGFyYW1ldGVySW5kZXg7CisgICAgICAgIFJlZ2lzdGVy
KiBhcmd2OworICAgICAgICBpbnQgbnVtQXJndW1lbnRzOworICAgICAgICBleGVjLT5tYWNoaW5l
KCktPmdldEFyZ3VtZW50c0RhdGEoY2FsbEZyYW1lLCBjYWxsZWUsIGZpcnN0UGFyYW1ldGVySW5k
ZXgsIGFyZ3YsIG51bUFyZ3VtZW50cyk7CisKKyAgICAgICAgZC0+bnVtUGFyYW1ldGVycyA9IGNh
bGxlZS0+bnVtUGFyYW1ldGVycygpOworICAgICAgICBkLT5maXJzdFBhcmFtZXRlckluZGV4ID0g
Zmlyc3RQYXJhbWV0ZXJJbmRleDsKKyAgICAgICAgZC0+bnVtQXJndW1lbnRzID0gbnVtQXJndW1l
bnRzOworCisgICAgICAgIGQtPnJlZ2lzdGVycyA9IGNhbGxGcmFtZTsKKworICAgICAgICBSZWdp
c3RlciogZXh0cmFBcmd1bWVudHM7CisgICAgICAgIGlmIChkLT5udW1Bcmd1bWVudHMgPD0gZC0+
bnVtUGFyYW1ldGVycykKKyAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzID0gMDsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1FeHRyYUFyZ3VtZW50cyA9IGQtPm51bUFy
Z3VtZW50cyAtIGQtPm51bVBhcmFtZXRlcnM7CisgICAgICAgICAgICBpZiAobnVtRXh0cmFBcmd1
bWVudHMgPiBzaXplb2YoZC0+ZXh0cmFBcmd1bWVudHNGaXhlZEJ1ZmZlcikgLyBzaXplb2YoUmVn
aXN0ZXIpKQorICAgICAgICAgICAgICAgIGV4dHJhQXJndW1lbnRzID0gbmV3IFJlZ2lzdGVyW251
bUV4dHJhQXJndW1lbnRzXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBleHRy
YUFyZ3VtZW50cyA9IGQtPmV4dHJhQXJndW1lbnRzRml4ZWRCdWZmZXI7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRXh0cmFBcmd1bWVudHM7ICsraSkKKyAgICAgICAg
ICAgICAgICBleHRyYUFyZ3VtZW50c1tpXSA9IGFyZ3ZbZC0+bnVtUGFyYW1ldGVycyArIGldOwor
ICAgICAgICB9CisKKyAgICAgICAgZC0+ZXh0cmFBcmd1bWVudHMgPSBleHRyYUFyZ3VtZW50czsK
KworICAgICAgICBkLT5jYWxsZWUgPSBjYWxsZWU7CisgICAgICAgIGQtPm92ZXJyb2RlTGVuZ3Ro
ID0gZmFsc2U7CisgICAgICAgIGQtPm92ZXJyb2RlQ2FsbGVlID0gZmFsc2U7CisgICAgfQorCisg
ICAgaW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXIq
IGNhbGxGcmFtZSkKKyAgICAgICAgOiBKU09iamVjdChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQorICAgICAgICAsIGQobmV3IEFyZ3VtZW50c0RhdGEp
CisgICAgeworICAgICAgICBkLT5hY3RpdmF0aW9uID0gMDsKKyAgICAgICAgaW5pdChleGVjLCBj
YWxsRnJhbWUpOworICAgIH0KKworICAgIGlubGluZSBBcmd1bWVudHM6OkFyZ3VtZW50cyhFeGVj
U3RhdGUqIGV4ZWMsIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbikKKyAgICAgICAgOiBKU09iamVj
dChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQorICAg
ICAgICAsIGQobmV3IEFyZ3VtZW50c0RhdGEpCisgICAgeworICAgICAgICBBU1NFUlQoYWN0aXZh
dGlvbik7CisgICAgICAgIGQtPmFjdGl2YXRpb24gPSBhY3RpdmF0aW9uOworICAgICAgICBpbml0
KGV4ZWMsICZhY3RpdmF0aW9uLT5yZWdpc3RlckF0KDApKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
dm9pZCBBcmd1bWVudHM6OmNvcHlSZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFk
LT5hY3RpdmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKCFkLT5yZWdpc3RlckFycmF5KTsKKworICAg
ICAgICBzaXplX3QgbnVtUGFyYW1ldGVyc01pbnVzVGhpcyA9IGQtPmNhbGxlZS0+bV9ib2R5LT5n
ZW5lcmF0ZWRCeXRlQ29kZSgpLm51bVBhcmFtZXRlcnMgLSAxOworCisgICAgICAgIGlmICghbnVt
UGFyYW1ldGVyc01pbnVzVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSBudW1QYXJhbWV0ZXJzTWludXNUaGlzICsgUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICBzaXplX3QgcmVnaXN0ZXJBcnJheVNpemUgPSBu
dW1QYXJhbWV0ZXJzTWludXNUaGlzOworCisgICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlckFycmF5
ID0gbmV3IFJlZ2lzdGVyW3JlZ2lzdGVyQXJyYXlTaXplXTsKKyAgICAgICAgbWVtY3B5KHJlZ2lz
dGVyQXJyYXksIGQtPnJlZ2lzdGVycyAtIHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFycmF5U2l6
ZSAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBkLT5yZWdpc3RlckFycmF5LnNldChyZWdp
c3RlckFycmF5KTsKKyAgICAgICAgZC0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheSArIHJlZ2lz
dGVyT2Zmc2V0OworICAgIH0KKworICAgIC8vIFRoaXMgSlNBY3RpdmF0aW9uIGZ1bmN0aW9uIGlz
IGRlZmluZWQgaGVyZSBzbyBpdCBjYW4gZ2V0IGF0IEFyZ3VtZW50czo6c2V0UmVnaXN0ZXJzLgor
ICAgIGlubGluZSB2b2lkIEpTQWN0aXZhdGlvbjo6Y29weVJlZ2lzdGVycyhKU1ZhbHVlKiBhcmd1
bWVudHMpCisgICAgeworICAgICAgICBBU1NFUlQoIWQoKS0+cmVnaXN0ZXJBcnJheSk7CisKKyAg
ICAgICAgc2l6ZV90IG51bVBhcmFtZXRlcnNNaW51c1RoaXMgPSBkKCktPmZ1bmN0aW9uQm9keS0+
Z2VuZXJhdGVkQnl0ZUNvZGUoKS5udW1QYXJhbWV0ZXJzIC0gMTsKKyAgICAgICAgc2l6ZV90IG51
bVZhcnMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVkQnl0ZUNvZGUoKS5udW1WYXJzOwor
ICAgICAgICBzaXplX3QgbnVtTG9jYWxzID0gbnVtVmFycyArIG51bVBhcmFtZXRlcnNNaW51c1Ro
aXM7CisKKyAgICAgICAgaWYgKCFudW1Mb2NhbHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gbnVtUGFyYW1ldGVyc01pbnVzVGhpcyArIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJy
YXlTaXplID0gbnVtTG9jYWxzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwor
CisgICAgICAgIFJlZ2lzdGVyKiByZWdpc3RlckFycmF5ID0gY29weVJlZ2lzdGVyQXJyYXkoZCgp
LT5yZWdpc3RlcnMgLSByZWdpc3Rlck9mZnNldCwgcmVnaXN0ZXJBcnJheVNpemUpOworICAgICAg
ICBzZXRSZWdpc3RlcnMocmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFy
cmF5KTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cyAmJiBhcmd1bWVudHMtPmlzT2JqZWN0KCZBcmd1
bWVudHM6OmluZm8pKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8QXJndW1lbnRzKj4oYXJndW1l
bnRzKS0+c2V0UmVnaXN0ZXJzKHJlZ2lzdGVyQXJyYXkgKyByZWdpc3Rlck9mZnNldCk7CisgICAg
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEFyZ3VtZW50c19oCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDEwICsx
NTUsMTggQEAgSlNWYWx1ZSogSlNBY3RpdmF0aW9uOjphcmd1bWVudHNHZXR0ZXIoRQogewogICAg
IEpTQWN0aXZhdGlvbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTQWN0aXZhdGlvbio+KHNsb3Qu
c2xvdEJhc2UoKSk7CiAKLSAgICBBcmd1bWVudHMqIGFyZ3VtZW50cyA9IHN0YXRpY19jYXN0PEFy
Z3VtZW50cyo+KHRoaXNPYmotPmQoKS0+cmVnaXN0ZXJzW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxD
YWxsZWVBcmd1bWVudHNdLmpzVmFsdWUoZXhlYykpOwotICAgIGlmICghYXJndW1lbnRzKSB7Ci0g
ICAgICAgIGFyZ3VtZW50cyA9IHRoaXNPYmotPmNyZWF0ZUFyZ3VtZW50c09iamVjdChleGVjKTsK
LSAgICAgICAgdGhpc09iai0+ZCgpLT5yZWdpc3RlcnNbUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENh
bGxlZUFyZ3VtZW50c10gPSBhcmd1bWVudHM7CisgICAgSlNWYWx1ZSogYXJndW1lbnRzOworICAg
IGlmICh0aGlzT2JqLT5kKCktPmZ1bmN0aW9uQm9keS0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICB0aGlzT2JqLT5zeW1ib2xUYWJsZUdldChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBzbG90KTsKKyAgICAgICAgYXJndW1lbnRz
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhcmd1bWVudHMgPSB0aGlzT2JqLT5kKCktPnJlZ2lzdGVy
c1tSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzXS5nZXRKU1ZhbHVlKCk7Cisg
ICAgICAgIGlmICghYXJndW1lbnRzKSB7CisgICAgICAgICAgICBhcmd1bWVudHMgPSBuZXcgKGV4
ZWMpIEFyZ3VtZW50cyhleGVjLCB0aGlzT2JqKTsKKyAgICAgICAgICAgIHRoaXNPYmotPmQoKS0+
cmVnaXN0ZXJzW1JlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHNdID0gYXJndW1l
bnRzOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChhcmd1bWVudHMtPmlzT2JqZWN0KCZBcmd1
bWVudHM6OmluZm8pKTsKICAgICB9CiAKICAgICByZXR1cm4gYXJndW1lbnRzOwpAQCAtMTcyLDE1
ICsxODAsNCBAQCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBKU0FjdGl2YXRpb246CiAgICAg
cmV0dXJuIGFyZ3VtZW50c0dldHRlcjsKIH0KIAotQXJndW1lbnRzKiBKU0FjdGl2YXRpb246OmNy
ZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb247Ci0gICAgUmVnaXN0ZXIqIGFyZ3Y7Ci0gICAgaW50IGFyZ2M7Ci0gICAgaW50IGZp
cnN0UGFyYW1ldGVySW5kZXg7Ci0gICAgZXhlYy0+bWFjaGluZSgpLT5nZXRBcmd1bWVudHNEYXRh
KGQoKS0+cmVnaXN0ZXJzLCBmdW5jdGlvbiwgZmlyc3RQYXJhbWV0ZXJJbmRleCwgYXJndiwgYXJn
Yyk7Ci0KLSAgICByZXR1cm4gbmV3IChleGVjKSBBcmd1bWVudHMoZXhlYywgZnVuY3Rpb24sIHRo
aXMsIGZpcnN0UGFyYW1ldGVySW5kZXgsIGFyZ3YsIGFyZ2MpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDM3MTQ0KQor
KysgSmF2YVNjcmlwdENvcmUva2pzL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw1MyArNDMsMzYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNBY3RpdmF0aW9uIDog
cHVibGljIEpTVmFyaWFibGVPYmplY3QgewogICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmpl
Y3QgQmFzZTsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4sIFJlZ2lzdGVyKik7CisgICAgICAgIEpT
QWN0aXZhdGlvbihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+LCBSZWdp
c3RlciopOwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2YXRpb24oKTsKLSAgICAgICAgCisKICAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEeW5h
bWljU2NvcGUoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKIAotICAg
ICAgICBpbmxpbmUgdm9pZCB1bmNoZWNrZWRTeW1ib2xUYWJsZUdldChpbnQgaW5kZXgsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKLSAgICAgICAgewotICAgICAgICAgICAgc2xvdC5zZXRSZWdpc3RlclNs
b3QoJnJlZ2lzdGVyQXQoaW5kZXgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBKU1Zh
bHVlKiB1bmNoZWNrZWRTeW1ib2xUYWJsZUdldFZhbHVlKGludCBpbmRleCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyQXQoaW5kZXgpLmdldEpTVmFsdWUoKTsKLSAgICAg
ICAgfQotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIEpTVmFsdWUqLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAotICAgICAgICBpbmxpbmUgdm9p
ZCB1bmNoZWNrZWRTeW1ib2xUYWJsZVB1dChpbnQgaW5kZXgsIEpTVmFsdWUqIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlckF0KGluZGV4KSA9IHZhbHVlOwotICAgICAgICB9
Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHB1dFdpdGhBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKiwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUpOwogCiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVj
dChFeGVjU3RhdGUqKSBjb25zdDsKIAotICAgICAgICB2b2lkIGNvcHlSZWdpc3RlcnMoKTsKKyAg
ICAgICAgdm9pZCBjb3B5UmVnaXN0ZXJzKEpTVmFsdWUqIGFyZ3VtZW50cyk7CiAgICAgICAgIAog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAg
ICAgIE5FVkVSX0lOTElORSBBcmd1bWVudHMqIGNyZWF0ZUFyZ3VtZW50c09iamVjdChFeGVjU3Rh
dGUqKTsKLQogICAgIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCBKU0FjdGl2YXRpb25EYXRhIDog
cHVibGljIEpTVmFyaWFibGVPYmplY3REYXRhIHsKLSAgICAgICAgICAgIEpTQWN0aXZhdGlvbkRh
dGEoUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHlfLCBSZWdpc3Rlciog
cmVnaXN0ZXJzKQotICAgICAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdERhdGEoJmZ1bmN0
aW9uQm9keV8tPnN5bWJvbFRhYmxlKCksIHJlZ2lzdGVycykKLSAgICAgICAgICAgICAgICAsIGZ1
bmN0aW9uQm9keShmdW5jdGlvbkJvZHlfKQorICAgICAgICAgICAgSlNBY3RpdmF0aW9uRGF0YShQ
YXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGZ1bmN0aW9uQm9keSwgUmVnaXN0ZXIqIHJlZ2lz
dGVycykKKyAgICAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKCZmdW5jdGlvbkJv
ZHktPnN5bWJvbFRhYmxlKCksIHJlZ2lzdGVycykKKyAgICAgICAgICAgICAgICAsIGZ1bmN0aW9u
Qm9keShmdW5jdGlvbkJvZHkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBmdW5jdGlvbkJvZHk7IC8vIE93bnMgdGhl
IHN5bWJvbCB0YWJsZSBhbmQgY29kZSBibG9jaworICAgICAgICAgICAgUmVmUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IGZ1bmN0aW9uQm9keTsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwpAQCAtOTgsMjQgKzgxLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTQWN0aXZhdGlvbkRhdGEqIGQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxKU0FjdGl2YXRpb25EYXRhKj4oSlNWYXJpYWJsZU9iamVjdDo6ZCk7IH0KICAgICB9Owog
ICAgIAotICAgIGlubGluZSB2b2lkIEpTQWN0aXZhdGlvbjo6Y29weVJlZ2lzdGVycygpCi0gICAg
ewotICAgICAgICBBU1NFUlQoIWQoKS0+cmVnaXN0ZXJBcnJheSk7Ci0KLSAgICAgICAgc2l6ZV90
IG51bVBhcmFtZXRlcnNNaW51c1RoaXMgPSBkKCktPmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVkQnl0
ZUNvZGUoKS5udW1QYXJhbWV0ZXJzIC0gMTsKLSAgICAgICAgc2l6ZV90IG51bVZhcnMgPSBkKCkt
PmZ1bmN0aW9uQm9keS0+Z2VuZXJhdGVkQnl0ZUNvZGUoKS5udW1WYXJzOwotICAgICAgICBzaXpl
X3QgbnVtTG9jYWxzID0gbnVtVmFycyArIG51bVBhcmFtZXRlcnNNaW51c1RoaXM7Ci0KLSAgICAg
ICAgaWYgKCFudW1Mb2NhbHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gbnVtUGFyYW1ldGVyc01pbnVzVGhpcyArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAgc2l6ZV90IHJlZ2lzdGVyQXJyYXlTaXplID0gbnVt
TG9jYWxzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwotCi0gICAgICAgIFJl
Z2lzdGVyKiByZWdpc3RlckFycmF5ID0gY29weVJlZ2lzdGVyQXJyYXkoZCgpLT5yZWdpc3RlcnMg
LSByZWdpc3Rlck9mZnNldCwgcmVnaXN0ZXJBcnJheVNpemUpOwotICAgICAgICBzZXRSZWdpc3Rl
cnMocmVnaXN0ZXJBcnJheSArIHJlZ2lzdGVyT2Zmc2V0LCByZWdpc3RlckFycmF5KTsKLSAgICB9
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNBY3RpdmF0aW9uX2gKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9ncmFtbWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL2dyYW1tYXIueQkocmV2aXNpb24gMzcxNDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
Z3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDcgQEAgUHJvcGVydHk6CiAg
IHwgTlVNQkVSICc6JyBBc3NpZ25tZW50RXhwciAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVG
ZWF0dXJlSW5mbzxQcm9wZXJ0eU5vZGUqPihuZXcgUHJvcGVydHlOb2RlKEdMT0JBTF9EQVRBLCBJ
ZGVudGlmaWVyKEdMT0JBTF9EQVRBLCBVU3RyaW5nOjpmcm9tKCQxKSksICQzLm1fbm9kZSwgUHJv
cGVydHlOb2RlOjpDb25zdGFudCksICQzLm1fZmVhdHVyZUluZm8sICQzLm1fbnVtQ29uc3RhbnRz
KTsgfQogICB8IElERU5UIElERU5UICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9T
RUJSQUNFICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88UHJvcGVydHlOb2RlKj4obWFr
ZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKGdsb2JhbFB0ciwgKiQxLCAqJDIsIDAsICQ2LCBM
RVhFUi0+c291cmNlUmFuZ2UoJDUsICQ3KSksIENsb3N1cmVGZWF0dXJlLCAwKTsgREJHKCQ2LCBA
NSwgQDcpOyBpZiAoISQkLm1fbm9kZSkgWVlBQk9SVDsgfQogICB8IElERU5UIElERU5UICcoJyBG
b3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9k
ZUZlYXR1cmVJbmZvPFByb3BlcnR5Tm9kZSo+KG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm9k
ZShnbG9iYWxQdHIsICokMSwgKiQyLCAkNC5tX25vZGUuaGVhZCwgJDcsIExFWEVSLT5zb3VyY2VS
YW5nZSgkNiwgJDgpKSwgJDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0dXJlLCAwKTsgREJH
KCQ3LCBANiwgQDgpOyBpZiAoISQkLm1fbm9kZSkgWVlBQk9SVDsgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm88UHJv
cGVydHlOb2RlKj4obWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKGdsb2JhbFB0ciwgKiQx
LCAqJDIsICQ0Lm1fbm9kZS5oZWFkLCAkNywgTEVYRVItPnNvdXJjZVJhbmdlKCQ2LCAkOCkpLCAk
NC5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDcsIEA2LCBAOCk7ICQ3
LT5zZXRVc2VzQXJndW1lbnRzKCQ3LT51c2VzQXJndW1lbnRzKCkgfCAoJDQubV9mZWF0dXJlSW5m
byAmIEFyZ3VtZW50c0ZlYXR1cmUpKTsgaWYgKCEkJC5tX25vZGUpIFlZQUJPUlQ7IH0KIDsKIAog
UHJvcGVydHlMaXN0OgpAQCAtMTE1OSwxNCArMTE1OSwxNCBAQCBEZWJ1Z2dlclN0YXRlbWVudDoK
IEZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgRlVOQ1RJT04gSURFTlQgJygnICcpJyBPUEVOQlJB
Q0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0dXJlSW5mbyhu
ZXcgRnVuY0RlY2xOb2RlKEdMT0JBTF9EQVRBLCAqJDIsICQ2LCBMRVhFUi0+c291cmNlUmFuZ2Uo
JDUsICQ3KSksICgoKiQyID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMp
ID8gQXJndW1lbnRzRmVhdHVyZSA6IDApIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDYsIEA1
LCBANyk7IH0KICAgfCBGVU5DVElPTiBJREVOVCAnKCcgRm9ybWFsUGFyYW1ldGVyTGlzdCAnKScg
T1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFCi0gICAgICB7ICQkID0gY3JlYXRlTm9k
ZUZlYXR1cmVJbmZvKG5ldyBGdW5jRGVjbE5vZGUoR0xPQkFMX0RBVEEsICokMiwgJDcsIExFWEVS
LT5zb3VyY2VSYW5nZSgkNiwgJDgpLCAkNC5tX25vZGUuaGVhZCksICgoKiQyID09IEdMT0JBTF9E
QVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpID8gQXJndW1lbnRzRmVhdHVyZSA6IDApIHwg
JDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0dXJlLCAwKTsgREJHKCQ3LCBANiwgQDgpOyB9
CisgICAgICB7ICQkID0gY3JlYXRlTm9kZUZlYXR1cmVJbmZvKG5ldyBGdW5jRGVjbE5vZGUoR0xP
QkFMX0RBVEEsICokMiwgJDcsIExFWEVSLT5zb3VyY2VSYW5nZSgkNiwgJDgpLCAkNC5tX25vZGUu
aGVhZCksICgoKiQyID09IEdMT0JBTF9EQVRBLT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMpID8g
QXJndW1lbnRzRmVhdHVyZSA6IDApIHwgJDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0dXJl
LCAwKTsgREJHKCQ3LCBANiwgQDgpOyAkNy0+c2V0VXNlc0FyZ3VtZW50cygkNy0+dXNlc0FyZ3Vt
ZW50cygpIHwgKCQ0Lm1fZmVhdHVyZUluZm8gJiBBcmd1bWVudHNGZWF0dXJlKSk7IH0KIDsKIAog
RnVuY3Rpb25FeHByOgogICAgIEZVTkNUSU9OICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9k
eSBDTE9TRUJSQUNFIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9k
ZShHTE9CQUxfREFUQSwgR0xPQkFMX0RBVEEtPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVy
LCAkNSwgTEVYRVItPnNvdXJjZVJhbmdlKCQ0LCAkNikpLCBDbG9zdXJlRmVhdHVyZSwgMCk7IERC
RygkNSwgQDQsIEA2KTsgfQotICB8IEZVTkNUSU9OICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcp
JyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5vZGVGZWF0
dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCBHTE9CQUxfREFUQS0+cHJvcGVy
dHlOYW1lcy0+bnVsbElkZW50aWZpZXIsICQ2LCBMRVhFUi0+c291cmNlUmFuZ2UoJDUsICQ3KSwg
JDMubV9ub2RlLmhlYWQpLCAkMy5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBE
QkcoJDYsIEA1LCBANyk7IH0KKyAgICB8IEZVTkNUSU9OICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0
ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5vZGVG
ZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCBHTE9CQUxfREFUQS0+cHJv
cGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXIsICQ2LCBMRVhFUi0+c291cmNlUmFuZ2UoJDUsICQ3
KSwgJDMubV9ub2RlLmhlYWQpLCAkMy5tX2ZlYXR1cmVJbmZvIHwgQ2xvc3VyZUZlYXR1cmUsIDAp
OyBEQkcoJDYsIEA1LCBANyk7ICQ2LT5zZXRVc2VzQXJndW1lbnRzKCQ2LT51c2VzQXJndW1lbnRz
KCkgfCAoJDMubV9mZWF0dXJlSW5mbyAmIEFyZ3VtZW50c0ZlYXR1cmUpKTsgfQogICB8IEZVTkNU
SU9OIElERU5UICcoJyAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBDTE9TRUJSQUNFIHsgJCQg
PSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9kZShHTE9CQUxfREFUQSwgKiQy
LCAkNiwgTEVYRVItPnNvdXJjZVJhbmdlKCQ1LCAkNykpLCBDbG9zdXJlRmVhdHVyZSwgMCk7IERC
RygkNiwgQDUsIEA3KTsgfQotICB8IEZVTkNUSU9OIElERU5UICcoJyBGb3JtYWxQYXJhbWV0ZXJM
aXN0ICcpJyBPUEVOQlJBQ0UgRnVuY3Rpb25Cb2R5IENMT1NFQlJBQ0UgeyAkJCA9IGNyZWF0ZU5v
ZGVGZWF0dXJlSW5mbyhuZXcgRnVuY0V4cHJOb2RlKEdMT0JBTF9EQVRBLCAqJDIsICQ3LCBMRVhF
Ui0+c291cmNlUmFuZ2UoJDYsICQ4KSwgJDQubV9ub2RlLmhlYWQpLCAkNC5tX2ZlYXR1cmVJbmZv
IHwgQ2xvc3VyZUZlYXR1cmUsIDApOyBEQkcoJDcsIEA2LCBAOCk7IH0KKyAgfCBGVU5DVElPTiBJ
REVOVCAnKCcgRm9ybWFsUGFyYW1ldGVyTGlzdCAnKScgT1BFTkJSQUNFIEZ1bmN0aW9uQm9keSBD
TE9TRUJSQUNFIHsgJCQgPSBjcmVhdGVOb2RlRmVhdHVyZUluZm8obmV3IEZ1bmNFeHByTm9kZShH
TE9CQUxfREFUQSwgKiQyLCAkNywgTEVYRVItPnNvdXJjZVJhbmdlKCQ2LCAkOCksICQ0Lm1fbm9k
ZS5oZWFkKSwgJDQubV9mZWF0dXJlSW5mbyB8IENsb3N1cmVGZWF0dXJlLCAwKTsgREJHKCQ3LCBA
NiwgQDgpOyAkNy0+c2V0VXNlc0FyZ3VtZW50cygkNy0+dXNlc0FyZ3VtZW50cygpIHwgKCQ0Lm1f
ZmVhdHVyZUluZm8gJiBBcmd1bWVudHNGZWF0dXJlKSk7IH0KIDsKIAogRm9ybWFsUGFyYW1ldGVy
TGlzdDoKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAzNzE0NCkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9ub2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTc2LDYgKzIxNzYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNl
c0V2YWw7IH0KICAgICAgICAgYm9vbCBuZWVkc0Nsb3N1cmUoKSBjb25zdCB7IHJldHVybiBtX25l
ZWRzQ2xvc3VyZTsgfQogICAgICAgICBib29sIHVzZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVy
biBtX3VzZXNBcmd1bWVudHM7IH0KKyAgICAgICAgdm9pZCBzZXRVc2VzQXJndW1lbnRzKGJvb2wg
dXNlc0FyZ3VtZW50cykgeyBtX3VzZXNBcmd1bWVudHMgPSB1c2VzQXJndW1lbnRzOyB9CiAKICAg
ICAgICAgVmFyU3RhY2smIHZhclN0YWNrKCkgeyByZXR1cm4gbV92YXJTdGFjazsgfQogICAgICAg
ICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyByZXR1cm4gbV9mdW5jdGlvblN0YWNr
OyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9tYXNtL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL21hc20vWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDM3MTQ0KQor
KysgSmF2YVNjcmlwdENvcmUvbWFzbS9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgzLDYgKzE4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgT1BfQUREX0V2R3YgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDEsCiAgICAgICAgIE9QX0FERF9HdkV2ICAgICAgICAgICAgICAgICAgICAg
PSAweDAzLAogICAgICAgICBPUF9PUl9Fdkd2ICAgICAgICAgICAgICAgICAgICAgID0gMHgwOSwK
KyAgICAgICAgT1BfT1JfR3ZFdiAgICAgICAgICAgICAgICAgICAgICA9IDB4MEIsCiAgICAgICAg
IE9QXzJCWVRFX0VTQ0FQRSAgICAgICAgICAgICAgICAgPSAweDBGLAogICAgICAgICBPUF9BTkRf
RXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHgyMSwKICAgICAgICAgT1BfU1VCX0V2R3YgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjksCkBAIC00NDMsNiArNDQ0LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgZW1pdE1vZFJtX3JyKHNyYywgZHN0KTsKICAgICB9CiAKKyAgICB2b2lkIG9ybF9tcihp
bnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAg
ICAgbV9idWZmZXItPnB1dEJ5dGUoT1BfT1JfR3ZFdik7CisgICAgICAgIGVtaXRNb2RSbV9ybShk
c3QsIGJhc2UsIG9mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBvcmxfaTMycihpbnQgaW1tLCBS
ZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fYnVmZmVyLT5wdXRCeXRlKE9QX0dST1VQ
MV9FdkliKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3MTQ2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMTAtMDEgIENhbWVyb24g
WndhcmljaCAgPHp3YXJpY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzb21lIHRlc3RzIGZvciB0aGUgJ2FyZ3VtZW50cycg
b2JqZWN0LiBUaGUgaW5jbHVkZWQgZmFpbHVyZXMgYXJlCisgICAgICAgIGludGVudGlvbmFsLiBU
aGV5IGFyZSBmb3IgcmVncmVzc2lvbnMgaW50cm9kdWNlZCBpbiByMzcwNTAsIGFuZCB0aGV5Cisg
ICAgICAgIHdpbGwgaG9wZWZ1bGx5IGJlIGZpeGVkIGluIHRoZSBuZWFyIGZ1dHVyZS4KKworICAg
ICAgICAqIGZhc3QvanMvYXJndW1lbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pz
L2Z1bmN0aW9uLWRvdC1hcmd1bWVudHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMv
cmVzb3VyY2VzL2FyZ3VtZW50cy5qczoKKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9mdW5j
dGlvbi1kb3QtYXJndW1lbnRzLmpzOgorCiAyMDA4LTA5LTMwICBFcmljIENhcmxzb24gIDxlcmlj
LmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL2FyZ3VtZW50cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9hcmd1bWVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAzNzE0
NCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJndW1lbnRzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw4IEBAIFBBU1MgYWNjZXNzX2FmdGVyX2RlbGV0ZV9leHRy
YV8yKDEsIDIsIDMKIFBBU1MgYWNjZXNzX2FmdGVyX2RlbGV0ZV9leHRyYV8zKDEsIDIsIDMsIDQs
IDUpIGlzIDMKIFBBU1MgYWNjZXNzX2FmdGVyX2RlbGV0ZV9leHRyYV81KDEsIDIsIDMsIDQsIDUp
IGlzIDUKIFBBU1MgYXJndW1lbnRzUGFyYW0odHJ1ZSkgaXMgdHJ1ZQorRkFJTCBhcmd1bWVudHNW
YXJVbmRlZmluZWQoKSBzaG91bGQgYmUgdW5kZWZpbmVkLiBXYXMgW29iamVjdCBBcmd1bWVudHNd
CitGQUlMIGFyZ3VtZW50c0NvbnN0VW5kZWZpbmVkKCkgc2hvdWxkIGJlIHVuZGVmaW5lZC4gV2Fz
IFtvYmplY3QgQXJndW1lbnRzXQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBU
RVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2Z1bmN0aW9uLWRvdC1hcmd1
bWVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvZnVu
Y3Rpb24tZG90LWFyZ3VtZW50cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDM3MTQ0KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9mdW5jdGlvbi1kb3QtYXJndW1lbnRzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNCwxNCArNCwyMCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBCiAKIAogUEFTUyBhc3NpZ25UZXN0KCkgaXMgdHJ1ZQorRkFJTCBhc3NpZ25W
YXJVbmRlZmluZWRUZXN0KCkgc2hvdWxkIGJlIHVuZGVmaW5lZC4gV2FzIFtvYmplY3QgQXJndW1l
bnRzXQorRkFJTCBhc3NpZ25WYXJVbmRlZmluZWRUZXN0MigpIHNob3VsZCBiZSB1bmRlZmluZWQu
IFdhcyBbb2JqZWN0IEFyZ3VtZW50c10KIFBBU1MgYXNzaWduVmFySW5pdFRlc3QoKSBpcyB0cnVl
CiBQQVNTIGFzc2lnblZhckluaXRUZXN0MigpIGlzIHRydWUKK0ZBSUwgYXNzaWduQ29uc3RVbmRl
ZmluZWRUZXN0KCkgc2hvdWxkIGJlIHVuZGVmaW5lZC4gV2FzIFtvYmplY3QgQXJndW1lbnRzXQor
RkFJTCBhc3NpZ25Db25zdFVuZGVmaW5lZFRlc3QyKCkgc2hvdWxkIGJlIHVuZGVmaW5lZC4gV2Fz
IFtvYmplY3QgQXJndW1lbnRzXQogUEFTUyBhc3NpZ25Db25zdEluaXRUZXN0KCkgaXMgdHJ1ZQog
UEFTUyBhc3NpZ25Db25zdEluaXRUZXN0MigpIGlzIHRydWUKIFBBU1MgYXNzaWduRm9ySW5pdFRl
c3QoKSBpcyB0cnVlCiBQQVNTIGFzc2lnbkZvckluaXRUZXN0MigpIGlzIHRydWUKIFBBU1MgYXNz
aWduRm9ySW5Jbml0VGVzdCgpIGlzIHRydWUKLUZBSUwgcGFyYW1Jbml0VGVzdCh0cnVlKSBzaG91
bGQgYmUgdHJ1ZSAob2YgdHlwZSBib29sZWFuKS4gV2FzIFtvYmplY3QgQXJndW1lbnRzXSAob2Yg
dHlwZSBvYmplY3QpLgorUEFTUyBwYXJhbUluaXRUZXN0KHRydWUpIGlzIHRydWUKK1BBU1MgdGVh
ck9mZlRlc3QoKVswXSBpcyB0cnVlCitQQVNTIHRlYXJPZmZUZXN0Mih0cnVlKVswXSBpcyB0cnVl
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FyZ3VtZW50cy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9hcmd1bWVudHMuanMJKHJldmlzaW9uIDM3
MTQ0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvYXJndW1lbnRzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDYsNyArNTA2LDIwIEBAIGZ1bmN0aW9uIGFyZ3VtZW50c1BhcmFtKGFy
Z3VtZW50cykKIHsKICAgICByZXR1cm4gYXJndW1lbnRzOwogfQotCiBzaG91bGRCZVRydWUoImFy
Z3VtZW50c1BhcmFtKHRydWUpIik7CiAKK2Z1bmN0aW9uIGFyZ3VtZW50c1ZhclVuZGVmaW5lZCgp
Cit7CisgICAgdmFyIGFyZ3VtZW50czsKKyAgICByZXR1cm4gYXJndW1lbnRzOworfQorc2hvdWxk
QmVVbmRlZmluZWQoImFyZ3VtZW50c1ZhclVuZGVmaW5lZCgpIik7CisKK2Z1bmN0aW9uIGFyZ3Vt
ZW50c0NvbnN0VW5kZWZpbmVkKCkKK3sKKyAgICBjb25zdCBhcmd1bWVudHM7CisgICAgcmV0dXJu
IGFyZ3VtZW50czsKK30KK3Nob3VsZEJlVW5kZWZpbmVkKCJhcmd1bWVudHNDb25zdFVuZGVmaW5l
ZCgpIik7CisKIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZXNvdXJjZXMvZnVuY3Rpb24tZG90LWFyZ3VtZW50cy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9mdW5jdGlvbi1kb3QtYXJndW1lbnRz
LmpzCShyZXZpc2lvbiAzNzE0NCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2Z1
bmN0aW9uLWRvdC1hcmd1bWVudHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEyLDkgKzEyLDMyIEBA
IGZ1bmN0aW9uIGFzc2lnblRlc3QoKQogICAgIGFyZ3VtZW50cyA9IHRydWU7CiAgICAgcmV0dXJu
IGcoKTsKIH0KLQogc2hvdWxkQmVUcnVlKCJhc3NpZ25UZXN0KCkiKTsKIAorZnVuY3Rpb24gYXNz
aWduVmFyVW5kZWZpbmVkVGVzdCgpCit7CisgICAgZnVuY3Rpb24gZygpCisgICAgeworICAgICAg
ICByZXR1cm4gYXNzaWduVmFyVW5kZWZpbmVkVGVzdC5hcmd1bWVudHM7CisgICAgfQorCisgICAg
dmFyIGFyZ3VtZW50czsKKyAgICByZXR1cm4gZygpOworfQorc2hvdWxkQmVVbmRlZmluZWQoImFz
c2lnblZhclVuZGVmaW5lZFRlc3QoKSIpOworCitmdW5jdGlvbiBhc3NpZ25WYXJVbmRlZmluZWRU
ZXN0MigpCit7CisgICAgZnVuY3Rpb24gZygpCisgICAgeworICAgICAgICByZXR1cm4gYXNzaWdu
VmFyVW5kZWZpbmVkVGVzdDIuYXJndW1lbnRzOworICAgIH0KKworICAgIHZhciBhLCBhcmd1bWVu
dHM7CisgICAgcmV0dXJuIGcoKTsKK30KK3Nob3VsZEJlVW5kZWZpbmVkKCJhc3NpZ25WYXJVbmRl
ZmluZWRUZXN0MigpIik7CisKIGZ1bmN0aW9uIGFzc2lnblZhckluaXRUZXN0KCkKIHsKICAgICBm
dW5jdGlvbiBnKCkKQEAgLTI1LDcgKzQ4LDYgQEAgZnVuY3Rpb24gYXNzaWduVmFySW5pdFRlc3Qo
KQogICAgIHZhciBhcmd1bWVudHMgPSB0cnVlOwogICAgIHJldHVybiBnKCk7CiB9Ci0KIHNob3Vs
ZEJlVHJ1ZSgiYXNzaWduVmFySW5pdFRlc3QoKSIpOwogCiBmdW5jdGlvbiBhc3NpZ25WYXJJbml0
VGVzdDIoKQpAQCAtMzgsOSArNjAsMzIgQEAgZnVuY3Rpb24gYXNzaWduVmFySW5pdFRlc3QyKCkK
ICAgICB2YXIgYSwgYXJndW1lbnRzID0gdHJ1ZTsKICAgICByZXR1cm4gZygpOwogfQotCiBzaG91
bGRCZVRydWUoImFzc2lnblZhckluaXRUZXN0MigpIik7CiAKK2Z1bmN0aW9uIGFzc2lnbkNvbnN0
VW5kZWZpbmVkVGVzdCgpCit7CisgICAgZnVuY3Rpb24gZygpCisgICAgeworICAgICAgICByZXR1
cm4gYXNzaWduQ29uc3RVbmRlZmluZWRUZXN0LmFyZ3VtZW50czsKKyAgICB9CisKKyAgICB2YXIg
YXJndW1lbnRzOworICAgIHJldHVybiBnKCk7Cit9CitzaG91bGRCZVVuZGVmaW5lZCgiYXNzaWdu
Q29uc3RVbmRlZmluZWRUZXN0KCkiKTsKKworZnVuY3Rpb24gYXNzaWduQ29uc3RVbmRlZmluZWRU
ZXN0MigpCit7CisgICAgZnVuY3Rpb24gZygpCisgICAgeworICAgICAgICByZXR1cm4gYXNzaWdu
Q29uc3RVbmRlZmluZWRUZXN0Mi5hcmd1bWVudHM7CisgICAgfQorCisgICAgdmFyIGEsIGFyZ3Vt
ZW50czsKKyAgICByZXR1cm4gZygpOworfQorc2hvdWxkQmVVbmRlZmluZWQoImFzc2lnbkNvbnN0
VW5kZWZpbmVkVGVzdDIoKSIpOworCiBmdW5jdGlvbiBhc3NpZ25Db25zdEluaXRUZXN0KCkKIHsK
ICAgICBmdW5jdGlvbiBnKCkKQEAgLTUxLDcgKzk2LDYgQEAgZnVuY3Rpb24gYXNzaWduQ29uc3RJ
bml0VGVzdCgpCiAgICAgY29uc3QgYXJndW1lbnRzID0gdHJ1ZTsKICAgICByZXR1cm4gZygpOwog
fQotCiBzaG91bGRCZVRydWUoImFzc2lnbkNvbnN0SW5pdFRlc3QoKSIpOwogCiBmdW5jdGlvbiBh
c3NpZ25Db25zdEluaXRUZXN0MigpCkBAIC02NCw3ICsxMDgsNiBAQCBmdW5jdGlvbiBhc3NpZ25D
b25zdEluaXRUZXN0MigpCiAgICAgY29uc3QgYSwgYXJndW1lbnRzID0gdHJ1ZTsKICAgICByZXR1
cm4gZygpOwogfQotCiBzaG91bGRCZVRydWUoImFzc2lnbkNvbnN0SW5pdFRlc3QyKCkiKTsKIAog
ZnVuY3Rpb24gYXNzaWduRm9ySW5pdFRlc3QoKQpAQCAtNzcsNyArMTIwLDYgQEAgZnVuY3Rpb24g
YXNzaWduRm9ySW5pdFRlc3QoKQogICAgIGZvciAodmFyIGFyZ3VtZW50cyA9IHRydWU7IGZhbHNl
OykgeyB9CiAgICAgcmV0dXJuIGcoKTsKIH0KLQogc2hvdWxkQmVUcnVlKCJhc3NpZ25Gb3JJbml0
VGVzdCgpIik7CiAKIGZ1bmN0aW9uIGFzc2lnbkZvckluaXRUZXN0MigpCkBAIC05MCw3ICsxMzIs
NiBAQCBmdW5jdGlvbiBhc3NpZ25Gb3JJbml0VGVzdDIoKQogICAgIGZvciAodmFyIGEsIGFyZ3Vt
ZW50cyA9IHRydWU7IGZhbHNlOykgeyB9CiAgICAgcmV0dXJuIGcoKTsKIH0KLQogc2hvdWxkQmVU
cnVlKCJhc3NpZ25Gb3JJbml0VGVzdDIoKSIpOwogCiBmdW5jdGlvbiBhc3NpZ25Gb3JJbkluaXRU
ZXN0KCkKQEAgLTEwMyw3ICsxNDQsNiBAQCBmdW5jdGlvbiBhc3NpZ25Gb3JJbkluaXRUZXN0KCkK
ICAgICBmb3IgKGFyZ3VtZW50cyA9IHRydWU7IGZhbHNlOykgeyB9CiAgICAgcmV0dXJuIGcoKTsK
IH0KLQogc2hvdWxkQmVUcnVlKCJhc3NpZ25Gb3JJbkluaXRUZXN0KCkiKTsKIAogZnVuY3Rpb24g
cGFyYW1Jbml0VGVzdChhcmd1bWVudHMpCkBAIC0xMTUsNyArMTU1LDM0IEBAIGZ1bmN0aW9uIHBh
cmFtSW5pdFRlc3QoYXJndW1lbnRzKQogCiAgICAgcmV0dXJuIGcoKTsKIH0KLQogc2hvdWxkQmVU
cnVlKCJwYXJhbUluaXRUZXN0KHRydWUpIik7CiAKK2Z1bmN0aW9uIHRlYXJPZmZUZXN0KCkKK3sK
KyAgICBmdW5jdGlvbiBnKCkKKyAgICB7CisgICAgICAgIHZhciBhID0gMTsKKyAgICAgICAgcmV0
dXJuIGFyZ3VtZW50czsKKyAgICB9CisKKyAgICB2YXIgYiA9IDI7CisgICAgdmFyIGFyZ3VtZW50
cyA9IGcodHJ1ZSk7CisgICAgcmV0dXJuIGFyZ3VtZW50czsKK30KK3Nob3VsZEJlVHJ1ZSgidGVh
ck9mZlRlc3QoKVswXSIpOworCitmdW5jdGlvbiB0ZWFyT2ZmVGVzdDIoKQoreworICAgIGZ1bmN0
aW9uIGcoYSkKKyAgICB7CisgICAgICAgIHZhciBhcmd1bWVudHMgPSBhOworICAgICAgICB2YXIg
YiA9IDI7CisgICAgICAgIHJldHVybiBhcmd1bWVudHM7CisgICAgfQorCisgICAgdmFyIGMgPSAz
OworICAgIHJldHVybiBnKGFyZ3VtZW50cyk7Cit9CitzaG91bGRCZVRydWUoInRlYXJPZmZUZXN0
Mih0cnVlKVswXSIpOworCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="10838"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>