<?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>28243</bug_id>
          
          <creation_ts>2009-08-12 18:24:08 -0700</creation_ts>
          <short_desc>JavaScriptCore tweaks to get ready for the parser arena</short_desc>
          <delta_ts>2009-08-13 16:43:25 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>139697</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-12 18:24:08 -0700</bug_when>
    <thetext>There are a few tweaks we should do to JavaScriptCore to get ready to make the parser arena work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139700</commentid>
    <comment_count>1</comment_count>
      <attachid>34711</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-12 18:37:55 -0700</bug_when>
    <thetext>Created attachment 34711
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139740</commentid>
    <comment_count>2</comment_count>
      <attachid>34711</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-12 23:50:12 -0700</bug_when>
    <thetext>Comment on attachment 34711
patch

Several of my comments are suggestions not absolutes.  However, I feel like there are enough possible changes that it would be good to give it a look over after you decide what changes to do so r- for now.


&gt; Index: JavaScriptCore/JavaScriptCore.exp

I wonder if you can get rid of this export &quot;__ZN3JSC10JSFunction4infoE&quot; since I suspect that the code you moved was the only use of JSFunction::info outside of JavsScriptCore.


&gt; Index: JavaScriptCore/debugger/Debugger.cpp
&gt; +void Debugger::recompileAllJSFunctions(JSGlobalData* globalData, bool callSourceParsed)

Would be good to make &quot;bool callSourceParsed&quot; an enum.

&gt; Index: JavaScriptCore/parser/Lexer.cpp

&gt; +bool Lexer::scanRegExp(const Identifier*&amp; pattern, const Identifier*&amp; flags, UChar prefix)

Consider &quot;patternPrefix&quot; instead of &quot;prefix&quot;


&gt; +bool Lexer::skipRegExp()
&gt; +{
&gt; +    bool lastWasEscape = false;
&gt; +    bool inBrackets = false;

&gt; +    while (true) {
&gt; +        if (isLineTerminator(m_current) || m_current == -1)
&gt; +            return false;
&gt; +        if (m_current != &apos;/&apos; || lastWasEscape || inBrackets) {
&gt; +            // keep track of &apos;[&apos; and &apos;]&apos;
&gt; +            if (!lastWasEscape) {
&gt; +                if (m_current == &apos;[&apos; &amp;&amp; !inBrackets)
&gt; +                    inBrackets = true;
&gt; +                if (m_current == &apos;]&apos; &amp;&amp; inBrackets)
&gt; +                    inBrackets = false;
&gt; +            }
&gt; +            lastWasEscape = !lastWasEscape &amp;&amp; m_current == &apos;\\&apos;;
&gt; +        } else { // end of regexp
&gt; +            shift1();
&gt; +            break;
&gt; +        }
&gt; +        shift1();
&gt; +    }

This is fine as is but it feels like there are unnecessary branches going on (and it could be slightly tighter by making only one call to shift1();).

Consider this:
     while (true) {
        if (isLineTerminator(m_current) || m_current == -1)
            return false;

        int current = m_current;
        shift1():
        if (current != &apos;/&apos; || lastWasEscape || inBrackets) {
            if (!lastWasEscape) {
                switch (current) {
                case &apos;[&apos;:
                    if (!inBrackets)
                        inBrackets = true;
                    break;
                case &apos;]&apos;:
                    if (inBrackets)
                        inBrackets = false;
                    break;
                case &apos;\\&apos;:
                    lastWasEscape = true;
                    break;
                }
            } else
                lastWasEscape = false;
        } else
            break;
    }

I left the if logic following the same order (rather than a break fast approach) so branch prediction will work the same as before.

And of course, this applies to Lexer::scanRegExp as well.


&gt; Index: JavaScriptCore/profiler/Profiler.cpp
&gt; +        if (!function-&gt;body()-&gt;isHostFunction())

It is not obvious to me why function-&gt;body() cannot be 0 here. (Previously this was checked for.)


&gt; Index: JavaScriptCore/runtime/FunctionPrototype.cpp
&gt; +        FunctionBodyNode* body = function-&gt;body();
&gt; +        if (!body-&gt;isHostFunction()) {

It is not obvious to me why function-&gt;body() cannot be 0 here. (Previously this was checked for.)

&gt;  

&gt; Index: JavaScriptCore/runtime/JSFunction.h
&gt;          static JS_EXPORTDATA const ClassInfo info;

You may not need &quot;JS_EXPORTDATA&quot; here anymore due to moving that code from WebCore.

&gt; +        bool isHostFunction() const;

Why not just get rid of this function from the header and just put a non-member inline function that takes &quot;FunctionBodyNode* body&quot; inside of JSFunction.cpp?
(So bad calls can&apos;t be done to this method and you could get rid of the NonLine postfix on the other one.)


&gt; Index: WebCore/inspector/JavaScriptDebugServer.cpp

 I think you can 
  * get rid of runtime/CollectorHeapIterator.h from the includes in this file.
  * delete WebCore/ForwardingHeaders/runtime/CollectorHeapIterator.h and 
  * get rid of the &quot;private&quot; attribute for the header in JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (so that it is a project header).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139887</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-13 09:53:57 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 34711 [details])
&gt; Several of my comments are suggestions not absolutes.  However, I feel like
&gt; there are enough possible changes that it would be good to give it a look over
&gt; after you decide what changes to do so r- for now.

Thanks. I think I&apos;ll do all of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139959</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-13 11:59:31 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; +void Debugger::recompileAllJSFunctions(JSGlobalData* globalData, bool callSourceParsed)
&gt; 
&gt; Would be good to make &quot;bool callSourceParsed&quot; an enum.

I&apos;m going to change this to use a virtual function instead.

&gt; &gt; +bool Lexer::skipRegExp()
&gt; 
&gt; This is fine as is but it feels like there are unnecessary branches going on
&gt; (and it could be slightly tighter by making only one call to shift1();).

My approach was to copy scanRegExp as-is and remove the code to save the results. I didn&apos;t try to make improvements. Maybe I will now. I like your cut, but frankly I don&apos;t think it&apos;s critical to keep all the branch prediction the same.

&gt; &gt; Index: JavaScriptCore/profiler/Profiler.cpp
&gt; &gt; +        if (!function-&gt;body()-&gt;isHostFunction())
&gt; 
&gt; It is not obvious to me why function-&gt;body() cannot be 0 here. (Previously this
&gt; was checked for.)

The createCallIdentifierFromFunctionImp function dereferences the body pointer without checking for 0. In the old code path, if body was 0 we would have gotten false for isHostFunction and called createCallIdentifierFromFunctionImp. Therefore, this change does not create any new null dereferences.

&gt; &gt; Index: JavaScriptCore/runtime/FunctionPrototype.cpp
&gt; &gt; +        FunctionBodyNode* body = function-&gt;body();
&gt; &gt; +        if (!body-&gt;isHostFunction()) {
&gt; 
&gt; It is not obvious to me why function-&gt;body() cannot be 0 here. (Previously this
&gt; was checked for.)

The next line of code in the old code called function-&gt;body()-&gt;toSourceString(), without checking the body for 0. That was run when isHostFunction returned false, which is what we&apos;d get if the body was 0. Therefore, this change does not create any new null dereferences.

&gt; &gt; Index: JavaScriptCore/runtime/JSFunction.h
&gt; &gt;          static JS_EXPORTDATA const ClassInfo info;
&gt; 
&gt; You may not need &quot;JS_EXPORTDATA&quot; here anymore due to moving that code from
&gt; WebCore.

I don&apos;t think Mac needs it, but I think Qt does. I am not happy about WebCore having the language bindings for JavaScript!

&gt; &gt; +        bool isHostFunction() const;
&gt; 
&gt; Why not just get rid of this function from the header and just put a non-member
&gt; inline function that takes &quot;FunctionBodyNode* body&quot; inside of JSFunction.cpp?
&gt; (So bad calls can&apos;t be done to this method and you could get rid of the NonLine
&gt; postfix on the other one.)

I did it the way I did for syntactic sugar reasons -- kept the number of changes inside the class to a minimum. Also, relatively carelessly written code in JSFunction is more likely to get the inlined version in the future, which is what we want. I think I&apos;ll leave this as-is although I do like your suggestion and the way you&apos;re thinking about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139985</commentid>
    <comment_count>5</comment_count>
      <attachid>34775</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-13 12:59:06 -0700</bug_when>
    <thetext>Created attachment 34775
patch addressing David Levin’s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140029</commentid>
    <comment_count>6</comment_count>
      <attachid>34775</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-13 14:11:58 -0700</bug_when>
    <thetext>Comment on attachment 34775
patch addressing David Levin’s comments

Thanks for the explanations for &quot;It is not obvious to me why function-&gt;body() cannot be 0 here.&quot;

Looks great. One thing to fix on landing.

&gt; Index: JavaScriptCore/parser/Lexer.h
&gt; +        bool scanRegExp(const Identifier*&amp; pattern, const Identifier*&amp; flags, UChar prefix = 0);

s/prefix/patternPrefix/



fwiw, this will break the windows build when it lands because
  JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
  JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def
will need changes similar to what you did for JavaScriptCore.exp but a lot of times people seem to land things 
and then figure out the appropriate name mangling from buildbot and then fix these up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140097</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-13 16:43:25 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/47236</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34711</attachid>
            <date>2009-08-12 18:37:55 -0700</date>
            <delta_ts>2009-08-13 12:59:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ArenaTweaksPatch.txt</filename>
            <type>text/plain</type>
            <size>37584</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MTczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODkgQEAKKzIwMDktMDgtMTIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEphdmFTY3JpcHRDb3JlIHR3ZWFrcyB0byBnZXQgcmVhZHkgZm9yIHRo
ZSBwYXJzZXIgYXJlbmEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI4MjQzCisKKyAgICAgICAgRWxpbWluYXRlIGRlcGVuZGVuY2llcyBvbiBOb2Rlcy5o
IG91dHNpZGUgSmF2YVNjcmlwdENvcmUsCisgICAgICAgIGFuZCBjdXQgZG93biBvbiB0aGVtIGlu
c2lkZSBKYXZhU2NyaXB0Q29yZS4KKworICAgICAgICBDaGFuZ2UgcmVndWxhciBleHByZXNzaW9u
IHBhcnNpbmcgdG8gdXNlIGlkZW50aWZpZXJzIGFzCisgICAgICAgIHdpdGggb3RoZXIgc3RyaW5n
cyB3ZSBwYXJzZS4KKworICAgICAgICBGaXggYSBjb3VwbGUgdGhpbmdzIHRoYXQgYXJlIG5lZWRl
ZCB0byB1c2UgY29uc3QgSWRlbnRpZmllcgorICAgICAgICBtb3JlLCB3aGljaCB3aWxsIGJlIHBh
cnQgb2YgdGhlIHBhcnNlciBhcmVuYSB3b3JrLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOiBSZXNvcnRlZCBhbmQgdXBkYXRlZC4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UHVzaE5ld1Njb3BlKTogQWRkZWQgY29uc3QuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmg6IERpdHRvLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3Bw
OgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMpOiBNb3Zl
ZCB0aGlzIGZ1bmN0aW9uCisgICAgICAgIGhlcmUgZnJvbSBXZWJDb3JlLiBIZXJlIGlzIGJldHRl
ciBzaW5jZSBpdCB1c2VzIHNvIG1hbnkgaW50ZXJuYWxzLgorICAgICAgICAqIGRlYnVnZ2VyL0Rl
YnVnZ2VyLmg6IERpdHRvLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKTogQ2Fs
bCBhc0Z1bmN0aW9uIGluc3RlYWQKKyAgICAgICAgb2YgZG9pbmcgdGhlIHVuY2hlY2tlZCBzdGF0
aWNfY2FzdC4KKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmNhbGN1bGF0ZWRGdW5j
dGlvbk5hbWUpOiBEaXR0by4KKworICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6Om9wX2NhbGxfSlNGdW5jdGlvbik6IENhbGwgaXNIb3N0RnVuY3Rpb24gb24gdGhlIGJv
ZHkgcmF0aGVyCisgICAgICAgIHRoYW4gb24gdGhlIEpTRnVuY3Rpb24uCisgICAgICAgIChKU0M6
OnZtX2xhenlMaW5rQ2FsbCk6IERpdHRvLgorICAgICAgICAoSlNDOjpvcF9jb25zdHJ1Y3RfSlND
b25zdHJ1Y3QpOiBEaXR0by4KKworICAgICAgICAqIHBhcnNlci9HcmFtbWFyLnk6IENoYW5nZWQg
Y2FsbGVycyB0byB1c2UgbmV3IHNjYW5SZWdFeHAgd2l0aAorICAgICAgICBvdXQgYXJndW1lbnRz
IGluc3RlYWQgb2YgcmVseWluZyBvbiBzdGF0ZSBpbiB0aGUgTGV4ZXIuIEFuZAorICAgICAgICBj
YWxsZXJzIHRoYXQganVzdCB3YW50IHRvIHNraXAgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNl
CisgICAgICAgIHNraXBSZWdFeHAuCisKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpMZXhlcjo6c2NhblJlZ0V4cCk6IENoYW5nZWQgdG8gdXNlIG91dCBhcmd1bWVu
dHMsIGFuZCB0bworICAgICAgICBhZGQgYSBwcmVmaXggYXJndW1lbnQgc28gd2UgY2FuIGFkZCBp
biB0aGUgIj0iIGNoYXJhY3RlciBhcyBuZWVkZWQuCisgICAgICAgIChKU0M6OkxleGVyOjpza2lw
UmVnRXhwKTogQWRkZWQuCisgICAgICAgIChKU0M6OkxleGVyOjpjbGVhcik6IFJlbW92ZWQgY29k
ZSB0byBjbGVhciBtX3BhdHRlcm4gYW5kIG1fZmxhZ3MuCisgICAgICAgICogcGFyc2VyL0xleGVy
Lmg6IENoYW5nZWQgc2NhblJlZ0V4cCB0byBoYXZlIG91dCBhcmd1bWVudHMuIEFkZGVkCisgICAg
ICAgIHNraXBSZWdFeHAuIEVsaW1pbmF0ZWQgcGF0dGVybiwgZmxhZ3MsIG1fcGF0dGVybiwgYW5k
IG1fZmxhZ3MuCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAg
ICAoSlNDOjpSZWdFeHBOb2RlOjpSZWdFeHBOb2RlKTogQ2hhbmdlZCB0byB0YWtlIGNvbnN0IElk
ZW50aWZpZXImLgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cE5vZGU6OmVtaXRCeXRlY29kZSk6IENoYW5nZWQgc2luY2UgbV9wYXR0ZXJuIGFuZAorICAg
ICAgICBtX2ZsYWdzIGFyZSBub3cgSWRlbnRpZmllciBpbnN0ZWFkIG9mIFVTdHJpbmcuCisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQm9keU5vZGU6Om1ha2UpOiBNb3ZlZCB0aGlzIGZ1bmN0aW9uIGhl
cmUgaW5zdGVhZAorICAgICAgICBvZiBwdXR0aW5nIGl0IGluIHRoZSBKU0Z1bmN0aW9uLmggaGVh
ZGVyLgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOiBDaGFuZ2VkIFJlZ0V4cE5vZGUgdG8gdXNl
IElkZW50aWZpZXIuCisKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlci5jcHA6CisgICAgICAg
IChKU0M6OlByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcik6IENoYW5nZWQgdG8gdXNlIGlz
SG9zdEZ1bmN0aW9uCisgICAgICAgIG9uIHRoZSBib2R5IGluc3RlYWQgb2Ygb24gdGhlIEpTRnVu
Y3Rpb24gb2JqZWN0LgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKTogRGl0dG8uCisKKyAgICAg
ICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpp
c0hvc3RGdW5jdGlvbik6IE1vdmVkIGhlcmUgZnJvbSBoZWFkZXIuCisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKTogQWRkZWQuCisgICAgICAgIChKU0M6
OkpTRnVuY3Rpb246OkpTRnVuY3Rpb24pOiBSZW1vdmVkIHVubmVlZGVkIGluaXRpYWxpemF0aW9u
IG9mCisgICAgICAgIG1fYm9keSB0byAwLgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRC
b2R5KTogTW92ZWQgaGVyZSBmcm9tIGhlYWRlci4KKworICAgICAgICAqIHJ1bnRpbWUvSlNGdW5j
dGlvbi5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzLiBNb3ZlZCBwcml2YXRlCisgICAgICAg
IGNvbnN0cnVjdG9yIGRvd24gdG8gdGhlIHByaXZhdGUgc2VjdGlvbi4gTWFkZSB2aXJ0dWFsIGZ1
bmN0aW9ucworICAgICAgICBwcml2YXRlLiBSZW1vdmVkIHVubmVlZGVkIG92ZXJsb2FkIG9mIHNl
dEJvZHkgYW5kIG1vdmVkIHRoZSBib2R5CisgICAgICAgIG9mIHRoZSBmdW5jdGlvbiBpbnRvIHRo
ZSAuY3BwIGZpbGUuIENoYW5nZWQgYXNzZXJ0aW9ucyB0byB1c2UKKyAgICAgICAgdGhlIG5vbi1p
bmxpbmUgdmVyc2lvbiBvZiBpc0hvc3RGdW5jdGlvbi4KKworICAgICAgICAqIHJ1bnRpbWUvUHJv
cGVydHlTbG90LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpmdW5jdGlvbkdldHRl
cik6IFVzZSBhc0Z1bmN0aW9uIGluc3RlYWQKKyAgICAgICAgb2YgZG9pbmcgdGhlIHVuY2hlY2tl
ZCBzdGF0aWNfY2FzdC4KKworICAgICAgICAqIHd0Zi9TZWdtZW50ZWRWZWN0b3IuaDoKKyAgICAg
ICAgKFdURjo6U2VnbWVudGVkVmVjdG9yOjppc0VtcHR5KTogQWRkZWQuCisKIDIwMDktMDgtMTIg
IEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgd29ya2Fyb3Vu
ZCBmb3IgdGhlIGxpbWl0YXRpb24gdGhhdCBWaXJ0dWFsRnJlZSB3aXRoIE1FTV9SRUxFQVNFCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiA0NzE3MykKKysrIEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDggKzE5
Niw4IEBAIF9fWk4zSlNDNkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFUktOU18KIF9fWk4zSlND
NkpTQ2VsbDNwdXRFUE5TXzlFeGVjU3RhdGVFak5TXzdKU1ZhbHVlRSAgCiBfX1pOM0pTQzZKU0Nl
bGw5Z2V0T2JqZWN0RXYKIF9fWk4zSlNDNkpTQ2VsbG53RW1QTlNfOUV4ZWNTdGF0ZUUKLV9fWk4z
SlNDNkpTTG9jazEyRHJvcEFsbExvY2tzQzFFUE5TXzlFeGVjU3RhdGVFCiBfX1pOM0pTQzZKU0xv
Y2sxMkRyb3BBbGxMb2Nrc0MxRU5TXzE0SlNMb2NrQmVoYXZpb3JFCitfX1pOM0pTQzZKU0xvY2sx
MkRyb3BBbGxMb2Nrc0MxRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxs
TG9ja3NEMUV2CiBfX1pOM0pTQzZKU0xvY2s0bG9ja0VOU18xNEpTTG9ja0JlaGF2aW9yRQogX19a
TjNKU0M2SlNMb2NrNnVubG9ja0VOU18xNEpTTG9ja0JlaGF2aW9yRQpAQCAtMjI3LDYgKzIyNyw3
IEBAIF9fWk4zSlNDN1VTdHJpbmc2YXBwZW5kRVJLUzBfCiBfX1pOM0pTQzdVU3RyaW5nQzFFUEtj
CiBfX1pOM0pTQzdVU3RyaW5nQzFFUEt0aQogX19aTjNKU0M3VVN0cmluZ2FTRVBLYworX19aTjNK
U0M4RGVidWdnZXIyM3JlY29tcGlsZUFsbEpTRnVuY3Rpb25zRVBOU18xMkpTR2xvYmFsRGF0YUVi
CiBfX1pOM0pTQzhEZWJ1Z2dlcjZhdHRhY2hFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pT
QzhEZWJ1Z2dlcjZkZXRhY2hFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzhEZWJ1Z2dl
ckMyRXYKQEAgLTMzMCw3ICszMzEsNiBAQCBfX1pOSzNKU0MxMkRhdGVJbnN0YW5jZTdnZXRUaW1l
RVJkUmkKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0MTJ0b1RoaXNTdHJpbmdFUE5TXzlFeGVjU3Rh
dGVFCiBfX1pOSzNKU0MxMlN0cmluZ09iamVjdDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk5LM0pTQzE0SlNHbG9iYWxPYmplY3QxNGlzRHluYW1pY1Njb3BlRXYKLQogX19aTkszSlNDMTZG
dW5jdGlvbkJvZHlOb2RlMTRpc0hvc3RGdW5jdGlvbkV2CiBfX1pOSzNKU0MxNkludGVybmFsRnVu
Y3Rpb245Y2xhc3NJbmZvRXYKIF9fWk5LM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE2aXNWYXJpYWJs
ZU9iamVjdEV2CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDQ3MTczKQorKysgSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwMCw3
ICsxODAwLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFN1YnJvdXRpbmVSZQogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyZXRBZGRyU3JjLT5pbmRleCgpKTsKIH0KIAotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIElkZW50
aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpCiB7CiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNv
bnRleHQ7CiAgICAgY29udGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZhbHNlOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDQ3MTczKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw3ICszMTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhdGNoKFJlZ2lzdGVySUQqLCBMYWJlbCogc3RhcnQsIExh
YmVsKiBlbmQpOwogICAgICAgICB2b2lkIGVtaXRUaHJvdyhSZWdpc3RlcklEKiBleGMpIHsgZW1p
dFVuYXJ5Tm9Ec3RPcChvcF90aHJvdywgZXhjKTsgfQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0
TmV3RXJyb3IoUmVnaXN0ZXJJRCogZHN0LCBFcnJvclR5cGUgdHlwZSwgSlNWYWx1ZSBtZXNzYWdl
KTsKLSAgICAgICAgdm9pZCBlbWl0UHVzaE5ld1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRp
ZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0UHVz
aE5ld1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJl
Z2lzdGVySUQqIHZhbHVlKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHVzaFNjb3BlKFJl
Z2lzdGVySUQqIHNjb3BlKTsKICAgICAgICAgdm9pZCBlbWl0UG9wU2NvcGUoKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDQ3MTczKQorKysgSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsy
Miw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKIAotI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIlBhcnNlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUzLDYgKzU0LDYy
IEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVjdCogZ2wKICAgICBnbG9iYWxP
YmplY3QtPnNldERlYnVnZ2VyKDApOwogfQogCit2b2lkIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxK
U0Z1bmN0aW9ucyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgY2FsbFNvdXJjZVBhcnNl
ZCkKK3sKKyAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90IHNhZmUgdG8g
cmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKKyAgICAvLyB1cCB0aHJvd2luZyBhd2F5IGNvZGUg
dGhhdCBpcyBsaXZlIG9uIHRoZSBzdGFjay4KKyAgICBBU1NFUlQoIWdsb2JhbERhdGEtPmR5bmFt
aWNHbG9iYWxPYmplY3QpOworICAgIGlmIChnbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0
KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UHJvdGVjdGVkUHRyPEpTRnVuY3Rpb24+
ID4gZnVuY3Rpb25zOworICAgIEhlYXA6Oml0ZXJhdG9yIGhlYXBFbmQgPSBnbG9iYWxEYXRhLT5o
ZWFwLnByaW1hcnlIZWFwRW5kKCk7CisgICAgZm9yIChIZWFwOjppdGVyYXRvciBpdCA9IGdsb2Jh
bERhdGEtPmhlYXAucHJpbWFyeUhlYXBCZWdpbigpOyBpdCAhPSBoZWFwRW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+aXNPYmplY3QoJkpTRnVuY3Rpb246OmluZm8pKSB7CisgICAgICAg
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oKml0KTsKKyAgICAgICAgICAg
IGlmICghZnVuY3Rpb24tPmJvZHkoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbnMuYXBwZW5kKGZ1bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4sIFJlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiA+IEZ1bmN0aW9uQm9keU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U291cmNlUHJv
dmlkZXIqLCBFeGVjU3RhdGUqPiBTb3VyY2VQcm92aWRlck1hcDsKKworICAgIEZ1bmN0aW9uQm9k
eU1hcCBmdW5jdGlvbkJvZGllczsKKyAgICBTb3VyY2VQcm92aWRlck1hcCBzb3VyY2VQcm92aWRl
cnM7CisKKyAgICBzaXplX3Qgc2l6ZSA9IGZ1bmN0aW9ucy5zaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBmdW5jdGlvbnNbaV07CisKKyAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogb2xkQm9keSA9IGZ1
bmN0aW9uLT5ib2R5KCk7CisgICAgICAgIHBhaXI8RnVuY3Rpb25Cb2R5TWFwOjppdGVyYXRvciwg
Ym9vbD4gcmVzdWx0ID0gZnVuY3Rpb25Cb2RpZXMuYWRkKG9sZEJvZHksIDApOworICAgICAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5zZXRCb2R5KHJlc3Vs
dC5maXJzdC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gZnVuY3Rpb24tPnNjb3BlKCkuZ2xvYmFsT2JqZWN0KCkt
PkpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCk7CisgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZUNvZGUgPSBvbGRCb2R5LT5zb3VyY2UoKTsKKworICAgICAgICBSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gbmV3Qm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25C
b2R5Tm9kZT4oZXhlYywgMCwgc291cmNlQ29kZSk7CisgICAgICAgIEFTU0VSVChuZXdCb2R5KTsK
KyAgICAgICAgbmV3Qm9keS0+ZmluaXNoUGFyc2luZyhvbGRCb2R5LT5jb3B5UGFyYW1ldGVycygp
LCBvbGRCb2R5LT5wYXJhbWV0ZXJDb3VudCgpLCBvbGRCb2R5LT5pZGVudCgpKTsKKworICAgICAg
ICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IG5ld0JvZHk7CisgICAgICAgIGZ1bmN0aW9uLT5zZXRC
b2R5KG5ld0JvZHkucmVsZWFzZSgpKTsKKworICAgICAgICBpZiAoY2FsbFNvdXJjZVBhcnNlZCAm
JiBmdW5jdGlvbi0+c2NvcGUoKS5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSA9PSB0aGlzKQor
ICAgICAgICAgICAgc291cmNlUHJvdmlkZXJzLmFkZChzb3VyY2VDb2RlLnByb3ZpZGVyKCksIGV4
ZWMpOworICAgIH0KKworICAgIC8vIENhbGwgc291cmNlUGFyc2VkKCkgYWZ0ZXIgcmVwYXJzaW5n
IGFsbCBmdW5jdGlvbnMgYmVjYXVzZSBpdCB3aWxsIGV4ZWN1dGUKKyAgICAvLyBKYXZhU2NyaXB0
IGluIHRoZSBpbnNwZWN0b3IuCisgICAgU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHNvdXJjZVByb3ZpZGVycy5lbmQoKTsKKyAgICBmb3IgKFNvdXJjZVByb3ZpZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gc291cmNlUHJvdmlkZXJzLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCisgICAgICAgIHNvdXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIFNvdXJjZUNv
ZGUoaXRlci0+Zmlyc3QpLCAtMSwgMCk7Cit9CisKIEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENh
bGxGcmFtZShjb25zdCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbiwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBDYWxsRnJhbWUqIGdsb2JhbENhbGxGcmFt
ZSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5oCShyZXZpc2lvbiA0NzE3MykKKysrIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShjb25zdCBEZWJ1Z2dlckNh
bGxGcmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZW5vKSA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBp
bnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubykgPSAwOwogCisgICAgICAgIHZvaWQgcmVjb21w
aWxlQWxsSlNGdW5jdGlvbnMoSlNHbG9iYWxEYXRhKiwgYm9vbCBjYWxsU291cmNlUGFyc2VkKTsK
KwogICAgIHByaXZhdGU6CiAgICAgICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPiBtX2dsb2Jh
bE9iamVjdHM7CiAgICAgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDQ3MTczKQorKysgSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3
IEBAIGNvbnN0IFVTdHJpbmcqIERlYnVnZ2VyQ2FsbEZyYW1lOjpmdW5jdGkKICAgICBpZiAoIW1f
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihtX2NhbGxGcmFtZS0+Y2Fs
bGVlKCkpOworICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihtX2NhbGxGcmFt
ZS0+Y2FsbGVlKCkpOwogICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwogICAg
IHJldHVybiAmZnVuY3Rpb24tPm5hbWUoJm1fY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwpAQCAt
NTIsNyArNTIsNyBAQCBVU3RyaW5nIERlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxhdGVkRnVuCiAg
ICAgaWYgKCFtX2NhbGxGcmFtZS0+Y29kZUJsb2NrKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KG1f
Y2FsbEZyYW1lLT5jYWxsZWUoKSk7CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0
aW9uKG1fY2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIGZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUoJm1f
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShy
ZXZpc2lvbiA0NzE3MykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0ODAsMTIgKzE0ODAsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCosIG9wX2NhbGxfSlNGdQogI2VuZGlmCiAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFz
RnVuY3Rpb24oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7Ci0gICAgQVNTRVJUKCFmdW5j
dGlvbi0+aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IGZ1
bmN0aW9uLT5ib2R5KCk7CisgICAgQVNTRVJUKCFib2R5LT5pc0hvc3RGdW5jdGlvbigpKTsKICAg
ICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gZnVuY3Rpb24tPnNjb3BlKCku
bm9kZSgpOwogICAgIGJvZHktPmppdENvZGUoY2FsbERhdGFTY29wZUNoYWluKTsKIAotICAgIHJl
dHVybiAmKGJvZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCkpOworICAgIHJldHVybiAmYm9keS0+Z2Vu
ZXJhdGVkQnl0ZWNvZGUoKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oVm9pZFB0clBhaXIs
IG9wX2NhbGxfYXJpdHlDaGVjaykKQEAgLTE1MzksMTMgKzE1MzksMTQgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCosIHZtX2xhenlMaW5rQwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFN
RShzdGFja0ZyYW1lKTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOwotICAgIEpJVENvZGUmIGppdENvZGUgPSBjYWxsZWUt
PmJvZHkoKS0+Z2VuZXJhdGVkSklUQ29kZSgpOworICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkg
PSBjYWxsZWUtPmJvZHkoKTsKKyAgICBKSVRDb2RlJiBqaXRDb2RlID0gYm9keS0+Z2VuZXJhdGVk
SklUQ29kZSgpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAo
IWNhbGxlZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZUJsb2NrID0gJmNhbGxlZS0+
Ym9keSgpLT5ieXRlY29kZShjYWxsZWUtPnNjb3BlKCkubm9kZSgpKTsKKyAgICBpZiAoIWJvZHkt
PmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIGNvZGVCbG9jayA9ICZib2R5LT5ieXRlY29kZShj
YWxsZWUtPnNjb3BlKCkubm9kZSgpKTsKICAgICBlbHNlCi0gICAgICAgIGNvZGVCbG9jayA9ICZj
YWxsZWUtPmJvZHkoKS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKKyAgICAgICAgY29kZUJsb2NrID0g
JmJvZHktPmdlbmVyYXRlZEJ5dGVjb2RlKCk7CiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSAmc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5n
ZXRDYWxsTGlua0luZm8oc3RhY2tGcmFtZS5hcmdzWzFdLnJldHVybkFkZHJlc3MoKSk7CiAKICAg
ICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKQEAgLTE3MTUsNyArMTcxNiw4IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfY29uc3QKICAgICBTVFVCX0lOSVRfU1RB
Q0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKICAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9IGFz
RnVuY3Rpb24oc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7Ci0gICAgaWYgKGNvbnN0cnVj
dG9yLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IGNv
bnN0cnVjdG9yLT5ib2R5KCk7CisgICAgaWYgKGJvZHkgJiYgYm9keS0+aXNIb3N0RnVuY3Rpb24o
KSkgewogICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7
CiAgICAgICAgIHVuc2lnbmVkIHZQQ0luZGV4ID0gY29kZUJsb2NrLT5nZXRCeXRlY29kZUluZGV4
KGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9w
YXJzZXIvR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9HcmFt
bWFyLnkJKHJldmlzaW9uIDQ3MTczKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL0dyYW1tYXIu
eQkod29ya2luZyBjb3B5KQpAQCAtMjkyLDE5ICsyOTIsMjMgQEAgTGl0ZXJhbDoKICAgfCBTVFJJ
TkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88RXhw
cmVzc2lvbk5vZGUqPihuZXcgKEdMT0JBTF9EQVRBKSBTdHJpbmdOb2RlKEdMT0JBTF9EQVRBLCAq
JDEpLCAwLCAxKTsgfQogICB8ICcvJyAvKiByZWdleHAgKi8gICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGV4ZXImIGwgPSAq
TEVYRVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bC5zY2FuUmVnRXhwKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXIqIHBhdHRlcm47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGZsYWdzOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWwuc2NhblJlZ0V4cChwYXR0ZXJu
LCBmbGFncykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBZWUFCT1JUOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWdFeHBOb2RlKiBub2RlID0gbmV3IChHTE9CQUxfREFUQSkgUmVnRXhwTm9kZShHTE9CQUxfREFU
QSwgbC5wYXR0ZXJuKCksIGwuZmxhZ3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzaXplID0gbC5wYXR0ZXJuKCkuc2l6ZSgpICsgMjsgLy8gKyAy
IGZvciB0aGUgdHdvIC8ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZWdFeHBOb2RlKiBub2RlID0gbmV3IChHTE9CQUxfREFUQSkgUmVnRXhwTm9kZShHTE9C
QUxfREFUQSwgKnBhdHRlcm4sICpmbGFncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzaXplID0gcGF0dGVybi0+c2l6ZSgpICsgMjsgLy8gKyAyIGZv
ciB0aGUgdHdvIC8ncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTRVRfRVhDRVBUSU9OX0xPQ0FUSU9OKG5vZGUsIEAxLmZpcnN0X2NvbHVtbiwgQDEuZmlyc3Rf
Y29sdW1uICsgc2l6ZSwgQDEuZmlyc3RfY29sdW1uICsgc2l6ZSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkID0gY3JlYXRlTm9kZUluZm88RXhwcmVzc2lv
bk5vZGUqPihub2RlLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgIHwgRElWRVFVQUwgLyogcmVnZXhwIHdpdGggLz0gKi8gICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZXhlciYgbCA9ICpMRVhFUjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsLnNjYW5S
ZWdFeHAoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSWRlbnRpZmllciogcGF0dGVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciogZmxhZ3M7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbC5zY2FuUmVnRXhwKHBhdHRlcm4sIGZsYWdz
LCAnPScpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WVlBQk9SVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn
RXhwTm9kZSogbm9kZSA9IG5ldyAoR0xPQkFMX0RBVEEpIFJlZ0V4cE5vZGUoR0xPQkFMX0RBVEEs
ICI9IiArIGwucGF0dGVybigpLCBsLmZsYWdzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IGwucGF0dGVybigpLnNpemUoKSArIDI7IC8v
ICsgMiBmb3IgdGhlIHR3byAvJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVnRXhwTm9kZSogbm9kZSA9IG5ldyAoR0xPQkFMX0RBVEEpIFJlZ0V4cE5vZGUo
R0xPQkFMX0RBVEEsICpwYXR0ZXJuLCAqZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHBhdHRlcm4tPnNpemUoKSArIDI7IC8vICsg
MiBmb3IgdGhlIHR3byAvJ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0VUX0VYQ0VQVElPTl9MT0NBVElPTihub2RlLCBAMS5maXJzdF9jb2x1bW4sIEAxLmZp
cnN0X2NvbHVtbiArIHNpemUsIEAxLmZpcnN0X2NvbHVtbiArIHNpemUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNyZWF0ZU5vZGVJbmZvPEV4cHJl
c3Npb25Ob2RlKj4obm9kZSwgMCwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQpAQCAtMTI0MSw4ICsxMjQ1LDggQEAgTGl0ZXJhbF9Ob05vZGU6CiAgIHwgRkFM
U0VUT0tFTgogICB8IE5VTUJFUiB7IH0KICAgfCBTVFJJTkcgeyB9Ci0gIHwgJy8nIC8qIHJlZ2V4
cCAqLyB7IExleGVyJiBsID0gKkxFWEVSOyBpZiAoIWwuc2NhblJlZ0V4cCgpKSBZWUFCT1JUOyB9
Ci0gIHwgRElWRVFVQUwgLyogcmVnZXhwIHdpdGggLz0gKi8geyBMZXhlciYgbCA9ICpMRVhFUjsg
aWYgKCFsLnNjYW5SZWdFeHAoKSkgWVlBQk9SVDsgfQorICB8ICcvJyAvKiByZWdleHAgKi8geyBp
ZiAoIUxFWEVSLT5za2lwUmVnRXhwKCkpIFlZQUJPUlQ7IH0KKyAgfCBESVZFUVVBTCAvKiByZWdl
eHAgd2l0aCAvPSAqLyB7IGlmICghTEVYRVItPnNraXBSZWdFeHAoKSkgWVlBQk9SVDsgfQogOwog
CiBQcm9wZXJ0eV9Ob05vZGU6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHJldmlzaW9u
IDQ3MTczKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTA4LDE2ICs5MDgsMjEgQEAgcmV0dXJuRXJyb3I6CiAgICAgcmV0dXJuIC0xOwogfQog
Ci1ib29sIExleGVyOjpzY2FuUmVnRXhwKCkKK2Jvb2wgTGV4ZXI6OnNjYW5SZWdFeHAoY29uc3Qg
SWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZpZXIqJiBmbGFncywgVUNoYXIgcHJl
Zml4KQogewogICAgIEFTU0VSVChtX2J1ZmZlcjE2LmlzRW1wdHkoKSk7CiAKICAgICBib29sIGxh
c3RXYXNFc2NhcGUgPSBmYWxzZTsKICAgICBib29sIGluQnJhY2tldHMgPSBmYWxzZTsKIAorICAg
IGlmIChwcmVmaXgpCisgICAgICAgIHJlY29yZDE2KHByZWZpeCk7CisKICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihtX2N1cnJlbnQpIHx8IG1fY3VycmVu
dCA9PSAtMSkKKyAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IobV9jdXJyZW50KSB8fCBtX2N1
cnJlbnQgPT0gLTEpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIGlmIChtX2N1cnJlbnQgIT0g
Jy8nIHx8IGxhc3RXYXNFc2NhcGUgfHwgaW5CcmFja2V0cykgewogICAgICAgICAgICAgLy8ga2Vl
cCB0cmFjayBvZiAnWycgYW5kICddJwogICAgICAgICAgICAgaWYgKCFsYXN0V2FzRXNjYXBlKSB7
CkBAIC05MjksNyArOTM0LDcgQEAgYm9vbCBMZXhlcjo6c2NhblJlZ0V4cCgpCiAgICAgICAgICAg
ICByZWNvcmQxNihtX2N1cnJlbnQpOwogICAgICAgICAgICAgbGFzdFdhc0VzY2FwZSA9ICFsYXN0
V2FzRXNjYXBlICYmIG1fY3VycmVudCA9PSAnXFwnOwogICAgICAgICB9IGVsc2UgeyAvLyBlbmQg
b2YgcmVnZXhwCi0gICAgICAgICAgICBtX3BhdHRlcm4gPSBVU3RyaW5nKG1fYnVmZmVyMTYpOwor
ICAgICAgICAgICAgcGF0dGVybiA9IG1ha2VJZGVudGlmaWVyKG1fYnVmZmVyMTYuZGF0YSgpLCBt
X2J1ZmZlcjE2LnNpemUoKSk7CiAgICAgICAgICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKICAg
ICAgICAgICAgIHNoaWZ0MSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NDEsMTIgKzk0Niw0
MiBAQCBib29sIExleGVyOjpzY2FuUmVnRXhwKCkKICAgICAgICAgcmVjb3JkMTYobV9jdXJyZW50
KTsKICAgICAgICAgc2hpZnQxKCk7CiAgICAgfQotICAgIG1fZmxhZ3MgPSBVU3RyaW5nKG1fYnVm
ZmVyMTYpOworICAgIGZsYWdzID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCksIG1f
YnVmZmVyMTYuc2l6ZSgpKTsKICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIExleGVyOjpza2lwUmVnRXhwKCkKK3sKKyAgICBib29sIGxhc3RX
YXNFc2NhcGUgPSBmYWxzZTsKKyAgICBib29sIGluQnJhY2tldHMgPSBmYWxzZTsKKworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKG1fY3VycmVudCkgfHwg
bV9jdXJyZW50ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
bV9jdXJyZW50ICE9ICcvJyB8fCBsYXN0V2FzRXNjYXBlIHx8IGluQnJhY2tldHMpIHsKKyAgICAg
ICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgJ1snIGFuZCAnXScKKyAgICAgICAgICAgIGlmICghbGFz
dFdhc0VzY2FwZSkgeworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ1snICYmICFp
bkJyYWNrZXRzKQorICAgICAgICAgICAgICAgICAgICBpbkJyYWNrZXRzID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICddJyAmJiBpbkJyYWNrZXRzKQorICAgICAgICAg
ICAgICAgICAgICBpbkJyYWNrZXRzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBsYXN0V2FzRXNjYXBlID0gIWxhc3RXYXNFc2NhcGUgJiYgbV9jdXJyZW50ID09ICdcXCc7Cisg
ICAgICAgIH0gZWxzZSB7IC8vIGVuZCBvZiByZWdleHAKKyAgICAgICAgICAgIHNoaWZ0MSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2hpZnQxKCk7CisgICAgfQor
CisgICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVudCkpCisgICAgICAgIHNoaWZ0MSgpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgTGV4ZXI6OmNsZWFyKCkKIHsKICAgICBtX2lk
ZW50aWZpZXJzLmNsZWFyKCk7CkBAIC05NjEsOSArOTk2LDYgQEAgdm9pZCBMZXhlcjo6Y2xlYXIo
KQogICAgIG1fYnVmZmVyMTYuc3dhcChuZXdCdWZmZXIxNik7CiAKICAgICBtX2lzUmVwYXJzaW5n
ID0gZmFsc2U7Ci0KLSAgICBtX3BhdHRlcm4gPSBVU3RyaW5nKCk7Ci0gICAgbV9mbGFncyA9IFVT
dHJpbmcoKTsKIH0KIAogU291cmNlQ29kZSBMZXhlcjo6c291cmNlQ29kZShpbnQgb3BlbkJyYWNl
LCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Bh
cnNlci9MZXhlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5o
CShyZXZpc2lvbiA0NzE3MykKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw5ICs1MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQg
bGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQogICAgICAgICBib29s
IHByZXZUZXJtaW5hdG9yKCkgY29uc3QgeyByZXR1cm4gbV90ZXJtaW5hdG9yOyB9CiAgICAgICAg
IFNvdXJjZUNvZGUgc291cmNlQ29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50
IGZpcnN0TGluZSk7Ci0gICAgICAgIGJvb2wgc2NhblJlZ0V4cCgpOwotICAgICAgICBjb25zdCBV
U3RyaW5nJiBwYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuOyB9Ci0gICAgICAgIGNv
bnN0IFVTdHJpbmcmIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQorICAgICAgICBi
b29sIHNjYW5SZWdFeHAoY29uc3QgSWRlbnRpZmllciomIHBhdHRlcm4sIGNvbnN0IElkZW50aWZp
ZXIqJiBmbGFncywgVUNoYXIgcHJlZml4ID0gMCk7CisgICAgICAgIGJvb2wgc2tpcFJlZ0V4cCgp
OwogCiAgICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgdXNlIGFmdGVyIHBhcnNpbmcuCiAgICAgICAg
IGJvb2wgc2F3RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CkBAIC0xMTIsOSArMTEx
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERh
dGE7CiAKLSAgICAgICAgVVN0cmluZyBtX3BhdHRlcm47Ci0gICAgICAgIFVTdHJpbmcgbV9mbGFn
czsKLQogICAgICAgICBjb25zdCBIYXNoVGFibGUgbV9rZXl3b3JkVGFibGU7CiAKICAgICAgICAg
VmVjdG9yPFVDaGFyPiBtX2NvZGVXaXRob3V0Qk9NczsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gNDcxNzMpCisrKyBKYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgUmVnRXhwTm9k
ZTo6UmVnRXhwTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJpbmcmIHBh
dHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKQorICAgIGlubGluZSBSZWdFeHBOb2RlOjpSZWdF
eHBOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgcGF0dGVy
biwgY29uc3QgSWRlbnRpZmllciYgZmxhZ3MpCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUoZ2xv
YmFsRGF0YSkKICAgICAgICAgLCBtX3BhdHRlcm4ocGF0dGVybikKICAgICAgICAgLCBtX2ZsYWdz
KGZsYWdzKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiA0NzE3MykKKysr
IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3
ICsxMzgsNyBAQCBSZWdpc3RlcklEKiBTdHJpbmdOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiAKIFJl
Z2lzdGVySUQqIFJlZ0V4cE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRyPFJlZ0V4cD4gcmVnRXhwID0g
UmVnRXhwOjpjcmVhdGUoZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgbV9wYXR0ZXJuLCBtX2ZsYWdz
KTsKKyAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3Iu
Z2xvYmFsRGF0YSgpLCBtX3BhdHRlcm4udXN0cmluZygpLCBtX2ZsYWdzLnVzdHJpbmcoKSk7CiAg
ICAgaWYgKCFyZWdFeHAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0Vycm9y
KGdlbmVyYXRvciwgU3ludGF4RXJyb3IsICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICIg
KyBVU3RyaW5nKHJlZ0V4cC0+ZXJyb3JNZXNzYWdlKCkpKS5VVEY4U3RyaW5nKCkuY19zdHIoKSk7
CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQpAQCAtMjE1Niw2ICsy
MTU2LDExIEBAIElkZW50aWZpZXIqIEZ1bmN0aW9uQm9keU5vZGU6OmNvcHlQYXJhbWUKICAgICBy
ZXR1cm4gcGFyYW1ldGVyczsKIH0KIAorSlNGdW5jdGlvbiogRnVuY3Rpb25Cb2R5Tm9kZTo6bWFr
ZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluKQoreworICAgIHJl
dHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgbV9pZGVudCwgdGhpcywgc2NvcGVDaGFp
bik7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jRGVjbE5vZGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlZ2lzdGVySUQqIEZ1bmNEZWNs
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiA0NzE3MykKKysrIEph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsMTMgKzM1
NywxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cE5vZGUgOiBwdWJsaWMg
RXhwcmVzc2lvbk5vZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CiAgICAgcHVi
bGljOgotICAgICAgICBSZWdFeHBOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IFVTdHJpbmcmIHBh
dHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKTsKKyAgICAgICAgUmVnRXhwTm9kZShKU0dsb2Jh
bERhdGEqLCBjb25zdCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFn
cyk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCk7CiAKLSAgICAgICAgVVN0
cmluZyBtX3BhdHRlcm47Ci0gICAgICAgIFVTdHJpbmcgbV9mbGFnczsKKyAgICAgICAgSWRlbnRp
ZmllciBtX3BhdHRlcm47CisgICAgICAgIElkZW50aWZpZXIgbV9mbGFnczsKICAgICB9OwogCiAg
ICAgY2xhc3MgVGhpc05vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpJbmRleDogSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gNDcxNzMpCisrKyBKYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwyMCArMTM0
LDIwIEBAIHZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGUKICAgICBkaXNw
YXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0
b3I6OmRpZEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCks
IEpTVmFsdWUoKSwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAotQ2FsbElkZW50aWZpZXIgUHJv
ZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNW
YWx1ZSBmdW5jdGlvbiwgY29uc3QgVVN0cmluZyYgZGVmYXVsdFNvdXJjZVVSTCwgaW50IGRlZmF1
bHRMaW5lTnVtYmVyKQorQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlm
aWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSBmdW5jdGlvblZhbHVlLCBjb25z
dCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCiB7Ci0g
ICAgaWYgKCFmdW5jdGlvbikKKyAgICBpZiAoIWZ1bmN0aW9uVmFsdWUpCiAgICAgICAgIHJldHVy
biBDYWxsSWRlbnRpZmllcihHbG9iYWxDb2RlRXhlY3V0aW9uLCBkZWZhdWx0U291cmNlVVJMLCBk
ZWZhdWx0TGluZU51bWJlcik7Ci0gICAgaWYgKCFmdW5jdGlvbi5pc09iamVjdCgpKQorICAgIGlm
ICghZnVuY3Rpb25WYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZp
ZXIoIih1bmtub3duKSIsIGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1bHRMaW5lTnVtYmVyKTsKLSAg
ICBpZiAoYXNPYmplY3QoZnVuY3Rpb24pLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpIHsK
LSAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGFzRnVuY3Rpb24oZnVuY3Rpb24pOwotICAgICAg
ICBpZiAoIWZ1bmMtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRl
Q2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoZ2xvYmFsRGF0YSwgZnVuYyk7CisgICAgaWYg
KGFzT2JqZWN0KGZ1bmN0aW9uVmFsdWUpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpIHsK
KyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGZ1bmN0aW9uVmFsdWUp
OworICAgICAgICBpZiAoIWZ1bmN0aW9uLT5ib2R5KCktPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoZ2xvYmFs
RGF0YSwgZnVuY3Rpb24pOwogICAgIH0KLSAgICBpZiAoYXNPYmplY3QoZnVuY3Rpb24pLT5pbmhl
cml0cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpCi0gICAgICAgIHJldHVybiBDYWxsSWRlbnRp
ZmllcihzdGF0aWNfY2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oYXNPYmplY3QoZnVuY3Rpb24pKS0+
bmFtZShnbG9iYWxEYXRhKSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOwot
ICAgIHJldHVybiBDYWxsSWRlbnRpZmllcigiKCIgKyBhc09iamVjdChmdW5jdGlvbiktPmNsYXNz
TmFtZSgpICsgIiBvYmplY3QpIiwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIp
OworICAgIGlmIChhc09iamVjdChmdW5jdGlvblZhbHVlKS0+aW5oZXJpdHMoJkludGVybmFsRnVu
Y3Rpb246OmluZm8pKQorICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIoc3RhdGljX2Nhc3Q8
SW50ZXJuYWxGdW5jdGlvbio+KGFzT2JqZWN0KGZ1bmN0aW9uVmFsdWUpKS0+bmFtZShnbG9iYWxE
YXRhKSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOworICAgIHJldHVybiBD
YWxsSWRlbnRpZmllcigiKCIgKyBhc09iamVjdChmdW5jdGlvblZhbHVlKS0+Y2xhc3NOYW1lKCkg
KyAiIG9iamVjdCkiLCBkZWZhdWx0U291cmNlVVJMLCBkZWZhdWx0TGluZU51bWJlcik7CiB9CiAK
IENhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyRnJvbUZ1bmN0aW9uSW1wKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNGdW5jdGlvbiogZnVuY3Rpb24pCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNDcxNzMp
CisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsMTAgKzg2LDExIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blByb3RvRnVuY1QKIHsKICAgICBpZiAodGhpc1ZhbHVlLmlzT2JqZWN0KCZKU0Z1bmN0aW9uOjpp
bmZvKSkgewogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24odGhpc1Zh
bHVlKTsKLSAgICAgICAgaWYgKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAg
ICAgICAgVVN0cmluZyBmdW5jdGlvbkJvZHkgPSBmdW5jdGlvbi0+Ym9keSgpLT50b1NvdXJjZVN0
cmluZygpOwotICAgICAgICAgICAgaW5zZXJ0U2VtaWNvbG9uSWZOZWVkZWQoZnVuY3Rpb25Cb2R5
KTsKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCAiZnVuY3Rpb24gIiArIGZ1bmN0
aW9uLT5uYW1lKCZleGVjLT5nbG9iYWxEYXRhKCkpICsgIigiICsgZnVuY3Rpb24tPmJvZHkoKS0+
cGFyYW1TdHJpbmcoKSArICIpICIgKyBmdW5jdGlvbkJvZHkpOworICAgICAgICBGdW5jdGlvbkJv
ZHlOb2RlKiBib2R5ID0gZnVuY3Rpb24tPmJvZHkoKTsKKyAgICAgICAgaWYgKCFib2R5LT5pc0hv
c3RGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBVU3RyaW5nIGJvZHlTb3VyY2VTdHJpbmcgPSBi
b2R5LT50b1NvdXJjZVN0cmluZygpOworICAgICAgICAgICAgaW5zZXJ0U2VtaWNvbG9uSWZOZWVk
ZWQoYm9keVNvdXJjZVN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
ImZ1bmN0aW9uICIgKyBmdW5jdGlvbi0+bmFtZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKSArICIoIiAr
IGJvZHktPnBhcmFtU3RyaW5nKCkgKyAiKSAiICsgYm9keVNvdXJjZVN0cmluZyk7CiAgICAgICAg
IH0KICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gNDcxNzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMjYgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VM
TChKU0Z1bmN0aW9uKTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTRnVuY3Rpb246OmluZm8gPSB7ICJG
dW5jdGlvbiIsICZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvLCAwLCAwIH07CiAKK2lubGluZSBib29s
IEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ib2R5
ICYmIG1fYm9keS0+aXNIb3N0RnVuY3Rpb24oKTsKK30KKworYm9vbCBKU0Z1bmN0aW9uOjppc0hv
c3RGdW5jdGlvbk5vbklubGluZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9u
KCk7Cit9CisKK0pTRnVuY3Rpb246OkpTRnVuY3Rpb24oUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZSkKKyAgICA6IEJhc2Uoc3RydWN0dXJlKQoreworICAgIGNsZWFyU2NvcGVDaGFpbigp
OworfQorCiBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFt
ZSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKICAgICA6IEJhc2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwg
c3RydWN0dXJlLCBuYW1lKQogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2JvZHkoRnVuY3Rpb25C
b2R5Tm9kZTo6Y3JlYXRlTmF0aXZlVGh1bmsoJmV4ZWMtPmdsb2JhbERhdGEoKSkpCi0jZWxzZQot
ICAgICwgbV9ib2R5KDApCiAjZW5kaWYKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtNjMsNyArNzcs
NyBAQCBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgCiAjZW5kaWYKIH0K
IAotSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHksIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluTm9kZSkKK0pTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHksIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKICAgICA6IEJhc2UoJmV4ZWMtPmdsb2JhbERhdGEo
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVjdHVyZSgpLCBuYW1l
KQogICAgICwgbV9ib2R5KGJvZHkpCiB7CkBAIC0yMTIsNCArMjI2LDkgQEAgSlNPYmplY3QqIEpT
RnVuY3Rpb246OmNvbnN0cnVjdChFeGVjU3RhdAogICAgIHJldHVybiBhc09iamVjdChyZXN1bHQp
OwogfQogCit2b2lkIEpTRnVuY3Rpb246OnNldEJvZHkoUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlO
b2RlPiBib2R5KQoreworICAgIG1fYm9keSA9IGJvZHk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDQ3MTczKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDEwICsyNSw2IEBACiAjZGVmaW5lIEpTRnVuY3Rpb25faAogCiAjaW5jbHVkZSAiSW50ZXJu
YWxGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKLSNpbmNsdWRlICJT
eW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgIk5vZGVzLmgiCi0jaW5jbHVkZSAiSlNPYmplY3QuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQzLDIwICszOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB0eXBlZGVmIEludGVybmFsRnVuY3Rpb24gQmFzZTsKIAotICAgICAgICBKU0Z1
bmN0aW9uKFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICA6IElu
dGVybmFsRnVuY3Rpb24oc3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGVhclNj
b3BlQ2hhaW4oKTsKLSAgICAgICAgfQotCiAgICAgcHVibGljOgogICAgICAgICBKU0Z1bmN0aW9u
KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgaW50IGxlbmd0aCwgY29uc3QgSWRl
bnRpZmllciYsIE5hdGl2ZUZ1bmN0aW9uKTsKLSAgICAgICAgSlNGdW5jdGlvbihFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgRnVuY3Rpb25Cb2R5Tm9kZSosIFNjb3BlQ2hhaW5Ob2RlKik7
Ci0gICAgICAgIH5KU0Z1bmN0aW9uKCk7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdmlydHVh
bCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4sIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAg
ICAgIHZpcnR1YWwgfkpTRnVuY3Rpb24oKTsKIAogICAgICAgICBKU09iamVjdCogY29uc3RydWN0
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKICAgICAgICAgSlNWYWx1ZSBjYWxsKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CkBAIC02NCwxMiArNTAs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRTY29wZShjb25zdCBTY29wZUNo
YWluJiBzY29wZUNoYWluKSB7IHNldFNjb3BlQ2hhaW4oc2NvcGVDaGFpbik7IH0KICAgICAgICAg
U2NvcGVDaGFpbiYgc2NvcGUoKSB7IHJldHVybiBzY29wZUNoYWluKCk7IH0KIAotICAgICAgICB2
b2lkIHNldEJvZHkoRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSkgeyBtX2JvZHkgPSBib2R5OyB9Ci0g
ICAgICAgIHZvaWQgc2V0Qm9keShQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkpIHsg
bV9ib2R5ID0gYm9keTsgfQorICAgICAgICB2b2lkIHNldEJvZHkoUGFzc1JlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPik7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkoKSBjb25zdCB7IHJl
dHVybiBtX2JvZHkuZ2V0KCk7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVu
KE1hcmtTdGFjayYpOwotCiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWUgcHJvdG90eXBlKSAKQEAgLTc3LDExICs2MCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgSW1wbGVtZW50c0hhc0luc3RhbmNlKSk7IAogICAgICAgICB9
CiAKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICBib29sIGlzSG9zdEZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9ib2R5ICYmIG1fYm9keS0+aXNIb3N0RnVuY3Rpb24oKTsgfQotI2Vsc2UKLSAg
ICAgICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5k
aWYKICAgICAgICAgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24oKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TmF0aXZlRnVuY3Rpb24qPihtX2Rh
dGEpOwpAQCAtOTEsNiArNjksMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwg
Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIAogICAgIHByaXZhdGU6CisgICAgICAg
IEpTRnVuY3Rpb24oUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKKworICAgICAgICBib29sIGlzSG9z
dEZ1bmN0aW9uKCkgY29uc3Q7CisgICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUo
KSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHB1dChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlUHJv
cGVydHkoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOworCiAgICAgICAgIHZp
cnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsg
fQogCiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CkBAIC0xMDAsMjIgKzg5LDIy
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbV9i
b2R5OwogICAgICAgICBTY29wZUNoYWluJiBzY29wZUNoYWluKCkKICAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXNI
b3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8U2NvcGVDaGFpbio+KG1fZGF0YSk7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBjbGVh
clNjb3BlQ2hhaW4oKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0
aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsK
ICAgICAgICAgICAgIG5ldyAobV9kYXRhKSBTY29wZUNoYWluKE5vU2NvcGVDaGFpbigpKTsKICAg
ICAgICAgfQogICAgICAgICB2b2lkIHNldFNjb3BlQ2hhaW4oU2NvcGVDaGFpbk5vZGUqIHNjKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uKCkpOworICAgICAg
ICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKICAgICAgICAgICAgIG5l
dyAobV9kYXRhKSBTY29wZUNoYWluKHNjKTsKICAgICAgICAgfQogICAgICAgICB2b2lkIHNldFNj
b3BlQ2hhaW4oY29uc3QgU2NvcGVDaGFpbiYgc2MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVCghaXNIb3N0RnVuY3Rpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0
aW9uTm9uSW5saW5lKCkpOwogICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8U2NvcGVDaGFp
bio+KG1fZGF0YSkgPSBzYzsKICAgICAgICAgfQogICAgICAgICB2b2lkIHNldE5hdGl2ZUZ1bmN0
aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCkBAIC0xMzMsMTEgKzEyMiw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KGFzT2JqZWN0KHZh
bHVlKSk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTRnVuY3Rpb24qIEZ1bmN0aW9uQm9keU5vZGU6
Om1ha2UoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgbV9pZGVudCwgdGhp
cywgc2NvcGVDaGFpbik7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8v
IEpTRnVuY3Rpb25faApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmNw
cAkocmV2aXNpb24gNDcxNzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xv
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3ICszOCw3IEBAIEpTVmFsdWUgUHJvcGVy
dHlTbG90OjpmdW5jdGlvbkdldHRlcihFeGUKICAgICAgICAgcmV0dXJuIGNhbGxEYXRhLm5hdGl2
ZS5mdW5jdGlvbihleGVjLCBzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jLCBzbG90LnNsb3RCYXNlKCks
IGV4ZWMtPmVtcHR5TGlzdCgpKTsKICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUyk7
CiAgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseSB1c2luZyB0
aGUgY2FsbERhdGE/Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihzbG90Lm1f
ZGF0YS5nZXR0ZXJGdW5jKS0+Y2FsbChleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4ZWMtPmVtcHR5
TGlzdCgpKTsKKyAgICByZXR1cm4gYXNGdW5jdGlvbihzbG90Lm1fZGF0YS5nZXR0ZXJGdW5jKS0+
Y2FsbChleGVjLCBzbG90LnNsb3RCYXNlKCksIGV4ZWMtPmVtcHR5TGlzdCgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVudGVkVmVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1NlZ21lbnRlZFZlY3Rvci5oCShy
ZXZpc2lvbiA0NzE3MykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICB9CiAKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQogCiAgICAgICAg
IFQmIGF0KHNpemVfdCBpbmRleCkKICAgICAgICAgewpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MTczKQorKysgV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOC0x
MiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSmF2YVNjcmlwdENvcmUgdHdlYWtzIHRvIGdldCBy
ZWFkeSBmb3IgdGhlIHBhcnNlciBhcmVuYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNDMKKworICAgICAgICAqIGluc3BlY3Rvci9KYXZhU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdERlYnVnU2VydmVy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6CisgICAgICAgIENoYW5nZSB0byBjYWxsIERlYnVn
Z2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucy4KKwogMjAwOS0wOC0xMiAgR2VvcmdlIFdyaWdo
dCAgPGdlb3JnZS53cmlnaHRAdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhdmlkIEh5YXR0LgpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2Vy
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9KYXZhU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCShyZXZpc2lvbiA0NzE3MykKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0phdmFTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NSw2MCArNTU1LDcgQEAgdm9p
ZCBKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJlY29tcGlsZUFsbAogdm9pZCBKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFRpbWVyPEphdmFTY3JpcHREZWJ1Z1Nl
cnZlcj4qKQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0gICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0
YSgpOwotCi0gICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRv
IHJlY29tcGlsZSwgc2luY2Ugd2UnbGwgZW5kCi0gICAgLy8gdXAgdGhyb3dpbmcgYXdheSBjb2Rl
IHRoYXQgaXMgbGl2ZSBvbiB0aGUgc3RhY2suCi0gICAgQVNTRVJUKCFnbG9iYWxEYXRhLT5keW5h
bWljR2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9iamVj
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFByb3RlY3RlZFB0cjxKU0Z1bmN0aW9u
PiA+IGZ1bmN0aW9uczsKLSAgICBIZWFwOjppdGVyYXRvciBoZWFwRW5kID0gZ2xvYmFsRGF0YS0+
aGVhcC5wcmltYXJ5SGVhcEVuZCgpOwotICAgIGZvciAoSGVhcDo6aXRlcmF0b3IgaXQgPSBnbG9i
YWxEYXRhLT5oZWFwLnByaW1hcnlIZWFwQmVnaW4oKTsgaXQgIT0gaGVhcEVuZDsgKytpdCkgewot
ICAgICAgICBpZiAoKCppdCktPmlzT2JqZWN0KCZKU0Z1bmN0aW9uOjppbmZvKSkgewotICAgICAg
ICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oKml0
KTsKLSAgICAgICAgICAgIGlmICghZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAg
ICAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+LCBSZWZQdHI8RnVu
Y3Rpb25Cb2R5Tm9kZT4gPiBGdW5jdGlvbkJvZHlNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNv
dXJjZVByb3ZpZGVyKiwgRXhlY1N0YXRlKj4gU291cmNlUHJvdmlkZXJNYXA7Ci0KLSAgICBGdW5j
dGlvbkJvZHlNYXAgZnVuY3Rpb25Cb2RpZXM7Ci0gICAgU291cmNlUHJvdmlkZXJNYXAgc291cmNl
UHJvdmlkZXJzOwotCi0gICAgc2l6ZV90IHNpemUgPSBmdW5jdGlvbnMuc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0gZnVuY3Rpb25zW2ldOwotCi0gICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIG9sZEJv
ZHkgPSBmdW5jdGlvbi0+Ym9keSgpOwotICAgICAgICBwYWlyPEZ1bmN0aW9uQm9keU1hcDo6aXRl
cmF0b3IsIGJvb2w+IHJlc3VsdCA9IGZ1bmN0aW9uQm9kaWVzLmFkZChvbGRCb2R5LCAwKTsKLSAg
ICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbi0+c2V0Qm9k
eShyZXN1bHQuZmlyc3QtPnNlY29uZC5nZXQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZ1bmN0aW9uLT5zY29wZSgpLmds
b2JhbE9iamVjdCgpLT5KU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwotICAgICAgICBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlID0gb2xkQm9keS0+c291cmNlKCk7Ci0KLSAgICAgICAg
UmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5ld0JvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBh
cnNlPEZ1bmN0aW9uQm9keU5vZGU+KGV4ZWMsIDAsIHNvdXJjZUNvZGUpOwotICAgICAgICBBU1NF
UlQobmV3Qm9keSk7Ci0gICAgICAgIG5ld0JvZHktPmZpbmlzaFBhcnNpbmcob2xkQm9keS0+Y29w
eVBhcmFtZXRlcnMoKSwgb2xkQm9keS0+cGFyYW1ldGVyQ291bnQoKSwgb2xkQm9keS0+aWRlbnQo
KSk7Ci0KLSAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBuZXdCb2R5OwotICAgICAgICBm
dW5jdGlvbi0+c2V0Qm9keShuZXdCb2R5LnJlbGVhc2UoKSk7Ci0KLSAgICAgICAgaWYgKGhhc0xp
c3RlbmVycygpICYmIGZ1bmN0aW9uLT5zY29wZSgpLmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigp
ID09IHRoaXMpCi0gICAgICAgICAgICBzb3VyY2VQcm92aWRlcnMuYWRkKHNvdXJjZUNvZGUucHJv
dmlkZXIoKSwgZXhlYyk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBzb3VyY2VQYXJzZWQoKSBhZnRl
ciByZXBhcnNpbmcgYWxsIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IHdpbGwgZXhlY3V0ZQotICAgIC8v
IEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KLSAgICBTb3VyY2VQcm92aWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gc291cmNlUHJvdmlkZXJzLmVuZCgpOwotICAgIGZvciAoU291cmNl
UHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzb3VyY2VQcm92aWRlcnMuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgc291cmNlUGFyc2VkKCgqaXRlcikuc2Vj
b25kLCBTb3VyY2VDb2RlKCgqaXRlcikuZmlyc3QpLCAtMSwgMCk7CisgICAgRGVidWdnZXI6OnJl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKSwg
aGFzTGlzdGVuZXJzKCkpOwogfQogCiB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkQWRk
TGlzdGVuZXIoUGFnZSogcGFnZSkK
</data>
<flag name="review"
          id="18907"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34775</attachid>
            <date>2009-08-13 12:59:06 -0700</date>
            <delta_ts>2009-08-13 14:11:57 -0700</delta_ts>
            <desc>patch addressing David Levin’s comments</desc>
            <filename>ArenaPrepPatch.txt</filename>
            <type>text/plain</type>
            <size>54330</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MjI0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTcgQEAKKzIwMDktMDgtMTMgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEphdmFTY3JpcHRDb3JlIHR3ZWFrcyB0byBnZXQgcmVhZHkgZm9yIHRo
ZSBwYXJzZXIgYXJlbmEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI4MjQzCisKKyAgICAgICAgRWxpbWluYXRlIGRlcGVuZGVuY2llcyBvbiBOb2Rlcy5o
IG91dHNpZGUgSmF2YVNjcmlwdENvcmUsCisgICAgICAgIGFuZCBjdXQgZG93biBvbiB0aGVtIGlu
c2lkZSBKYXZhU2NyaXB0Q29yZS4KKworICAgICAgICBDaGFuZ2UgcmVndWxhciBleHByZXNzaW9u
IHBhcnNpbmcgdG8gdXNlIGlkZW50aWZpZXJzIGFzCisgICAgICAgIHdpdGggb3RoZXIgc3RyaW5n
cyB3ZSBwYXJzZS4KKworICAgICAgICBGaXggYSBjb3VwbGUgdGhpbmdzIHRoYXQgYXJlIG5lZWRl
ZCB0byB1c2UgY29uc3QgSWRlbnRpZmllcgorICAgICAgICBtb3JlLCB3aGljaCB3aWxsIGJlIHBh
cnQgb2YgdGhlIHBhcnNlciBhcmVuYSB3b3JrLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
ZXhwOiBSZXNvcnRlZCBhbmQgdXBkYXRlZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IENoYW5nZWQKKyAgICAgICAgQ29sbGVjdG9ySGVhcEl0
ZXJhdG9yLmggdG8gYmUgcHJvamVjdC1pbnRlcm5hbC4KKworICAgICAgICAqIGJ5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHVzaE5ld1Njb3BlKTogQWRkZWQgY29uc3QuCisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmg6IERpdHRvLgorCisgICAgICAgICogZGVidWdnZXIvRGVidWdn
ZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMp
OiBNb3ZlZCB0aGlzIGZ1bmN0aW9uCisgICAgICAgIGhlcmUgZnJvbSBXZWJDb3JlLiBIZXJlIGlz
IGJldHRlciBzaW5jZSBpdCB1c2VzIHNvIG1hbnkgaW50ZXJuYWxzLgorICAgICAgICBSZW1vdmVk
IHVuaW1wb3J0YW50IG9wdGltaXphdGlvbiBmb3IgdGhlIG5vIGxpc3RlbmVyIGNhc2UuCisgICAg
ICAgICogZGVidWdnZXIvRGVidWdnZXIuaDogRGl0dG8uIEFsc28gcmVtb3ZlZCB1bm5lZWRlZCBp
bmNsdWRlCisgICAgICAgIGFuZCB0d2Vha2VkIGZvcm1hdHRpbmcgYW5kIGNvbW1lbnRzLgorCisg
ICAgICAgICogZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlckNhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKTogQ2FsbCBhc0Z1bmN0aW9uIGluc3RlYWQK
KyAgICAgICAgb2YgZG9pbmcgdGhlIHVuY2hlY2tlZCBzdGF0aWNfY2FzdC4KKyAgICAgICAgKEpT
Qzo6RGVidWdnZXJDYWxsRnJhbWU6OmNhbGN1bGF0ZWRGdW5jdGlvbk5hbWUpOiBEaXR0by4KKwor
ICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6Om9wX2NhbGxfSlNGdW5j
dGlvbik6IENhbGwgaXNIb3N0RnVuY3Rpb24gb24gdGhlIGJvZHkgcmF0aGVyCisgICAgICAgIHRo
YW4gb24gdGhlIEpTRnVuY3Rpb24uCisgICAgICAgIChKU0M6OnZtX2xhenlMaW5rQ2FsbCk6IERp
dHRvLgorICAgICAgICAoSlNDOjpvcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpOiBEaXR0by4KKwor
ICAgICAgICAqIHBhcnNlci9HcmFtbWFyLnk6IENoYW5nZWQgY2FsbGVycyB0byB1c2UgbmV3IHNj
YW5SZWdFeHAgd2l0aAorICAgICAgICBvdXQgYXJndW1lbnRzIGluc3RlYWQgb2YgcmVseWluZyBv
biBzdGF0ZSBpbiB0aGUgTGV4ZXIuIEFuZAorICAgICAgICBjYWxsZXJzIHRoYXQganVzdCB3YW50
IHRvIHNraXAgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gdXNlCisgICAgICAgIHNraXBSZWdFeHAu
CisKKyAgICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjpMZXhlcjo6c2Nh
blJlZ0V4cCk6IENoYW5nZWQgdG8gdXNlIG91dCBhcmd1bWVudHMsIGFuZCB0bworICAgICAgICBh
ZGQgYSBwcmVmaXggYXJndW1lbnQgc28gd2UgY2FuIGFkZCBpbiB0aGUgIj0iIGNoYXJhY3RlciBh
cyBuZWVkZWQuCisgICAgICAgIEFsc28gcmV3cm90ZSB0byBzdHJlYW1saW5lIHRoZSBsb2dpYyBh
IGJpdCBpbnNwaXJlZCBieSBzdWdnZXN0aW9ucworICAgICAgICBieSBEYXZpZCBMZXZpbi4KKyAg
ICAgICAgKEpTQzo6TGV4ZXI6OnNraXBSZWdFeHApOiBBZGRlZC4gVmVyc2lvbiBvZiB0aGUgZnVu
Y3Rpb24gYWJvdmUgdGhhdAorICAgICAgICBkb2VzIG5vdCBhY3R1YWxseSBwdXQgdGhlIHJlZ3Vs
YXIgZXhwcmVzc2lvbiBpbnRvIGEgc3RyaW5nLgorICAgICAgICAoSlNDOjpMZXhlcjo6Y2xlYXIp
OiBSZW1vdmVkIGNvZGUgdG8gY2xlYXIgbV9wYXR0ZXJuIGFuZCBtX2ZsYWdzLgorICAgICAgICAq
IHBhcnNlci9MZXhlci5oOiBDaGFuZ2VkIHNjYW5SZWdFeHAgdG8gaGF2ZSBvdXQgYXJndW1lbnRz
LiBBZGRlZAorICAgICAgICBza2lwUmVnRXhwLiBFbGltaW5hdGVkIHBhdHRlcm4sIGZsYWdzLCBt
X3BhdHRlcm4sIGFuZCBtX2ZsYWdzLgorCisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3Rv
cnMuaDoKKyAgICAgICAgKEpTQzo6UmVnRXhwTm9kZTo6UmVnRXhwTm9kZSk6IENoYW5nZWQgdG8g
dGFrZSBjb25zdCBJZGVudGlmaWVyJi4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAg
ICAgICAoSlNDOjpSZWdFeHBOb2RlOjplbWl0Qnl0ZWNvZGUpOiBDaGFuZ2VkIHNpbmNlIG1fcGF0
dGVybiBhbmQKKyAgICAgICAgbV9mbGFncyBhcmUgbm93IElkZW50aWZpZXIgaW5zdGVhZCBvZiBV
U3RyaW5nLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjptYWtlKTogTW92ZWQgdGhp
cyBmdW5jdGlvbiBoZXJlIGluc3RlYWQKKyAgICAgICAgb2YgcHV0dGluZyBpdCBpbiB0aGUgSlNG
dW5jdGlvbi5oIGhlYWRlci4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDogQ2hhbmdlZCBSZWdF
eHBOb2RlIHRvIHVzZSBJZGVudGlmaWVyLgorCisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIpOiBDaGFu
Z2VkIHRvIHVzZSBpc0hvc3RGdW5jdGlvbgorICAgICAgICBvbiB0aGUgYm9keSBpbnN0ZWFkIG9m
IG9uIHRoZSBKU0Z1bmN0aW9uIG9iamVjdC4KKyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6IERp
dHRvLgorCisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb24pOiBNb3ZlZCBoZXJlIGZyb20gaGVhZGVyLgorICAg
ICAgICAoSlNDOjpKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbk5vbklubGluZSk6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKTogUmVtb3ZlZCB1bm5lZWRlZCBp
bml0aWFsaXphdGlvbiBvZgorICAgICAgICBtX2JvZHkgdG8gMC4KKyAgICAgICAgKEpTQzo6SlNG
dW5jdGlvbjo6c2V0Qm9keSk6IE1vdmVkIGhlcmUgZnJvbSBoZWFkZXIuCisKKyAgICAgICAgKiBy
dW50aW1lL0pTRnVuY3Rpb24uaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gTW92ZWQgcHJp
dmF0ZQorICAgICAgICBjb25zdHJ1Y3RvciBkb3duIHRvIHRoZSBwcml2YXRlIHNlY3Rpb24uIE1h
ZGUgdmlydHVhbCBmdW5jdGlvbnMKKyAgICAgICAgcHJpdmF0ZS4gUmVtb3ZlZCB1bm5lZWRlZCBv
dmVybG9hZCBvZiBzZXRCb2R5IGFuZCBtb3ZlZCB0aGUgYm9keQorICAgICAgICBvZiB0aGUgZnVu
Y3Rpb24gaW50byB0aGUgLmNwcCBmaWxlLiBDaGFuZ2VkIGFzc2VydGlvbnMgdG8gdXNlCisgICAg
ICAgIHRoZSBub24taW5saW5lIHZlcnNpb24gb2YgaXNIb3N0RnVuY3Rpb24uCisKKyAgICAgICAg
KiBydW50aW1lL1Byb3BlcnR5U2xvdC5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6
ZnVuY3Rpb25HZXR0ZXIpOiBVc2UgYXNGdW5jdGlvbiBpbnN0ZWFkCisgICAgICAgIG9mIGRvaW5n
IHRoZSB1bmNoZWNrZWQgc3RhdGljX2Nhc3QuCisKKyAgICAgICAgKiB3dGYvU2VnbWVudGVkVmVj
dG9yLmg6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6aXNFbXB0eSk6IEFkZGVkLgor
CiAyMDA5LTA4LTEzICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gNDcyMTApCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDYgQEAgX19aTjNKU0MxMElk
ZW50aWZpZXIyNGNoZWNrU2FtZUlkZW50aWZpZQogX19aTjNKU0MxMElkZW50aWZpZXIyNGNoZWNr
U2FtZUlkZW50aWZpZXJUYWJsZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfN1VTdHJpbmczUmVwRSAKIF9f
Wk4zSlNDMTBJZGVudGlmaWVyM2FkZEVQTlNfOUV4ZWNTdGF0ZUVQS2MKIF9fWk4zSlNDMTBJZGVu
dGlmaWVyNWVxdWFsRVBLTlNfN1VTdHJpbmczUmVwRVBLYwotX19aTjNKU0MxMEpTRnVuY3Rpb240
aW5mb0UKIF9fWk4zSlNDMTBKU0Z1bmN0aW9uQzFFUE5TXzlFeGVjU3RhdGVFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfOVN0cnVjdHVyZUVFRWlSS05TXzEwSWRlbnRpZmllckVQRk5TXzdKU1ZhbHVlRVMy
X1BOU184SlNPYmplY3RFU0FfUktOU183QXJnTGlzdEVFCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQ
TlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRQogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlF
eGVjU3RhdGVFTlNfOUVycm9yVHlwZUVQS2MKQEAgLTE5Niw4ICsxOTUsOCBAQCBfX1pOM0pTQzZK
U0NlbGwzcHV0RVBOU185RXhlY1N0YXRlRVJLTlNfCiBfX1pOM0pTQzZKU0NlbGwzcHV0RVBOU185
RXhlY1N0YXRlRWpOU183SlNWYWx1ZUUgIAogX19aTjNKU0M2SlNDZWxsOWdldE9iamVjdEV2CiBf
X1pOM0pTQzZKU0NlbGxud0VtUE5TXzlFeGVjU3RhdGVFCi1fX1pOM0pTQzZKU0xvY2sxMkRyb3BB
bGxMb2Nrc0MxRVBOU185RXhlY1N0YXRlRQogX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxsTG9ja3ND
MUVOU18xNEpTTG9ja0JlaGF2aW9yRQorX19aTjNKU0M2SlNMb2NrMTJEcm9wQWxsTG9ja3NDMUVQ
TlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDNkpTTG9jazEyRHJvcEFsbExvY2tzRDFFdgogX19aTjNK
U0M2SlNMb2NrNGxvY2tFTlNfMTRKU0xvY2tCZWhhdmlvckUKIF9fWk4zSlNDNkpTTG9jazZ1bmxv
Y2tFTlNfMTRKU0xvY2tCZWhhdmlvckUKQEAgLTIyNyw5ICsyMjYsOSBAQCBfX1pOM0pTQzdVU3Ry
aW5nNmFwcGVuZEVSS1MwXwogX19aTjNKU0M3VVN0cmluZ0MxRVBLYwogX19aTjNKU0M3VVN0cmlu
Z0MxRVBLdGkKIF9fWk4zSlNDN1VTdHJpbmdhU0VQS2MKK19fWk4zSlNDOERlYnVnZ2VyMjNyZWNv
bXBpbGVBbGxKU0Z1bmN0aW9uc0VQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pTQzhEZWJ1Z2dl
cjZhdHRhY2hFUE5TXzE0SlNHbG9iYWxPYmplY3RFCiBfX1pOM0pTQzhEZWJ1Z2dlcjZkZXRhY2hF
UE5TXzE0SlNHbG9iYWxPYmplY3RFCi1fX1pOM0pTQzhEZWJ1Z2dlckMyRXYKIF9fWk4zSlNDOERl
YnVnZ2VyRDJFdgogX19aTjNKU0M4SlNPYmplY3QxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0YXRl
RU5TXzdKU1ZhbHVlRVMzXwogX19aTjNKU0M4SlNPYmplY3QxMmRlZmluZUdldHRlckVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVQUzBfCkBAIC0zMjQsMTMgKzMyMywxMyBAQCBfX1pO
M1dURjhDb2xsYXRvckMxRVBLYwogX19aTjNXVEY4Q29sbGF0b3JEMUV2CiBfX1pOM1dURjhmYXN0
RnJlZUVQdgogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCitfX1pOSzNKU0MxMEpTRnVuY3Rp
b24yM2lzSG9zdEZ1bmN0aW9uTm9uSW5saW5lRXYKIF9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxNHJl
dHJpZXZlQ2FsbGVyRVBOU185RXhlY1N0YXRlRVBOU18xNkludGVybmFsRnVuY3Rpb25FCiBfX1pO
SzNKU0MxMUludGVycHJldGVyMThyZXRyaWV2ZUxhc3RDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUmlS
bFJOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFICAKIF9fWk5LM0pTQzEyRGF0ZUluc3RhbmNlN2dl
dFRpbWVFUmRSaQogX19aTkszSlNDMTJTdHJpbmdPYmplY3QxMnRvVGhpc1N0cmluZ0VQTlNfOUV4
ZWNTdGF0ZUUKIF9fWk5LM0pTQzEyU3RyaW5nT2JqZWN0OHRvU3RyaW5nRVBOU185RXhlY1N0YXRl
RQogX19aTkszSlNDMTRKU0dsb2JhbE9iamVjdDE0aXNEeW5hbWljU2NvcGVFdgotCiBfX1pOSzNK
U0MxNkZ1bmN0aW9uQm9keU5vZGUxNGlzSG9zdEZ1bmN0aW9uRXYKIF9fWk5LM0pTQzE2SW50ZXJu
YWxGdW5jdGlvbjljbGFzc0luZm9FdgogX19aTkszSlNDMTZKU1ZhcmlhYmxlT2JqZWN0MTZpc1Zh
cmlhYmxlT2JqZWN0RXYKQEAgLTM3OSw2ICszNzgsNyBAQCBfX1pUVk4zSlNDMTVKU1dyYXBwZXJP
YmplY3RFCiBfX1pUVk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uRQogX19aVFZOM0pTQzE2SlNWYXJp
YWJsZU9iamVjdEUKIF9fWlRWTjNKU0MxN0pTQVBJVmFsdWVXcmFwcGVyRQorX19aVFZOM0pTQzhE
ZWJ1Z2dlckUKIF9fWlRWTjNKU0M4SlNPYmplY3RFCiBfX1pUVk4zSlNDOEpTU3RyaW5nRQogX2pz
Y29yZV9mYXN0bWFsbG9jX2ludHJvc3BlY3Rpb24KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNDcyMTApCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBACiAJCTE0QkQ1QTMw
MEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRCRDVBMjkwQTNFOTFGNjAwQkFGNTlDIC8qIEpT
Q29udGV4dFJlZi5jcHAgKi87IH07CiAJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1Zh
bHVlUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0QkQ1QTJCMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVmLmNwcCAqLzsgfTsKIAkJMTRD
NTI0MkIwRjUzNTVFOTAwQkEzRDA0IC8qIEpJVFN0dWJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEE2NTgxQTBGNEUzNkY0MDAwMTUwRkQgLyogSklU
U3R1YnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkxNEYzNDg4RjBFOTVFRjhBMDAzNjQ4QkMgLyogQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEYzNDg4RTBFOTVF
RjhBMDAzNjQ4QkMgLyogQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRGMzQ4OEYwRTk1RUY4QTAwMzY0OEJD
IC8qIENvbGxlY3RvckhlYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTRGMzQ4OEUwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxlY3Rvckhl
YXBJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTE4
MEI5QjA4MEYxNkQ5NEYwMDlCREJDNSAvKiBDdXJyZW50VGltZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTgwQjlBRjAwRjE2QzU2OTAwOUJEQkM1IC8q
IEN1cnJlbnRUaW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTgwQjlCRkUwRjE2RTk0RDAwOUJEQkM1IC8qIEN1cnJlbnRUaW1lLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE4MEI5QUVGMEYxNkM1
NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5jcHAgKi87IH07CiAJCTFDNjE1MTZDMEVCQUM3QTAw
MDMxMzc2RiAvKiBQcm9maWxlclNlcnZlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNjE1MTZBMEVCQUM3QTAwMDMxMzc2RiAvKiBQcm9maWxlclNl
cnZlci5tbSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxp
YXNpbmciOyB9OyB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MDAsNyArMTgwMCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRTdWJyb3V0aW5lUmUK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmV0QWRkclNyYy0+aW5kZXgoKSk7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoTmV3U2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUpCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0UHVzaE5ld1Njb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewogICAgIENvbnRyb2xGbG93Q29udGV4
dCBjb250ZXh0OwogICAgIGNvbnRleHQuaXNGaW5hbGx5QmxvY2sgPSBmYWxzZTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZp
c2lvbiA0NzIxMCkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNyArMzE4LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYXRjaChSZWdpc3RlcklEKiwgTGFiZWwqIHN0YXJ0
LCBMYWJlbCogZW5kKTsKICAgICAgICAgdm9pZCBlbWl0VGhyb3coUmVnaXN0ZXJJRCogZXhjKSB7
IGVtaXRVbmFyeU5vRHN0T3Aob3BfdGhyb3csIGV4Yyk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdE5ld0Vycm9yKFJlZ2lzdGVySUQqIGRzdCwgRXJyb3JUeXBlIHR5cGUsIEpTVmFsdWUgbWVz
c2FnZSk7Ci0gICAgICAgIHZvaWQgZW1pdFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1p
dFB1c2hOZXdTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
LCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1c2hTY29w
ZShSZWdpc3RlcklEKiBzY29wZSk7CiAgICAgICAgIHZvaWQgZW1pdFBvcFNjb3BlKCk7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIEph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
MTYgKzIyLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIK
IAotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotRGVidWdn
ZXI6OkRlYnVnZ2VyKCkKLXsKLX0KLQogRGVidWdnZXI6On5EZWJ1Z2dlcigpCiB7CiAgICAgSGFz
aFNldDxKU0dsb2JhbE9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBtX2dsb2JhbE9iamVjdHMuZW5k
KCk7CkBAIC01Myw2ICs1MCw2MiBAQCB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmpl
Y3QqIGdsCiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcigwKTsKIH0KIAordm9pZCBEZWJ1
Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQor
eworICAgIC8vIElmIEphdmFTY3JpcHQgaXMgcnVubmluZywgaXQncyBub3Qgc2FmZSB0byByZWNv
bXBpbGUsIHNpbmNlIHdlJ2xsIGVuZAorICAgIC8vIHVwIHRocm93aW5nIGF3YXkgY29kZSB0aGF0
IGlzIGxpdmUgb24gdGhlIHN0YWNrLgorICAgIEFTU0VSVCghZ2xvYmFsRGF0YS0+ZHluYW1pY0ds
b2JhbE9iamVjdCk7CisgICAgaWYgKGdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxPYmplY3QpCisg
ICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxQcm90ZWN0ZWRQdHI8SlNGdW5jdGlvbj4gPiBm
dW5jdGlvbnM7CisgICAgSGVhcDo6aXRlcmF0b3IgaGVhcEVuZCA9IGdsb2JhbERhdGEtPmhlYXAu
cHJpbWFyeUhlYXBFbmQoKTsKKyAgICBmb3IgKEhlYXA6Oml0ZXJhdG9yIGl0ID0gZ2xvYmFsRGF0
YS0+aGVhcC5wcmltYXJ5SGVhcEJlZ2luKCk7IGl0ICE9IGhlYXBFbmQ7ICsraXQpIHsKKyAgICAg
ICAgaWYgKCgqaXQpLT5pc09iamVjdCgmSlNGdW5jdGlvbjo6aW5mbykpIHsKKyAgICAgICAgICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbigqaXQpOworICAgICAgICAgICAgaWYg
KCFmdW5jdGlvbi0+Ym9keSgpLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgICAgIGZ1
bmN0aW9ucy5hcHBlbmQoZnVuY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgdHlwZWRl
ZiBIYXNoTWFwPFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiwgUmVmUHRyPEZ1bmN0aW9uQm9keU5v
ZGU+ID4gRnVuY3Rpb25Cb2R5TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VQcm92aWRl
ciosIEV4ZWNTdGF0ZSo+IFNvdXJjZVByb3ZpZGVyTWFwOworCisgICAgRnVuY3Rpb25Cb2R5TWFw
IGZ1bmN0aW9uQm9kaWVzOworICAgIFNvdXJjZVByb3ZpZGVyTWFwIHNvdXJjZVByb3ZpZGVyczsK
KworICAgIHNpemVfdCBzaXplID0gZnVuY3Rpb25zLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGZ1
bmN0aW9uc1tpXTsKKworICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBvbGRCb2R5ID0gZnVuY3Rp
b24tPmJvZHkoKTsKKyAgICAgICAgcGFpcjxGdW5jdGlvbkJvZHlNYXA6Oml0ZXJhdG9yLCBib29s
PiByZXN1bHQgPSBmdW5jdGlvbkJvZGllcy5hZGQob2xkQm9keSwgMCk7CisgICAgICAgIGlmICgh
cmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAgZnVuY3Rpb24tPnNldEJvZHkocmVzdWx0LmZp
cnN0LT5zZWNvbmQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS5nbG9iYWxPYmplY3QoKS0+SlNH
bG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKKyAgICAgICAgY29uc3QgU291cmNlQ29kZSYgc291
cmNlQ29kZSA9IG9sZEJvZHktPnNvdXJjZSgpOworCisgICAgICAgIFJlZlB0cjxGdW5jdGlvbkJv
ZHlOb2RlPiBuZXdCb2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlO
b2RlPihleGVjLCAwLCBzb3VyY2VDb2RlKTsKKyAgICAgICAgQVNTRVJUKG5ld0JvZHkpOworICAg
ICAgICBuZXdCb2R5LT5maW5pc2hQYXJzaW5nKG9sZEJvZHktPmNvcHlQYXJhbWV0ZXJzKCksIG9s
ZEJvZHktPnBhcmFtZXRlckNvdW50KCksIG9sZEJvZHktPmlkZW50KCkpOworCisgICAgICAgIHJl
c3VsdC5maXJzdC0+c2Vjb25kID0gbmV3Qm9keTsKKyAgICAgICAgZnVuY3Rpb24tPnNldEJvZHko
bmV3Qm9keS5yZWxlYXNlKCkpOworCisgICAgICAgIGlmIChmdW5jdGlvbi0+c2NvcGUoKS5nbG9i
YWxPYmplY3QoKS0+ZGVidWdnZXIoKSA9PSB0aGlzKQorICAgICAgICAgICAgc291cmNlUHJvdmlk
ZXJzLmFkZChzb3VyY2VDb2RlLnByb3ZpZGVyKCksIGV4ZWMpOworICAgIH0KKworICAgIC8vIENh
bGwgc291cmNlUGFyc2VkKCkgYWZ0ZXIgcmVwYXJzaW5nIGFsbCBmdW5jdGlvbnMgYmVjYXVzZSBp
dCB3aWxsIGV4ZWN1dGUKKyAgICAvLyBKYXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3IuCisgICAg
U291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNvdXJjZVByb3ZpZGVycy5l
bmQoKTsKKyAgICBmb3IgKFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
c291cmNlUHJvdmlkZXJzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIHNv
dXJjZVBhcnNlZChpdGVyLT5zZWNvbmQsIFNvdXJjZUNvZGUoaXRlci0+Zmlyc3QpLCAtMSwgMCk7
Cit9CisKIEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25zdCBVU3RyaW5nJiBz
Y3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
IHsKICAgICBDYWxsRnJhbWUqIGdsb2JhbENhbGxGcmFtZSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZpc2lvbiA0NzIx
MCkKKysrIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNDAgKzIyLDQy
IEBACiAjaWZuZGVmIERlYnVnZ2VyX2gKICNkZWZpbmUgRGVidWdnZXJfaAogCi0jaW5jbHVkZSAi
UHJvdGVjdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgRGVidWdnZXJDYWxsRnJhbWU7CiAgICAgY2xhc3MgRXhlY1N0YXRlOworICAg
IGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKKyAgICBjbGFz
cyBKU1ZhbHVlOwogICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAgICAgY2xhc3MgVVN0cmluZzsKIAog
ICAgIGNsYXNzIERlYnVnZ2VyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERlYnVnZ2VyKCk7CiAg
ICAgICAgIHZpcnR1YWwgfkRlYnVnZ2VyKCk7CiAKICAgICAgICAgdm9pZCBhdHRhY2goSlNHbG9i
YWxPYmplY3QqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaChKU0dsb2JhbE9iamVjdCop
OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgY29uc3Qg
U291cmNlQ29kZSYsIGludCBlcnJvckxpbmUsIGNvbnN0IFVTdHJpbmcmIGVycm9yTXNnKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBleGNlcHRpb24oY29uc3QgRGVidWdnZXJDYWxsRnJhbWUm
LCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVubykgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgYXRTdGF0ZW1lbnQoY29uc3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJ
RCwgaW50IGxpbmVubykgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsbEV2ZW50KGNvbnN0
IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8pID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHJldHVybkV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1l
JiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lbm8pID0gMDsKLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgd2lsbEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRy
X3Qgc291cmNlSUQsIGludCBsaW5lbm8pID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEV4
ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQs
IGludCBsaW5lbm8pID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWNoQnJlYWtwb2lu
dChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZW5v
KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgY29u
c3QgU291cmNlQ29kZSYsIGludCBlcnJvckxpbmVOdW1iZXIsIGNvbnN0IFVTdHJpbmcmIGVycm9y
TWVzc2FnZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZXB0aW9uKGNvbnN0IERlYnVn
Z2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBhdFN0YXRlbWVudChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYs
IGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51bWJlcikgPSAwOworICAgICAgICB2aXJ0dWFs
IHZvaWQgY2FsbEV2ZW50KGNvbnN0IERlYnVnZ2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNl
SUQsIGludCBsaW5lTnVtYmVyKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXR1cm5FdmVu
dChjb25zdCBEZWJ1Z2dlckNhbGxGcmFtZSYsIGludHB0cl90IHNvdXJjZUlELCBpbnQgbGluZU51
bWJlcikgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsRXhlY3V0ZVByb2dyYW0oY29u
c3QgRGVidWdnZXJDYWxsRnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIp
ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEV4ZWN1dGVQcm9ncmFtKGNvbnN0IERlYnVn
Z2VyQ2FsbEZyYW1lJiwgaW50cHRyX3Qgc291cmNlSUQsIGludCBsaW5lTnVtYmVyKSA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoY29uc3QgRGVidWdnZXJDYWxs
RnJhbWUmLCBpbnRwdHJfdCBzb3VyY2VJRCwgaW50IGxpbmVOdW1iZXIpID0gMDsKKworICAgICAg
ICB2b2lkIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKEpTR2xvYmFsRGF0YSopOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgSGFzaFNldDxKU0dsb2JhbE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsK
ICAgICB9OwogCi0gICAgLy8gVGhpcyBtZXRob2QgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcKLSAgICAvLyBXZWJTY3JpcHREZWJ1Z2dlciBjbGll
bnRzCisgICAgLy8gVGhpcyBmdW5jdGlvbiBleGlzdHMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBh
dGliaWxpdHkgd2l0aCBleGlzdGluZyBXZWJTY3JpcHREZWJ1Z2dlciBjbGllbnRzLgogICAgIEpT
VmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25zdCBVU3RyaW5nJiwgSlNWYWx1ZSYg
ZXhjZXB0aW9uLCBKU0dsb2JhbE9iamVjdCopOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlz
aW9uIDQ3MjEwKQorKysgSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIGNvbnN0IFVTdHJpbmcqIERlYnVn
Z2VyQ2FsbEZyYW1lOjpmdW5jdGkKICAgICBpZiAoIW1fY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IHN0YXRpY19j
YXN0PEpTRnVuY3Rpb24qPihtX2NhbGxGcmFtZS0+Y2FsbGVlKCkpOworICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uID0gYXNGdW5jdGlvbihtX2NhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIGlmICgh
ZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiAmZnVuY3Rpb24tPm5hbWUo
Jm1fY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwpAQCAtNTIsNyArNTIsNyBAQCBVU3RyaW5nIERl
YnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxhdGVkRnVuCiAgICAgaWYgKCFtX2NhbGxGcmFtZS0+Y29k
ZUJsb2NrKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+KG1fY2FsbEZyYW1lLT5jYWxsZWUoKSk7Cisg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKG1fY2FsbEZyYW1lLT5jYWxsZWUo
KSk7CiAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGZ1
bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUoJm1fY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkp
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0ODAsMTIgKzE0
ODAsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX2NhbGxfSlNGdQogI2VuZGlm
CiAKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKSk7Ci0gICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSk7
CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IGZ1bmN0aW9uLT5ib2R5KCk7CisgICAgQVNT
RVJUKCFib2R5LT5pc0hvc3RGdW5jdGlvbigpKTsKICAgICBTY29wZUNoYWluTm9kZSogY2FsbERh
dGFTY29wZUNoYWluID0gZnVuY3Rpb24tPnNjb3BlKCkubm9kZSgpOwogICAgIGJvZHktPmppdENv
ZGUoY2FsbERhdGFTY29wZUNoYWluKTsKIAotICAgIHJldHVybiAmKGJvZHktPmdlbmVyYXRlZEJ5
dGVjb2RlKCkpOworICAgIHJldHVybiAmYm9keS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsKIH0KIAog
REVGSU5FX1NUVUJfRlVOQ1RJT04oVm9pZFB0clBhaXIsIG9wX2NhbGxfYXJpdHlDaGVjaykKQEAg
LTE1MzksMTMgKzE1MzksMTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX2xhenlM
aW5rQwogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKICAgICBKU0Z1
bmN0aW9uKiBjYWxsZWUgPSBhc0Z1bmN0aW9uKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkp
OwotICAgIEpJVENvZGUmIGppdENvZGUgPSBjYWxsZWUtPmJvZHkoKS0+Z2VuZXJhdGVkSklUQ29k
ZSgpOworICAgIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkgPSBjYWxsZWUtPmJvZHkoKTsKKyAgICBK
SVRDb2RlJiBqaXRDb2RlID0gYm9keS0+Z2VuZXJhdGVkSklUQ29kZSgpOwogICAgIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gMDsKLSAgICBpZiAoIWNhbGxlZS0+aXNIb3N0RnVuY3Rpb24o
KSkKLSAgICAgICAgY29kZUJsb2NrID0gJmNhbGxlZS0+Ym9keSgpLT5ieXRlY29kZShjYWxsZWUt
PnNjb3BlKCkubm9kZSgpKTsKKyAgICBpZiAoIWJvZHktPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAg
ICAgIGNvZGVCbG9jayA9ICZib2R5LT5ieXRlY29kZShjYWxsZWUtPnNjb3BlKCkubm9kZSgpKTsK
ICAgICBlbHNlCi0gICAgICAgIGNvZGVCbG9jayA9ICZjYWxsZWUtPmJvZHkoKS0+Z2VuZXJhdGVk
Qnl0ZWNvZGUoKTsKKyAgICAgICAgY29kZUJsb2NrID0gJmJvZHktPmdlbmVyYXRlZEJ5dGVjb2Rl
KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSAmc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5nZXRDYWxsTGlua0luZm8oc3RhY2tGcmFt
ZS5hcmdzWzFdLnJldHVybkFkZHJlc3MoKSk7CiAKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vl
bk9uY2UoKSkKQEAgLTE3MTUsNyArMTcxNiw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2Jq
ZWN0Kiwgb3BfY29uc3QKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAK
ICAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9IGFzRnVuY3Rpb24oc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKSk7Ci0gICAgaWYgKGNvbnN0cnVjdG9yLT5pc0hvc3RGdW5jdGlvbigpKSB7
CisgICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IGNvbnN0cnVjdG9yLT5ib2R5KCk7CisgICAg
aWYgKGJvZHkgJiYgYm9keS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIHVuc2lnbmVkIHZQQ0lu
ZGV4ID0gY29kZUJsb2NrLT5nZXRCeXRlY29kZUluZGV4KGNhbGxGcmFtZSwgU1RVQl9SRVRVUk5f
QUREUkVTUyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvR3JhbW1hci55Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9HcmFtbWFyLnkJKHJldmlzaW9uIDQ3MjEwKQor
KysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL0dyYW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtMjky
LDE5ICsyOTIsMjMgQEAgTGl0ZXJhbDoKICAgfCBTVFJJTkcgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88RXhwcmVzc2lvbk5vZGUqPihuZXcgKEdMT0JB
TF9EQVRBKSBTdHJpbmdOb2RlKEdMT0JBTF9EQVRBLCAqJDEpLCAwLCAxKTsgfQogICB8ICcvJyAv
KiByZWdleHAgKi8gICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGV4ZXImIGwgPSAqTEVYRVI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbC5zY2FuUmVnRXhwKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIHBh
dHRlcm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXIqIGZsYWdzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWwuc2NhblJlZ0V4cChwYXR0ZXJuLCBmbGFncykpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUFCT1JUOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdFeHBOb2RlKiBub2RlID0gbmV3IChH
TE9CQUxfREFUQSkgUmVnRXhwTm9kZShHTE9CQUxfREFUQSwgbC5wYXR0ZXJuKCksIGwuZmxhZ3Mo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXpl
ID0gbC5wYXR0ZXJuKCkuc2l6ZSgpICsgMjsgLy8gKyAyIGZvciB0aGUgdHdvIC8ncworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdFeHBOb2RlKiBub2RlID0g
bmV3IChHTE9CQUxfREFUQSkgUmVnRXhwTm9kZShHTE9CQUxfREFUQSwgKnBhdHRlcm4sICpmbGFn
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXpl
ID0gcGF0dGVybi0+c2l6ZSgpICsgMjsgLy8gKyAyIGZvciB0aGUgdHdvIC8ncwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfRVhDRVBUSU9OX0xPQ0FUSU9O
KG5vZGUsIEAxLmZpcnN0X2NvbHVtbiwgQDEuZmlyc3RfY29sdW1uICsgc2l6ZSwgQDEuZmlyc3Rf
Y29sdW1uICsgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkID0gY3JlYXRlTm9kZUluZm88RXhwcmVzc2lvbk5vZGUqPihub2RlLCAwLCAwKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgIHwgRElWRVFVQUwgLyog
cmVnZXhwIHdpdGggLz0gKi8gICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMZXhlciYgbCA9ICpMRVhFUjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFsLnNjYW5SZWdFeHAoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciogcGF0dGVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciogZmxhZ3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghbC5zY2FuUmVnRXhwKHBhdHRlcm4sIGZsYWdzLCAnPScpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlBQk9SVDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnRXhwTm9kZSogbm9kZSA9IG5ldyAoR0xP
QkFMX0RBVEEpIFJlZ0V4cE5vZGUoR0xPQkFMX0RBVEEsICI9IiArIGwucGF0dGVybigpLCBsLmZs
YWdzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c2l6ZSA9IGwucGF0dGVybigpLnNpemUoKSArIDI7IC8vICsgMiBmb3IgdGhlIHR3byAvJ3MKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnRXhwTm9kZSogbm9k
ZSA9IG5ldyAoR0xPQkFMX0RBVEEpIFJlZ0V4cE5vZGUoR0xPQkFMX0RBVEEsICpwYXR0ZXJuLCAq
ZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
c2l6ZSA9IHBhdHRlcm4tPnNpemUoKSArIDI7IC8vICsgMiBmb3IgdGhlIHR3byAvJ3MKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0VYQ0VQVElPTl9MT0NB
VElPTihub2RlLCBAMS5maXJzdF9jb2x1bW4sIEAxLmZpcnN0X2NvbHVtbiArIHNpemUsIEAxLmZp
cnN0X2NvbHVtbiArIHNpemUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkJCA9IGNyZWF0ZU5vZGVJbmZvPEV4cHJlc3Npb25Ob2RlKj4obm9kZSwgMCwgMCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTI0MSw4ICsx
MjQ1LDggQEAgTGl0ZXJhbF9Ob05vZGU6CiAgIHwgRkFMU0VUT0tFTgogICB8IE5VTUJFUiB7IH0K
ICAgfCBTVFJJTkcgeyB9Ci0gIHwgJy8nIC8qIHJlZ2V4cCAqLyB7IExleGVyJiBsID0gKkxFWEVS
OyBpZiAoIWwuc2NhblJlZ0V4cCgpKSBZWUFCT1JUOyB9Ci0gIHwgRElWRVFVQUwgLyogcmVnZXhw
IHdpdGggLz0gKi8geyBMZXhlciYgbCA9ICpMRVhFUjsgaWYgKCFsLnNjYW5SZWdFeHAoKSkgWVlB
Qk9SVDsgfQorICB8ICcvJyAvKiByZWdleHAgKi8geyBpZiAoIUxFWEVSLT5za2lwUmVnRXhwKCkp
IFlZQUJPUlQ7IH0KKyAgfCBESVZFUVVBTCAvKiByZWdleHAgd2l0aCAvPSAqLyB7IGlmICghTEVY
RVItPnNraXBSZWdFeHAoKSkgWVlBQk9SVDsgfQogOwogCiBQcm9wZXJ0eV9Ob05vZGU6CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHJldmlzaW9uIDQ3MjEwKQorKysgSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA4LDQ1ICs5MDgsMTA3IEBA
IHJldHVybkVycm9yOgogICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBMZXhlcjo6c2NhblJlZ0V4
cCgpCitib29sIExleGVyOjpzY2FuUmVnRXhwKGNvbnN0IElkZW50aWZpZXIqJiBwYXR0ZXJuLCBj
b25zdCBJZGVudGlmaWVyKiYgZmxhZ3MsIFVDaGFyIHBhdHRlcm5QcmVmaXgpCiB7CiAgICAgQVNT
RVJUKG1fYnVmZmVyMTYuaXNFbXB0eSgpKTsKIAogICAgIGJvb2wgbGFzdFdhc0VzY2FwZSA9IGZh
bHNlOwogICAgIGJvb2wgaW5CcmFja2V0cyA9IGZhbHNlOwogCisgICAgaWYgKHBhdHRlcm5QcmVm
aXgpIHsKKyAgICAgICAgQVNTRVJUKCFpc0xpbmVUZXJtaW5hdG9yKHBhdHRlcm5QcmVmaXgpKTsK
KyAgICAgICAgQVNTRVJUKHBhdHRlcm5QcmVmaXggIT0gJy8nKTsKKyAgICAgICAgQVNTRVJUKHBh
dHRlcm5QcmVmaXggIT0gJ1snKTsKKyAgICAgICAgcmVjb3JkMTYocGF0dGVyblByZWZpeCk7Cisg
ICAgfQorCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3Io
bV9jdXJyZW50KSB8fCBtX2N1cnJlbnQgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmIChtX2N1cnJlbnQgIT0gJy8nIHx8IGxhc3RXYXNFc2NhcGUgfHwgaW5CcmFj
a2V0cykgewotICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiAnWycgYW5kICddJwotICAgICAg
ICAgICAgaWYgKCFsYXN0V2FzRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY3VycmVu
dCA9PSAnWycgJiYgIWluQnJhY2tldHMpCi0gICAgICAgICAgICAgICAgICAgIGluQnJhY2tldHMg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ10nICYmIGluQnJhY2tl
dHMpCi0gICAgICAgICAgICAgICAgICAgIGluQnJhY2tldHMgPSBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJlY29yZDE2KG1fY3VycmVudCk7Ci0gICAgICAgICAgICBsYXN0V2Fz
RXNjYXBlID0gIWxhc3RXYXNFc2NhcGUgJiYgbV9jdXJyZW50ID09ICdcXCc7Ci0gICAgICAgIH0g
ZWxzZSB7IC8vIGVuZCBvZiByZWdleHAKLSAgICAgICAgICAgIG1fcGF0dGVybiA9IFVTdHJpbmco
bV9idWZmZXIxNik7CisgICAgICAgIGludCBjdXJyZW50ID0gbV9jdXJyZW50OworCisgICAgICAg
IGlmIChpc0xpbmVUZXJtaW5hdG9yKGN1cnJlbnQpIHx8IGN1cnJlbnQgPT0gLTEpIHsKICAgICAg
ICAgICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwotICAgICAgICAgICAgc2hpZnQxKCk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorCiAg
ICAgICAgIHNoaWZ0MSgpOworCisgICAgICAgIGlmIChjdXJyZW50ID09ICcvJyAmJiAhbGFzdFdh
c0VzY2FwZSAmJiAhaW5CcmFja2V0cykKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJl
Y29yZDE2KGN1cnJlbnQpOworCisgICAgICAgIGlmIChsYXN0V2FzRXNjYXBlKSB7CisgICAgICAg
ICAgICBsYXN0V2FzRXNjYXBlID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAoY3VycmVudCkgeworICAgICAgICBjYXNlICdbJzoKKyAg
ICAgICAgICAgIGluQnJhY2tldHMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgJ10nOgorICAgICAgICAgICAgaW5CcmFja2V0cyA9IGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgIGxhc3RXYXNFc2NhcGUgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBwYXR0ZXJu
ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCksIG1fYnVmZmVyMTYuc2l6ZSgpKTsK
KyAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKKwogICAgIHdoaWxlIChpc0lkZW50UGFydChtX2N1
cnJlbnQpKSB7CiAgICAgICAgIHJlY29yZDE2KG1fY3VycmVudCk7CiAgICAgICAgIHNoaWZ0MSgp
OwogICAgIH0KLSAgICBtX2ZsYWdzID0gVVN0cmluZyhtX2J1ZmZlcjE2KTsKKworICAgIGZsYWdz
ID0gbWFrZUlkZW50aWZpZXIobV9idWZmZXIxNi5kYXRhKCksIG1fYnVmZmVyMTYuc2l6ZSgpKTsK
ICAgICBtX2J1ZmZlcjE2LnJlc2l6ZSgwKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IExleGVyOjpza2lwUmVnRXhwKCkKK3sKKyAgICBib29sIGxhc3RXYXNFc2NhcGUgPSBmYWxzZTsK
KyAgICBib29sIGluQnJhY2tldHMgPSBmYWxzZTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIGludCBjdXJyZW50ID0gbV9jdXJyZW50OworCisgICAgICAgIGlmIChpc0xpbmVUZXJtaW5h
dG9yKGN1cnJlbnQpIHx8IGN1cnJlbnQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgc2hpZnQxKCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gJy8nICYmICFs
YXN0V2FzRXNjYXBlICYmICFpbkJyYWNrZXRzKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgaWYgKGxhc3RXYXNFc2NhcGUpIHsKKyAgICAgICAgICAgIGxhc3RXYXNFc2NhcGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChj
dXJyZW50KSB7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgaW5CcmFja2V0cyA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICBp
bkJyYWNrZXRzID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXFwn
OgorICAgICAgICAgICAgbGFzdFdhc0VzY2FwZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlIChpc0lkZW50UGFydChtX2N1cnJlbnQpKQor
ICAgICAgICBzaGlmdDEoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIExleGVyOjpj
bGVhcigpCiB7CiAgICAgbV9pZGVudGlmaWVycy5jbGVhcigpOwpAQCAtOTYxLDkgKzEwMjMsNiBA
QCB2b2lkIExleGVyOjpjbGVhcigpCiAgICAgbV9idWZmZXIxNi5zd2FwKG5ld0J1ZmZlcjE2KTsK
IAogICAgIG1faXNSZXBhcnNpbmcgPSBmYWxzZTsKLQotICAgIG1fcGF0dGVybiA9IFVTdHJpbmco
KTsKLSAgICBtX2ZsYWdzID0gVVN0cmluZygpOwogfQogCiBTb3VyY2VDb2RlIExleGVyOjpzb3Vy
Y2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0xleGVyLmgJKHJldmlzaW9uIDQ3MjEwKQorKysgSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0xleGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVt
YmVyOyB9CiAgICAgICAgIGJvb2wgcHJldlRlcm1pbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3Rl
cm1pbmF0b3I7IH0KICAgICAgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlKGludCBvcGVuQnJhY2Us
IGludCBjbG9zZUJyYWNlLCBpbnQgZmlyc3RMaW5lKTsKLSAgICAgICAgYm9vbCBzY2FuUmVnRXhw
KCk7Ci0gICAgICAgIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3Bh
dHRlcm47IH0KLSAgICAgICAgY29uc3QgVVN0cmluZyYgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X2ZsYWdzOyB9CisgICAgICAgIGJvb2wgc2NhblJlZ0V4cChjb25zdCBJZGVudGlmaWVyKiYgcGF0
dGVybiwgY29uc3QgSWRlbnRpZmllciomIGZsYWdzLCBVQ2hhciBwcmVmaXggPSAwKTsKKyAgICAg
ICAgYm9vbCBza2lwUmVnRXhwKCk7CiAKICAgICAgICAgLy8gRnVuY3Rpb25zIGZvciB1c2UgYWZ0
ZXIgcGFyc2luZy4KICAgICAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJy
b3I7IH0KQEAgLTExMiw5ICsxMTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIAotICAgICAgICBVU3RyaW5nIG1fcGF0dGVybjsKLSAg
ICAgICAgVVN0cmluZyBtX2ZsYWdzOwotCiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSBtX2tleXdv
cmRUYWJsZTsKIAogICAgICAgICBWZWN0b3I8VUNoYXI+IG1fY29kZVdpdGhvdXRCT01zOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCShyZXZpc2lvbiA0NzIx
MCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg5LDcgKzg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAot
ICAgIGlubGluZSBSZWdFeHBOb2RlOjpSZWdFeHBOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYgZmxhZ3MpCisgICAgaW5s
aW5lIFJlZ0V4cE5vZGU6OlJlZ0V4cE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25z
dCBJZGVudGlmaWVyJiBwYXR0ZXJuLCBjb25zdCBJZGVudGlmaWVyJiBmbGFncykKICAgICAgICAg
OiBFeHByZXNzaW9uTm9kZShnbG9iYWxEYXRhKQogICAgICAgICAsIG1fcGF0dGVybihwYXR0ZXJu
KQogICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJ
KHJldmlzaW9uIDQ3MjEwKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIFJlZ2lzdGVySUQqIFN0cmluZ05vZGU6OmVt
aXRCeXRlY29kZShCeXQKIAogUmVnaXN0ZXJJRCogUmVnRXhwTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKLSAgICBSZWZQ
dHI8UmVnRXhwPiByZWdFeHAgPSBSZWdFeHA6OmNyZWF0ZShnZW5lcmF0b3IuZ2xvYmFsRGF0YSgp
LCBtX3BhdHRlcm4sIG1fZmxhZ3MpOworICAgIFJlZlB0cjxSZWdFeHA+IHJlZ0V4cCA9IFJlZ0V4
cDo6Y3JlYXRlKGdlbmVyYXRvci5nbG9iYWxEYXRhKCksIG1fcGF0dGVybi51c3RyaW5nKCksIG1f
ZmxhZ3MudXN0cmluZygpKTsKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBTeW50YXhFcnJvciwgKCJJbnZhbGlkIHJl
Z3VsYXIgZXhwcmVzc2lvbjogIiArIFVTdHJpbmcocmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpLlVU
RjhTdHJpbmcoKS5jX3N0cigpKTsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVz
dWx0KCkpCkBAIC0yMTU2LDYgKzIxNTYsMTEgQEAgSWRlbnRpZmllciogRnVuY3Rpb25Cb2R5Tm9k
ZTo6Y29weVBhcmFtZQogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCitKU0Z1bmN0aW9uKiBG
dW5jdGlvbkJvZHlOb2RlOjptYWtlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW4pCit7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVjLCBtX2lk
ZW50LCB0aGlzLCBzY29wZUNoYWluKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmNEZWNsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
UmVnaXN0ZXJJRCogRnVuY0RlY2xOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJl
dmlzaW9uIDQ3MjEwKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1NywxMyArMzU3LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
UmVnRXhwTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSwgcHVibGljIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlZ0V4cE5vZGUoSlNHbG9iYWxEYXRh
KiwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgY29uc3QgVVN0cmluZyYgZmxhZ3MpOworICAgICAg
ICBSZWdFeHBOb2RlKEpTR2xvYmFsRGF0YSosIGNvbnN0IElkZW50aWZpZXImIHBhdHRlcm4sIGNv
bnN0IElkZW50aWZpZXImIGZsYWdzKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKTsKIAotICAgICAgICBVU3RyaW5nIG1fcGF0dGVybjsKLSAgICAgICAgVVN0cmluZyBtX2Zs
YWdzOworICAgICAgICBJZGVudGlmaWVyIG1fcGF0dGVybjsKKyAgICAgICAgSWRlbnRpZmllciBt
X2ZsYWdzOwogICAgIH07CiAKICAgICBjbGFzcyBUaGlzTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9u
Tm9kZSB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCShyZXZpc2lvbiA0
NzIxMCkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM0LDIwICsxMzQsMjAgQEAgdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVj
U3RhdGUqIGV4ZQogICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2Zp
bGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIo
JmV4ZWMtPmdsb2JhbERhdGEoKSwgSlNWYWx1ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51
bWJlciksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOwogfQog
Ci1DYWxsSWRlbnRpZmllciBQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBVU3RyaW5nJiBkZWZhdWx0
U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCitDYWxsSWRlbnRpZmllciBQcm9maWxl
cjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVl
IGZ1bmN0aW9uVmFsdWUsIGNvbnN0IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkwsIGludCBkZWZh
dWx0TGluZU51bWJlcikKIHsKLSAgICBpZiAoIWZ1bmN0aW9uKQorICAgIGlmICghZnVuY3Rpb25W
YWx1ZSkKICAgICAgICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKEdsb2JhbENvZGVFeGVjdXRpb24s
IGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1bHRMaW5lTnVtYmVyKTsKLSAgICBpZiAoIWZ1bmN0aW9u
LmlzT2JqZWN0KCkpCisgICAgaWYgKCFmdW5jdGlvblZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBDYWxsSWRlbnRpZmllcigiKHVua25vd24pIiwgZGVmYXVsdFNvdXJjZVVSTCwgZGVm
YXVsdExpbmVOdW1iZXIpOwotICAgIGlmIChhc09iamVjdChmdW5jdGlvbiktPmluaGVyaXRzKCZK
U0Z1bmN0aW9uOjppbmZvKSkgewotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jID0gYXNGdW5jdGlv
bihmdW5jdGlvbik7Ci0gICAgICAgIGlmICghZnVuYy0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVDYWxsSWRlbnRpZmllckZyb21GdW5jdGlvbkltcChnbG9iYWxE
YXRhLCBmdW5jKTsKKyAgICBpZiAoYXNPYmplY3QoZnVuY3Rpb25WYWx1ZSktPmluaGVyaXRzKCZK
U0Z1bmN0aW9uOjppbmZvKSkgeworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVu
Y3Rpb24oZnVuY3Rpb25WYWx1ZSk7CisgICAgICAgIGlmICghZnVuY3Rpb24tPmJvZHkoKS0+aXNI
b3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVDYWxsSWRlbnRpZmllckZy
b21GdW5jdGlvbkltcChnbG9iYWxEYXRhLCBmdW5jdGlvbik7CiAgICAgfQotICAgIGlmIChhc09i
amVjdChmdW5jdGlvbiktPmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKSkKLSAgICAg
ICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKHN0YXRpY19jYXN0PEludGVybmFsRnVuY3Rpb24qPihh
c09iamVjdChmdW5jdGlvbikpLT5uYW1lKGdsb2JhbERhdGEpLCBkZWZhdWx0U291cmNlVVJMLCBk
ZWZhdWx0TGluZU51bWJlcik7Ci0gICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKCIoIiArIGFzT2Jq
ZWN0KGZ1bmN0aW9uKS0+Y2xhc3NOYW1lKCkgKyAiIG9iamVjdCkiLCBkZWZhdWx0U291cmNlVVJM
LCBkZWZhdWx0TGluZU51bWJlcik7CisgICAgaWYgKGFzT2JqZWN0KGZ1bmN0aW9uVmFsdWUpLT5p
bmhlcml0cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpCisgICAgICAgIHJldHVybiBDYWxsSWRl
bnRpZmllcihzdGF0aWNfY2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oYXNPYmplY3QoZnVuY3Rpb25W
YWx1ZSkpLT5uYW1lKGdsb2JhbERhdGEpLCBkZWZhdWx0U291cmNlVVJMLCBkZWZhdWx0TGluZU51
bWJlcik7CisgICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKCIoIiArIGFzT2JqZWN0KGZ1bmN0aW9u
VmFsdWUpLT5jbGFzc05hbWUoKSArICIgb2JqZWN0KSIsIGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1
bHRMaW5lTnVtYmVyKTsKIH0KIAogQ2FsbElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXJG
cm9tRnVuY3Rpb25JbXAoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU0Z1bmN0aW9uKiBmdW5j
dGlvbikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5
cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg2LDEwICs4NiwxMSBAQCBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25Qcm90b0Z1bmNUCiB7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc09iamVjdCgm
SlNGdW5jdGlvbjo6aW5mbykpIHsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1
bmN0aW9uKHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlmICghZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9u
KCkpIHsKLSAgICAgICAgICAgIFVTdHJpbmcgZnVuY3Rpb25Cb2R5ID0gZnVuY3Rpb24tPmJvZHko
KS0+dG9Tb3VyY2VTdHJpbmcoKTsKLSAgICAgICAgICAgIGluc2VydFNlbWljb2xvbklmTmVlZGVk
KGZ1bmN0aW9uQm9keSk7Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0
aW9uICIgKyBmdW5jdGlvbi0+bmFtZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKSArICIoIiArIGZ1bmN0
aW9uLT5ib2R5KCktPnBhcmFtU3RyaW5nKCkgKyAiKSAiICsgZnVuY3Rpb25Cb2R5KTsKKyAgICAg
ICAgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSA9IGZ1bmN0aW9uLT5ib2R5KCk7CisgICAgICAgIGlm
ICghYm9keS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVVN0cmluZyBib2R5U291
cmNlU3RyaW5nID0gYm9keS0+dG9Tb3VyY2VTdHJpbmcoKTsKKyAgICAgICAgICAgIGluc2VydFNl
bWljb2xvbklmTmVlZGVkKGJvZHlTb3VyY2VTdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKGV4ZWMsICJmdW5jdGlvbiAiICsgZnVuY3Rpb24tPm5hbWUoJmV4ZWMtPmdsb2JhbERh
dGEoKSkgKyAiKCIgKyBib2R5LT5wYXJhbVN0cmluZygpICsgIikgIiArIGJvZHlTb3VyY2VTdHJp
bmcpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDQ3MjEwKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDI2IEBAIEFTU0VSVF9DTEFT
U19GSVRTX0lOX0NFTEwoSlNGdW5jdGlvbik7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0Z1bmN0aW9u
OjppbmZvID0geyAiRnVuY3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbywgMCwgMCB9Owog
CitpbmxpbmUgYm9vbCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYm9keSAmJiBtX2JvZHktPmlzSG9zdEZ1bmN0aW9uKCk7Cit9CisKK2Jvb2wgSlNG
dW5jdGlvbjo6aXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSBjb25zdAoreworICAgIHJldHVybiBp
c0hvc3RGdW5jdGlvbigpOworfQorCitKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHN0cnVjdHVyZSkKK3sKKyAgICBjbGVh
clNjb3BlQ2hhaW4oKTsKK30KKwogSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgOiBCYXNlKCZleGVjLT5n
bG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgbmFtZSkKICNpZiBFTkFCTEUoSklUKQogICAgICwgbV9i
b2R5KEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZU5hdGl2ZVRodW5rKCZleGVjLT5nbG9iYWxEYXRh
KCkpKQotI2Vsc2UKLSAgICAsIG1fYm9keSgwKQogI2VuZGlmCiB7CiAjaWYgRU5BQkxFKEpJVCkK
QEAgLTYzLDcgKzc3LDcgQEAgSlNGdW5jdGlvbjo6SlNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IAogI2VuZGlmCiB9CiAKLUpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBuYW1lLCBGdW5jdGlvbkJvZHlOb2RlKiBib2R5LCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBib2R5LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiAgICAgOiBCYXNlKCZleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSwgbmFtZSkKICAgICAsIG1fYm9keShib2R5KQogewpAQCAtMjEyLDQgKzIyNiw5IEBA
IEpTT2JqZWN0KiBKU0Z1bmN0aW9uOjpjb25zdHJ1Y3QoRXhlY1N0YXQKICAgICByZXR1cm4gYXNP
YmplY3QocmVzdWx0KTsKIH0KIAordm9pZCBKU0Z1bmN0aW9uOjpzZXRCb2R5KFBhc3NSZWZQdHI8
RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSkKK3sKKyAgICBtX2JvZHkgPSBib2R5OworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZp
c2lvbiA0NzIxMCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsNiBAQAogI2RlZmluZSBKU0Z1bmN0aW9uX2gKIAogI2lu
Y2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJOb2Rlcy5oIgotI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MywyMCArMzksMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdHlwZWRlZiBJbnRlcm5hbEZ1bmN0aW9uIEJhc2U7CiAK
LSAgICAgICAgSlNGdW5jdGlvbihQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQotICAg
ICAgICAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKHN0cnVjdHVyZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgY2xlYXJTY29wZUNoYWluKCk7Ci0gICAgICAgIH0KLQogICAgIHB1YmxpYzoKICAgICAg
ICAgSlNGdW5jdGlvbihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIGludCBsZW5n
dGgsIGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7Ci0gICAgICAgIEpTRnVuY3Rp
b24oRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEZ1bmN0aW9uQm9keU5vZGUqLCBTY29w
ZUNoYWluTm9kZSopOwotICAgICAgICB+SlNGdW5jdGlvbigpOwotCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFBy
b3BlcnR5U2xvdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBKU0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBQYXNzUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+LCBTY29wZUNoYWlu
Tm9kZSopOworICAgICAgICB2aXJ0dWFsIH5KU0Z1bmN0aW9uKCk7CiAKICAgICAgICAgSlNPYmpl
Y3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0Jik7CiAgICAgICAgIEpTVmFs
dWUgY2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwpA
QCAtNjQsMTIgKzUwLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0U2NvcGUo
Y29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbikgeyBzZXRTY29wZUNoYWluKHNjb3BlQ2hhaW4p
OyB9CiAgICAgICAgIFNjb3BlQ2hhaW4mIHNjb3BlKCkgeyByZXR1cm4gc2NvcGVDaGFpbigpOyB9
CiAKLSAgICAgICAgdm9pZCBzZXRCb2R5KEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkpIHsgbV9ib2R5
ID0gYm9keTsgfQotICAgICAgICB2b2lkIHNldEJvZHkoUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlO
b2RlPiBib2R5KSB7IG1fYm9keSA9IGJvZHk7IH0KKyAgICAgICAgdm9pZCBzZXRCb2R5KFBhc3NS
ZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4pOwogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBib2R5
KCkgY29uc3QgeyByZXR1cm4gbV9ib2R5LmdldCgpOyB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKLQogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFU
QSBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlwZSkgCkBAIC03NywxMSArNjAs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIEltcGxlbWVudHNIYXNJbnN0YW5jZSkp
OyAKICAgICAgICAgfQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgYm9vbCBpc0hvc3RGdW5j
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYm9keSAmJiBtX2JvZHktPmlzSG9zdEZ1bmN0aW9uKCk7
IH0KLSNlbHNlCi0gICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotI2VuZGlmCiAgICAgICAgIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PE5hdGl2ZUZ1
bmN0aW9uKj4obV9kYXRhKTsKQEAgLTkxLDYgKzY5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAKICAgICBwcml2
YXRlOgorICAgICAgICBKU0Z1bmN0aW9uKFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CisKKyAgICAg
ICAgYm9vbCBpc0hvc3RGdW5jdGlvbigpIGNvbnN0OworICAgICAgICBib29sIGlzSG9zdEZ1bmN0
aW9uTm9uSW5saW5lKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCBi
b29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsK
KwogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KIAogICAgICAgICBzdGF0aWMgSlNWYWx1ZSBhcmd1bWVudHNHZXR0ZXIo
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwpAQCAt
MTAwLDIyICs4OSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9u
Qm9keU5vZGU+IG1fYm9keTsKICAgICAgICAgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbigpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb24oKSk7CisgICAgICAgICAg
ICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lKCkpOwogICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFNjb3BlQ2hhaW4qPihtX2RhdGEpOwogICAgICAgICB9CiAgICAg
ICAgIHZvaWQgY2xlYXJTY29wZUNoYWluKCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KCFpc0hvc3RGdW5jdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25O
b25JbmxpbmUoKSk7CiAgICAgICAgICAgICBuZXcgKG1fZGF0YSkgU2NvcGVDaGFpbihOb1Njb3Bl
Q2hhaW4oKSk7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBzZXRTY29wZUNoYWluKFNjb3BlQ2hh
aW5Ob2RlKiBzYykKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFpc0hvc3RGdW5jdGlv
bigpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7CiAg
ICAgICAgICAgICBuZXcgKG1fZGF0YSkgU2NvcGVDaGFpbihzYyk7CiAgICAgICAgIH0KICAgICAg
ICAgdm9pZCBzZXRTY29wZUNoYWluKGNvbnN0IFNjb3BlQ2hhaW4mIHNjKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWlzSG9zdEZ1bmN0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJU
KCFpc0hvc3RGdW5jdGlvbk5vbklubGluZSgpKTsKICAgICAgICAgICAgICpyZWludGVycHJldF9j
YXN0PFNjb3BlQ2hhaW4qPihtX2RhdGEpID0gc2M7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBz
ZXROYXRpdmVGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jKQpAQCAtMTMzLDExICsxMjIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTRnVuY3Rpb24q
Pihhc09iamVjdCh2YWx1ZSkpOwogICAgIH0KIAotICAgIGlubGluZSBKU0Z1bmN0aW9uKiBGdW5j
dGlvbkJvZHlOb2RlOjptYWtlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3Bl
Q2hhaW4pCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMs
IG1faWRlbnQsIHRoaXMsIHNjb3BlQ2hhaW4pOwotICAgIH0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBKU0Z1bmN0aW9uX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5U2xvdC5jcHAJKHJldmlzaW9uIDQ3MjEwKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eVNsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAKICNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNs
dWRlICJKU09iamVjdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzksNyArMzgsNyBAQCBK
U1ZhbHVlIFByb3BlcnR5U2xvdDo6ZnVuY3Rpb25HZXR0ZXIoRXhlCiAgICAgICAgIHJldHVybiBj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlYywgc2xvdC5tX2RhdGEuZ2V0dGVyRnVuYywgc2xv
dC5zbG90QmFzZSgpLCBleGVjLT5lbXB0eUxpc3QoKSk7CiAgICAgQVNTRVJUKGNhbGxUeXBlID09
IENhbGxUeXBlSlMpOwogICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBiZSBkb25lIG1vcmUgZWZmaWNp
ZW50bHkgdXNpbmcgdGhlIGNhbGxEYXRhPwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0Z1bmN0
aW9uKj4oc2xvdC5tX2RhdGEuZ2V0dGVyRnVuYyktPmNhbGwoZXhlYywgc2xvdC5zbG90QmFzZSgp
LCBleGVjLT5lbXB0eUxpc3QoKSk7CisgICAgcmV0dXJuIGFzRnVuY3Rpb24oc2xvdC5tX2RhdGEu
Z2V0dGVyRnVuYyktPmNhbGwoZXhlYywgc2xvdC5zbG90QmFzZSgpLCBleGVjLT5lbXB0eUxpc3Qo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1Nl
Z21lbnRlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9TZWdtZW50
ZWRWZWN0b3IuaAkocmV2aXNpb24gNDcyMTApCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVu
dGVkVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KIAogICAgICAgICBUJiBhdChzaXplX3QgaW5kZXgpCiAgICAgICAgIHsKSW5kZXg6IFdlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0
NzIyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMDktMDgtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEphdmFTY3JpcHRDb3JlIHR3
ZWFrcyB0byBnZXQgcmVhZHkgZm9yIHRoZSBwYXJzZXIgYXJlbmEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjQzCisKKyAgICAgICAgKiBGb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oOiBSZW1vdmVkLgorCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xh
enlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTT3B0aW9uQ29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1hN
TEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lm1tOgorICAgICAgICBVcGRhdGVkIGluY2x1ZGVzLgorCisgICAgICAgICogaW5zcGVj
dG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2Ny
aXB0RGVidWdTZXJ2ZXI6OnNvdXJjZVBhcnNlZCk6CisgICAgICAgIENoYW5nZSB0byBub3QgYXNz
ZXJ0IGlmIHRoaXMgaXMgY2FsbGVkIHdpdGggbm8gbGlzdGVuZXJzLgorICAgICAgICBJIGRvbid0
IHRoaW5rIHRoaXMgd2FzIGd1YXJhbnRlZWQgYmVmb3JlLCBhbmQgd2Ugbm93IHVzZQorICAgICAg
ICB0aGlzIGNvZGUgcGF0aCB3aGVuIHJlY29tcGlsaW5nLiBTbGlnaHRseSBsZXNzIGVmZmljaWVu
dCwKKyAgICAgICAgYnV0IHRoaXMgaXMgYSBvbmUtdGltZSBjb3N0IHdoZW4gdHVybmluZyBvbiB0
aGUgZGVidWdnZXIuCisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0RGVidWdTZXJ2ZXI6OnJl
Y29tcGlsZUFsbEpTRnVuY3Rpb25zKToKKyAgICAgICAgQ2hhbmdlIHRvIGNhbGwgRGVidWdnZXI6
OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zLgorCiAyMDA5LTA4LTEzICBHZW9yZ2UgU3RhaWtvcyAg
PGdlb3JnZS5zdGFpa29zQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSdWJiZXJzdGFtcGVk
IGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1l
L0NvbGxlY3RvckhlYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9Db2xsZWN0b3JIZWFwSXRlcmF0b3IuaAkocmV2aXNpb24gNDcyMTAp
CisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIFdlYkNvcmVfRldE
X0NvbGxlY3RvckhlYXBJdGVyYXRvcl9oCi0jZGVmaW5lIFdlYkNvcmVfRldEX0NvbGxlY3Rvckhl
YXBJdGVyYXRvcl9oCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ29sbGVjdG9ySGVhcEl0ZXJh
dG9yLmg+Ci0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDQ3MjEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiSlNIVE1MQXVkaW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAJKHJldmlzaW9uIDQ3MjEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUmFuZ2VFeGNl
cHRpb24uaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiWE1MSHR0
cFJlcXVlc3RFeGNlcHRpb24uaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDxydW50aW1lL1Byb3RvdHlwZUZ1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9u
IDQ3MjEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiIC8vIEZvciBET01D
b25zdHJ1Y3RvcldpdGhEb2N1bWVudAogI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDQ3
MjEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4K
ICNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm90b3R5
cGVGdW5jdGlvbi5oPgogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxl
bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJ
bnB1dEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXN0b3J5LmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9KU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Qcm90b3R5cGVGdW5jdGlvbi5oPgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdl
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFn
ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNDcyMTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDQ3MjEwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NiArMjMsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNM
b2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDcyMTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvUHJvdG90eXBlRnVuY3Rpb24uaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDQ3MjEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWwuaCIK
ICNpbmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09w
dGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
T3B0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNPcHRpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDcgQEAKICNpbmNsdWRlICJKU0hUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNDcyMTApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSlNXZWJTb2NrZXQuaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCisj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDcy
MTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJX
ZWJTb2NrZXQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3IuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA0NzIxMCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1
ZGUgIkpTV29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCisjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA0
NzIxMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkpTWE1MSHR0
cFJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVk
ZSAiWE1MSHR0cFJlcXVlc3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5tbQkocmV2
aXNpb24gNDcyMTApCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxOSArMjksMTggQEAKICNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdF
KQogCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiU3RyaW5nU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiam5pX3J1bnRpbWUuaCIKICNpbmNsdWRlICJqbmlfdXRpbGl0eS5o
IgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJydW50aW1lX29iamVj
dC5oIgogI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0Nh
bGxGcmFtZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlv
bi5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8cGFyc2VyL1NvdXJj
ZVByb3ZpZGVyLmg+CiAKIHVzaW5nIFdlYkNvcmU6OkZyYW1lOwogCkluZGV4OiBXZWJDb3JlL2lu
c3BlY3Rvci9KYXZhU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aW5zcGVjdG9yL0phdmFTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDQ3MjEwKQorKysg
V2ViQ29yZS9pbnNwZWN0b3IvSmF2YVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJXaWRn
ZXQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8cnVudGltZS9D
b2xsZWN0b3JIZWFwSXRlcmF0b3IuaD4KICNpbmNsdWRlIDxkZWJ1Z2dlci9EZWJ1Z2dlckNhbGxG
cmFtZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8cGFyc2VyL1Bh
cnNlci5oPgpAQCAtMjk5LDggKzI5OCw2IEBAIHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpz
b3VyY2VQYXJzZWQKIAogICAgIG1fY2FsbGluZ0xpc3RlbmVycyA9IHRydWU7CiAKLSAgICBBU1NF
UlQoaGFzTGlzdGVuZXJzKCkpOwotCiAgICAgYm9vbCBpc0Vycm9yID0gZXJyb3JMaW5lICE9IC0x
OwogCiAgICAgaWYgKGhhc0dsb2JhbExpc3RlbmVycygpKSB7CkBAIC01NTUsNjAgKzU1Miw3IEBA
IHZvaWQgSmF2YVNjcmlwdERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGwKIHZvaWQgSmF2YVNjcmlw
dERlYnVnU2VydmVyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhUaW1lcjxKYXZhU2NyaXB0RGVi
dWdTZXJ2ZXI+KikKIHsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwot
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKTsKLQotICAgIC8vIElmIEphdmFTY3JpcHQgaXMgcnVubmluZywgaXQncyBub3Qgc2Fm
ZSB0byByZWNvbXBpbGUsIHNpbmNlIHdlJ2xsIGVuZAotICAgIC8vIHVwIHRocm93aW5nIGF3YXkg
Y29kZSB0aGF0IGlzIGxpdmUgb24gdGhlIHN0YWNrLgotICAgIEFTU0VSVCghZ2xvYmFsRGF0YS0+
ZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGdsb2JhbERhdGEtPmR5bmFtaWNHbG9iYWxP
YmplY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxQcm90ZWN0ZWRQdHI8SlNGdW5j
dGlvbj4gPiBmdW5jdGlvbnM7Ci0gICAgSGVhcDo6aXRlcmF0b3IgaGVhcEVuZCA9IGdsb2JhbERh
dGEtPmhlYXAucHJpbWFyeUhlYXBFbmQoKTsKLSAgICBmb3IgKEhlYXA6Oml0ZXJhdG9yIGl0ID0g
Z2xvYmFsRGF0YS0+aGVhcC5wcmltYXJ5SGVhcEJlZ2luKCk7IGl0ICE9IGhlYXBFbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKCgqaXQpLT5pc09iamVjdCgmSlNGdW5jdGlvbjo6aW5mbykpIHsKLSAg
ICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8SlNGdW5jdGlvbio+
KCppdCk7Ci0gICAgICAgICAgICBpZiAoIWZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQotICAg
ICAgICAgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoZnVuY3Rpb24pOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiwgUmVmUHRy
PEZ1bmN0aW9uQm9keU5vZGU+ID4gRnVuY3Rpb25Cb2R5TWFwOwotICAgIHR5cGVkZWYgSGFzaE1h
cDxTb3VyY2VQcm92aWRlciosIEV4ZWNTdGF0ZSo+IFNvdXJjZVByb3ZpZGVyTWFwOwotCi0gICAg
RnVuY3Rpb25Cb2R5TWFwIGZ1bmN0aW9uQm9kaWVzOwotICAgIFNvdXJjZVByb3ZpZGVyTWFwIHNv
dXJjZVByb3ZpZGVyczsKLQotICAgIHNpemVfdCBzaXplID0gZnVuY3Rpb25zLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IGZ1bmN0aW9uc1tpXTsKLQotICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBv
bGRCb2R5ID0gZnVuY3Rpb24tPmJvZHkoKTsKLSAgICAgICAgcGFpcjxGdW5jdGlvbkJvZHlNYXA6
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBmdW5jdGlvbkJvZGllcy5hZGQob2xkQm9keSwgMCk7
Ci0gICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICAgICAgZnVuY3Rpb24tPnNl
dEJvZHkocmVzdWx0LmZpcnN0LT5zZWNvbmQuZ2V0KCkpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUo
KS5nbG9iYWxPYmplY3QoKS0+SlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKLSAgICAgICAg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSA9IG9sZEJvZHktPnNvdXJjZSgpOwotCi0gICAg
ICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBuZXdCb2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2Vy
LT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLCAwLCBzb3VyY2VDb2RlKTsKLSAgICAgICAg
QVNTRVJUKG5ld0JvZHkpOwotICAgICAgICBuZXdCb2R5LT5maW5pc2hQYXJzaW5nKG9sZEJvZHkt
PmNvcHlQYXJhbWV0ZXJzKCksIG9sZEJvZHktPnBhcmFtZXRlckNvdW50KCksIG9sZEJvZHktPmlk
ZW50KCkpOwotCi0gICAgICAgIHJlc3VsdC5maXJzdC0+c2Vjb25kID0gbmV3Qm9keTsKLSAgICAg
ICAgZnVuY3Rpb24tPnNldEJvZHkobmV3Qm9keS5yZWxlYXNlKCkpOwotCi0gICAgICAgIGlmICho
YXNMaXN0ZW5lcnMoKSAmJiBmdW5jdGlvbi0+c2NvcGUoKS5nbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKSA9PSB0aGlzKQotICAgICAgICAgICAgc291cmNlUHJvdmlkZXJzLmFkZChzb3VyY2VDb2Rl
LnByb3ZpZGVyKCksIGV4ZWMpOwotICAgIH0KLQotICAgIC8vIENhbGwgc291cmNlUGFyc2VkKCkg
YWZ0ZXIgcmVwYXJzaW5nIGFsbCBmdW5jdGlvbnMgYmVjYXVzZSBpdCB3aWxsIGV4ZWN1dGUKLSAg
ICAvLyBKYXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3IuCi0gICAgU291cmNlUHJvdmlkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNvdXJjZVByb3ZpZGVycy5lbmQoKTsKLSAgICBmb3IgKFNv
dXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc291cmNlUHJvdmlkZXJzLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIHNvdXJjZVBhcnNlZCgoKml0ZXIp
LnNlY29uZCwgU291cmNlQ29kZSgoKml0ZXIpLmZpcnN0KSwgLTEsIDApOworICAgIERlYnVnZ2Vy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCkpOwogfQogCiB2b2lkIEphdmFTY3JpcHREZWJ1Z1NlcnZlcjo6ZGlkQWRkTGlzdGVuZXIoUGFn
ZSogcGFnZSkK
</data>
<flag name="review"
          id="18979"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="18990"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>