<?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>28691</bug_id>
          
          <creation_ts>2009-08-24 16:20:32 -0700</creation_ts>
          <short_desc>Do not retain ScopeNodes outside of parsing</short_desc>
          <delta_ts>2009-08-31 12:32:41 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>pfeldman</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142438</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-24 16:20:32 -0700</bug_when>
    <thetext>There is now no need for these to exist outside of parsing – their use in the runtime is replaced by Executable types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142439</commentid>
    <comment_count>1</comment_count>
      <attachid>38504</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-24 16:23:06 -0700</bug_when>
    <thetext>Created attachment 38504
The Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142442</commentid>
    <comment_count>2</comment_count>
      <attachid>38504</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-24 16:28:31 -0700</bug_when>
    <thetext>Comment on attachment 38504
The Patch

fix the formatting issue i mentioned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142448</commentid>
    <comment_count>3</comment_count>
      <attachid>38504</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-24 16:33:29 -0700</bug_when>
    <thetext>Comment on attachment 38504
The Patch

&gt; +        There is now no need for these to exist outside of parsing â their use in the runtime is replaced by Executable types.

Looks like you had an em dash in some encoding other than UTF-8.

&gt;  ScopeNodeData::ScopeNodeData(ParserArena&amp; arena, SourceElements* children, VarStack* varStack, FunctionStack* funcStack, int numConstants)
&gt; -    : m_numConstants(numConstants)
&gt; +    : m_arena(new ParserArena())

I usually don&apos;t use parentheses when there are no arguments to the constructor.

&gt; +    , m_numConstants(numConstants)
&gt;  {
&gt; -    m_arena.swap(arena);
&gt; +    m_arena-&gt;swap(arena);

The ParserArena goes out of its way to be &quot;swappable&quot; so you can just store it rather than a pointer to it. If we no longer need that behavior, we could simplify ParserArena and remove a bit of indirection.

&gt; +        static const bool scopeIsFunction = false;

This seems kind of dangerous to me. If this is different in the base class and derived class you could get the wrong answer if you asked the base class.

&gt; +            : m_arena(new ParserArena())

Same thing about parentheses.

&gt; +    StatementVector&amp; children = program-&gt;children();
&gt; +    if (children.size() != 1)
&gt; +        return 0;
&gt; +
&gt; +    StatementNode* exprStatement = children[0];

This won&apos;t compile any more. You need to merge with my recent changes.

&gt; +    Identifier* parameters = static_cast&lt;Identifier*&gt;(fastMalloc(m_parameterCount * sizeof(Identifier)));
&gt; +    WTF::VectorCopier&lt;false, Identifier&gt;::uninitializedCopy(m_parameters, m_parameters + m_parameterCount, parameters);
&gt; +    return parameters;

You need comments explaining this, but also, it seems unfortunate to use this vector-internal helper here. I&apos;d almost rather just see a loop using placement new instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142493</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-24 19:49:35 -0700</bug_when>
    <thetext>Re the ParseArena changes (pointer to, rather than wholly contained), these were ultimately not necessary as a part of this patch, and caused merge conflicts on update, so I have reverted.  Might still be worth investigating again (along with removing ParserArenaRefCounted), but I will leave this for another patch for now.

&gt; &gt; +        static const bool scopeIsFunction = false;
&gt; 
&gt; This seems kind of dangerous to me. If this is different in the base class and
&gt; derived class you could get the wrong answer if you asked the base class.

To take your concern into account I&apos;ve moved the false definition from ScopeNode to ProgramNode &amp; EvalNode, so there should be no chance of reading the value from the base by mistake (I&apos;m open to a better solution, if you have any suggestions).

&gt; &gt; +    Identifier* parameters = static_cast&lt;Identifier*&gt;(fastMalloc(m_parameterCount * sizeof(Identifier)));
&gt; &gt; +    WTF::VectorCopier&lt;false, Identifier&gt;::uninitializedCopy(m_parameters, m_parameters + m_parameterCount, parameters);
&gt; &gt; +    return parameters;
&gt; 
&gt; You need comments explaining this, but also, it seems unfortunate to use this
&gt; vector-internal helper here. I&apos;d almost rather just see a loop using placement
&gt; new instead.

I&apos;ll comment this as requested - this code is actually just being hoisted up from FunctionBodyNode, and I too don&apos;t like it.  This patch also makes what seems like an unnecessary number of copies of the array of parameters, I&apos;d like to fix this by making parameters be a separate ref counted object shared between FunctionExpressions and FunctionBodyNodes, but again I&apos;d like to leave this for another patch.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142495</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-24 19:54:20 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/bytecode/EvalCodeCache.h
Sending        JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
Sending        JavaScriptCore/bytecompiler/BytecodeGenerator.h
Sending        JavaScriptCore/debugger/Debugger.cpp
Sending        JavaScriptCore/debugger/DebuggerCallFrame.cpp
Sending        JavaScriptCore/interpreter/Interpreter.cpp
Sending        JavaScriptCore/jit/JITStubs.cpp
Sending        JavaScriptCore/parser/Nodes.cpp
Sending        JavaScriptCore/parser/Nodes.h
Sending        JavaScriptCore/parser/Parser.cpp
Sending        JavaScriptCore/parser/Parser.h
Sending        JavaScriptCore/runtime/ArrayPrototype.cpp
Sending        JavaScriptCore/runtime/Completion.cpp
Sending        JavaScriptCore/runtime/Executable.cpp
Sending        JavaScriptCore/runtime/Executable.h
Sending        JavaScriptCore/runtime/FunctionConstructor.cpp
Sending        JavaScriptCore/runtime/JSGlobalData.cpp
Sending        JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
Transmitting file data ...................
Committed revision 47738.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142677</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-25 13:10:33 -0700</bug_when>
    <thetext>This change has introduced regression in web inspector.
1. Open some page
2. Set a breakpoint in code that should execute
3. Make execution hit the breakpoint

Expected: call frame and source line are highlighted
Actual: nothing is highlighted. Continue the execution, open inspector on inspector, observe javascript error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143657</commentid>
    <comment_count>7</comment_count>
      <attachid>38816</attachid>
    <who name="Robert Agoston">Agoston.Robert</who>
    <bug_when>2009-08-31 09:04:45 -0700</bug_when>
    <thetext>Created attachment 38816
fixed typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143702</commentid>
    <comment_count>8</comment_count>
      <attachid>38816</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-31 12:32:41 -0700</bug_when>
    <thetext>Comment on attachment 38816
fixed typo

Good catch, thank you!

Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/parser/Parser.h
Transmitting file data ..
Committed revision 47902.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38504</attachid>
            <date>2009-08-24 16:23:06 -0700</date>
            <delta_ts>2009-08-24 16:33:29 -0700</delta_ts>
            <desc>The Patch</desc>
            <filename>patch.nonode.4b.txt</filename>
            <type>text/plain</type>
            <size>56105</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzMzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMDktMDgtMjQgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yODY5MQorICAgICAgICBEbyBub3QgcmV0YWluIFNjb3BlTm9kZXMgb3V0c2lk
ZSBvZiBwYXJzaW5nCisgICAgICAgIAorICAgICAgICBUaGVyZSBpcyBub3cgbm8gbmVlZCBmb3Ig
dGhlc2UgdG8gZXhpc3Qgb3V0c2lkZSBvZiBwYXJzaW5nIOKAkyB0aGVpciB1c2UgaW4gdGhlIHJ1
bnRpbWUgaXMgcmVwbGFjZWQgYnkgRXhlY3V0YWJsZSB0eXBlcy4KKworICAgICAgICAqIGJ5dGVj
b2RlL0V2YWxDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6Z2V0KToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbkV4cHJlc3Npb24pOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6bWFrZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyk6CisgICAg
ICAgIChKU0M6OmV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWUpOgorICAgICAgICAqIGRlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6
OmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnBy
aXZhdGVFeGVjdXRlKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2NvcGVOb2RlRGF0YTo6U2NvcGVOb2RlRGF0YSk6CisgICAgICAgIChKU0M6
OlByb2dyYW1Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwYXJz
ZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjphZG9wdERhdGEpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpwYXJhbWV0ZXJDb3VudCk6CisgICAgICAgICogcGFy
c2VyL1BhcnNlci5jcHA6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5oOgorICAgICAgICAoSlND
OjpQYXJzZXI6OmFyZW5hKToKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpQYXJzZXIpOgorICAgICAg
ICAoSlNDOjpQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6aXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNTb3J0KToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24u
Y3BwOgorICAgICAgICAoSlNDOjpjaGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OmV2YWx1YXRl
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpj
aGVja1N5bnRheCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6RXZhbEV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZSk6CisgICAgICAgIChKU0M6OlByb2dy
YW1FeGVjdXRhYmxlOjpnZW5lcmF0ZUpJVENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJs
ZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OnJlY29tcGlsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUds
b2JhbENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvcHlQYXJhbWV0
ZXJzKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbVN0cmluZyk6Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1
dGFibGU6OlNjcmlwdEV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxl
Ojpzb3VyY2VJRCk6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnNvdXJjZVVSTCk6
CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OmxpbmVObyk6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6Omxhc3RMaW5lKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0
YWJsZTo6dXNlc0V2YWwpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjp1c2VzQXJn
dW1lbnRzKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmVlZHNBY3RpdmF0aW9u
KToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cmVjb3JkUGFyc2UpOgorICAgICAg
ICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Ynl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpFdmFsRXhl
Y3V0YWJsZTo6aml0Q29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpieXRl
Y29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpyZXBhcnNlRXhjZXB0aW9u
SW5mbyk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpqaXRDb2RlKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6Om1ha2UpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxl
Ojppc0dlbmVyYXRlZCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6bmFtZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1ldGVyQ291bnQpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvZGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEZ1bmN0
aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsRGF0YTo6bnVtZXJpY0NvbXBhcmVGdW5jdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNF
dmFsKToKKwogMjAwOS0wOC0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAgICAgaWYgKCFldmFsRXhlY3V0YWJsZSkg
ewogICAgICAgICAgICAgICAgIGV2YWxFeGVjdXRhYmxlID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0
ZShtYWtlU291cmNlKGV2YWxTb3VyY2UpKTsKLSAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1
ZSA9IGV2YWxFeGVjdXRhYmxlLT5wYXJzZShleGVjKTsKKyAgICAgICAgICAgICAgICBleGNlcHRp
b25WYWx1ZSA9IGV2YWxFeGVjdXRhYmxlLT5jb21waWxlKGV4ZWMsIHNjb3BlQ2hhaW4pOwogICAg
ICAgICAgICAgICAgIGlmIChleGNlcHRpb25WYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNDc2NTIpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyAr
MjczLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFjay5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5j
dGlvblN0YWNrW2ldOwotICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5wdXRXaXRoQXR0cmlidXRl
cyhleGVjLCBmdW5jdGlvbi0+aWRlbnQoKSwgbmV3IChleGVjKSBKU0Z1bmN0aW9uKGV4ZWMsIGFk
b3B0UmVmKG5ldyBGdW5jdGlvbkV4ZWN1dGFibGUoZnVuY3Rpb24tPmlkZW50KCksIGZ1bmN0aW9u
KSksIHNjb3BlQ2hhaW4ubm9kZSgpKSwgRG9udERlbGV0ZSk7CisgICAgICAgICAgICBnbG9iYWxP
YmplY3QtPnB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMsIGZ1bmN0aW9uLT5pZGVudCgpLCBuZXcgKGV4
ZWMpIEpTRnVuY3Rpb24oZXhlYywgbWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSwgc2NvcGVDaGFpbi5u
b2RlKCkpLCBEb250RGVsZXRlKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsT2Jq
ZWN0LT5oYXNQcm9wZXJ0eShleGVjLCB2YXJTdGFja1tpXS5maXJzdCkpCkBAIC0zOTgsMTAgKzM5
OCw4IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmEKICAgICBtX2Nv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID0gMTsgLy8gQWxsb2NhdGUgc3BhY2UgZm9yICJ0aGlz
IgogCiAgICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9u
U3RhY2sgPSBldmFsTm9kZS0+ZnVuY3Rpb25TdGFjaygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgewotICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07Ci0gICAgICAgIG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkRlY2woYWRvcHRSZWYobmV3IEZ1bmN0aW9uRXhlY3V0YWJsZShmdW5jdGlvbi0+
aWRlbnQoKSwgZnVuY3Rpb24pKSk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uRGVjbChtYWtlRnVuY3Rpb24oZnVuY3Rpb25TdGFja1tpXSkpOwogCiAgICAgY29uc3QgRGVj
bGFyYXRpb25TdGFja3M6OlZhclN0YWNrJiB2YXJTdGFjayA9IGV2YWxOb2RlLT52YXJTdGFjaygp
OwogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcyA9IHZhclN0YWNrLnNpemUoKTsKQEAgLTEzMTgs
NyArMTMxNiw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXIKIAog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklE
KiBkc3QsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewotICAgIHVuc2lnbmVkIGluZGV4
ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChhZG9wdFJlZihuZXcgRnVuY3Rpb25FeGVj
dXRhYmxlKGZ1bmN0aW9uLT5pZGVudCgpLCBmdW5jdGlvbikpKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7
CiAKICAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZHN0LT5pbmRleCgpKTsKQEAgLTEzMzgsNyArMTMzNiw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TmV3UmUKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJlZ2lzdGVySUQqIHIwLCBGdW5jRXhwck5vZGUqIG4p
CiB7CiAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBuLT5ib2R5KCk7Ci0gICAgdW5z
aWduZWQgaW5kZXggPSBtX2NvZGVCbG9jay0+YWRkRnVuY3Rpb25FeHByKGFkb3B0UmVmKG5ldyBG
dW5jdGlvbkV4ZWN1dGFibGUoZnVuY3Rpb24tPmlkZW50KCksIGZ1bmN0aW9uKSkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRXhwcihtYWtlRnVuY3Rpb24o
ZnVuY3Rpb24pKTsKIAogICAgIGVtaXRPcGNvZGUob3BfbmV3X2Z1bmNfZXhwKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDQ3NjUyKQorKysg
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxNyw2ICs0MTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGFkZENvbnN0YW50VmFsdWUoSlNWYWx1ZSk7CiAgICAgICAgIHVuc2lnbmVkIGFkZFJl
Z0V4cChSZWdFeHAqKTsKIAorICAgICAgICBQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4g
bWFrZUZ1bmN0aW9uKEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnVuY3Rpb25FeGVjdXRhYmxlKGJvZHktPmlkZW50KCks
IGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1lbnRzKCksIGJvZHktPmNvcHlQYXJhbWV0
ZXJzKCksIGJvZHktPnBhcmFtZXRlckNvdW50KCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0
TGluZSgpKSk7CisgICAgICAgIH0KKwogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0
cnVjdGlvbnMoKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCk7IH0KICAgICAg
ICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0K
IApJbmRleDogSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gNDc2NTIp
CisrKyBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDcgKzg5LDYgQEAgdm9pZCBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMo
SgogICAgICAgICAgICAgc291cmNlUHJvdmlkZXJzLmFkZChleGVjdXRhYmxlLT5zb3VyY2UoKS5w
cm92aWRlcigpLCBleGVjKTsKICAgICB9CiAKLQogICAgIC8vIENhbGwgc291cmNlUGFyc2VkKCkg
YWZ0ZXIgcmVwYXJzaW5nIGFsbCBmdW5jdGlvbnMgYmVjYXVzZSBpdCB3aWxsIGV4ZWN1dGUKICAg
ICAvLyBKYXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3IuCiAgICAgU291cmNlUHJvdmlkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNvdXJjZVByb3ZpZGVycy5lbmQoKTsKQEAgLTEwMiw3ICsx
MDEsNyBAQCBKU1ZhbHVlIGV2YWx1YXRlSW5HbG9iYWxDYWxsRnJhbWUoY29uc3QgCiAgICAgQ2Fs
bEZyYW1lKiBnbG9iYWxDYWxsRnJhbWUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAog
ICAgIEV2YWxFeGVjdXRhYmxlIGV2YWwobWFrZVNvdXJjZShzY3JpcHQpKTsKLSAgICBKU09iamVj
dCogZXJyb3IgPSBldmFsLnBhcnNlKGdsb2JhbENhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIGVy
cm9yID0gZXZhbC5jb21waWxlKGdsb2JhbENhbGxGcmFtZSwgZ2xvYmFsQ2FsbEZyYW1lLT5zY29w
ZUNoYWluKCkpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIGVycm9yOwogCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZp
c2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2Fs
bEZyYW1lOjpldmFsdWF0ZShjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBF
dmFsRXhlY3V0YWJsZSBldmFsKG1ha2VTb3VyY2Uoc2NyaXB0KSk7Ci0gICAgSlNPYmplY3QqIGVy
cm9yID0gZXZhbC5wYXJzZShtX2NhbGxGcmFtZSk7CisgICAgSlNPYmplY3QqIGVycm9yID0gZXZh
bC5jb21waWxlKG1fY2FsbEZyYW1lLCBtX2NhbGxGcmFtZS0+c2NvcGVDaGFpbigpKTsKICAgICBp
ZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiBlcnJvcjsKIApJbmRleDogSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gNDc2NTIpCisrKyBKYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
MCw3ICs2MjAsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZwcm9ncmFtLT5i
eXRlY29kZShzY29wZUNoYWluKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZwcm9ncmFt
LT5ieXRlY29kZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwogCiAgICAgUmVnaXN0ZXIqIG9sZEVu
ZCA9IG1fcmVnaXN0ZXJGaWxlLmVuZCgpOwogICAgIFJlZ2lzdGVyKiBuZXdFbmQgPSBvbGRFbmQg
KyBjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CkBAIC02NTIsNyArNjUy
LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlYwogCiAgICAgICAg
IG1fcmVlbnRyeURlcHRoKys7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgcmVzdWx0ID0gcHJv
Z3JhbS0+aml0Q29kZShzY29wZUNoYWluKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2Fs
bEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOworICAgICAgICByZXN1
bHQgPSBwcm9ncmFtLT5qaXRDb2RlKG5ld0NhbGxGcmFtZSwgc2NvcGVDaGFpbikuZXhlY3V0ZSgm
bV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhj
ZXB0aW9uKTsKICNlbHNlCiAgICAgICAgIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwg
Jm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGV4Y2VwdGlvbik7CiAjZW5kaWYKQEAgLTY5
OCw3ICs2OTgsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uRXhlCiAg
ICAgZm9yIChBcmdMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICBuZXdDYWxsRnJhbWUtPnIoKytkc3QpID0gKml0OwogCi0gICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5ieXRlY29kZShzY29w
ZUNoYWluKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUt
PmJ5dGVjb2RlKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7CiAgICAgbmV3Q2FsbEZyYW1lID0gc2xp
ZGVSZWdpc3RlcldpbmRvd0ZvckNhbGwoY29kZUJsb2NrLCAmbV9yZWdpc3RlckZpbGUsIG5ld0Nh
bGxGcmFtZSwgYXJnYyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgYXJnYyk7
CiAgICAgaWYgKFVOTElLRUxZKCFuZXdDYWxsRnJhbWUpKSB7CiAgICAgICAgICpleGNlcHRpb24g
PSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lKTsKQEAgLTcxOCw3ICs3MTgsNyBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEZ1bmN0aW9uRXhlCiAKICAgICAgICAgbV9y
ZWVudHJ5RGVwdGgrKzsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICByZXN1bHQgPSBmdW5jdGlv
bkV4ZWN1dGFibGUtPmppdENvZGUoc2NvcGVDaGFpbikuZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUs
IG5ld0NhbGxGcmFtZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgcmVzdWx0ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5qaXRDb2RlKG5ld0NhbGxGcmFtZSwgc2Nv
cGVDaGFpbikuZXhlY3V0ZSgmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgc2NvcGVDaGFp
bi0+Z2xvYmFsRGF0YSwgZXhjZXB0aW9uKTsKICNlbHNlCiAgICAgICAgIHJlc3VsdCA9IHByaXZh
dGVFeGVjdXRlKE5vcm1hbCwgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIGV4Y2VwdGlv
bik7CiAjZW5kaWYKQEAgLTc1Niw3ICs3NTYsNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJl
dGVyOjpwcmVwYXJlRm9yCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kpCiAgICAg
ICAgIG5ld0NhbGxGcmFtZS0+cigrK2RzdCkgPSBqc1VuZGVmaW5lZCgpOwogICAgIAotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gJkZ1bmN0aW9uRXhlY3V0YWJsZS0+Ynl0ZWNvZGUoc2NvcGVD
aGFpbik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmRnVuY3Rpb25FeGVjdXRhYmxlLT5i
eXRlY29kZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwogICAgIG5ld0NhbGxGcmFtZSA9IHNsaWRl
UmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9jaywgJm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxs
RnJhbWUsIGFyZ2MgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIGFyZ2MpOwog
ICAgIGlmIChVTkxJS0VMWSghbmV3Q2FsbEZyYW1lKSkgewogICAgICAgICAqZXhjZXB0aW9uID0g
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSk7CkBAIC03NjYsNyArNzY2LDcgQEAg
Q2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAgIC8vIGEgMCBjb2Rl
QmxvY2sgaW5kaWNhdGVzIGEgYnVpbHQtaW4gY2FsbGVyCiAgICAgbmV3Q2FsbEZyYW1lLT5pbml0
KGNvZGVCbG9jaywgMCwgc2NvcGVDaGFpbiwgY2FsbEZyYW1lLT5hZGRIb3N0Q2FsbEZyYW1lRmxh
ZygpLCAwLCBhcmdjLCBmdW5jdGlvbik7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBGdW5jdGlvbkV4
ZWN1dGFibGUtPmppdENvZGUoc2NvcGVDaGFpbik7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlLT5q
aXRDb2RlKG5ld0NhbGxGcmFtZSwgc2NvcGVDaGFpbik7CiAjZW5kaWYKIAogICAgIENhbGxGcmFt
ZUNsb3N1cmUgcmVzdWx0ID0geyBjYWxsRnJhbWUsIG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24sIEZ1
bmN0aW9uRXhlY3V0YWJsZSwgc2NvcGVDaGFpbi0+Z2xvYmFsRGF0YSwgb2xkRW5kLCBzY29wZUNo
YWluLCBjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycywgYXJnYyB9OwpAQCAtODA1LDcgKzgwNSw3
IEBAIHZvaWQgSW50ZXJwcmV0ZXI6OmVuZFJlcGVhdENhbGwoQ2FsbEZyYW0KIAogSlNWYWx1ZSBJ
bnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNW
YWx1ZSogZXhjZXB0aW9uKQogewotICAgIHJldHVybiBleGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwg
dGhpc09iaiwgbV9yZWdpc3RlckZpbGUuc2l6ZSgpICsgZXZhbC0+Ynl0ZWNvZGUoc2NvcGVDaGFp
bikubV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplLCBz
Y29wZUNoYWluLCBleGNlcHRpb24pOworICAgIHJldHVybiBleGVjdXRlKGV2YWwsIGNhbGxGcmFt
ZSwgdGhpc09iaiwgbV9yZWdpc3RlckZpbGUuc2l6ZSgpICsgZXZhbC0+Ynl0ZWNvZGUoY2FsbEZy
YW1lLCBzY29wZUNoYWluKS5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemUsIHNjb3BlQ2hhaW4sIGV4Y2VwdGlvbik7CiB9CiAKIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGFibGUqIGV2YWwsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU09iamVjdCogdGhpc09iaiwgaW50IGdsb2JhbFJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSogZXhjZXB0aW9uKQpAQCAtODIxLDcgKzgyMSw3IEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKIAogICAgIER5bmFtaWNH
bG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QgPyBjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KS5keW5hbWljR2xvYmFsT2JqZWN0IDogc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0KCkpOwogCi0g
ICAgRXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWwtPmJ5dGVjb2RlKHNjb3BlQ2hhaW4p
OworICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZldmFsLT5ieXRlY29kZShjYWxsRnJh
bWUsIHNjb3BlQ2hhaW4pOwogCiAgICAgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3Q7
CiAgICAgZm9yIChTY29wZUNoYWluTm9kZSogbm9kZSA9IHNjb3BlQ2hhaW47IDsgbm9kZSA9IG5v
ZGUtPm5leHQpIHsKQEAgLTg4MCw3ICs4ODAsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVj
dXRlKEV2YWxFeGVjdXRhCiAKICAgICAgICAgbV9yZWVudHJ5RGVwdGgrKzsKICNpZiBFTkFCTEUo
SklUKQotICAgICAgICByZXN1bHQgPSBldmFsLT5qaXRDb2RlKHNjb3BlQ2hhaW4pLmV4ZWN1dGUo
Jm1fcmVnaXN0ZXJGaWxlLCBuZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbERhdGEsIGV4
Y2VwdGlvbik7CisgICAgICAgIHJlc3VsdCA9IGV2YWwtPmppdENvZGUobmV3Q2FsbEZyYW1lLCBz
Y29wZUNoYWluKS5leGVjdXRlKCZtX3JlZ2lzdGVyRmlsZSwgbmV3Q2FsbEZyYW1lLCBzY29wZUNo
YWluLT5nbG9iYWxEYXRhLCBleGNlcHRpb24pOwogI2Vsc2UKICAgICAgICAgcmVzdWx0ID0gcHJp
dmF0ZUV4ZWN1dGUoTm9ybWFsLCAmbV9yZWdpc3RlckZpbGUsIG5ld0NhbGxGcmFtZSwgZXhjZXB0
aW9uKTsKICNlbmRpZgpAQCAtMzAxNiw3ICszMDE2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlYwogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZUpT
KSB7CiAgICAgICAgICAgICBTY29wZUNoYWluTm9kZSogY2FsbERhdGFTY29wZUNoYWluID0gY2Fs
bERhdGEuanMuc2NvcGVDaGFpbjsKLSAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2Nr
ID0gJmNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Ynl0ZWNvZGUoY2FsbERhdGFTY29w
ZUNoYWluKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNhbGxEYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Ynl0ZWNvZGUoY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3Bl
Q2hhaW4pOwogCiAgICAgICAgICAgICBDYWxsRnJhbWUqIHByZXZpb3VzQ2FsbEZyYW1lID0gY2Fs
bEZyYW1lOwogCkBAIC0zMTcwLDcgKzMxNzAsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2
YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5
cGVKUykgewogICAgICAgICAgICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9
IGNhbGxEYXRhLmpzLnNjb3BlQ2hhaW47Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVC
bG9jayA9ICZjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmJ5dGVjb2RlKGNhbGxEYXRh
U2NvcGVDaGFpbik7CisgICAgICAgICAgICBDb2RlQmxvY2sqIG5ld0NvZGVCbG9jayA9ICZjYWxs
RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmJ5dGVjb2RlKGNhbGxGcmFtZSwgY2FsbERhdGFT
Y29wZUNoYWluKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ2FsbEZyYW1lKiBwcmV2aW91
c0NhbGxGcmFtZSA9IGNhbGxGcmFtZTsKICAgICAgICAgICAgIApAQCAtMzQxOCw3ICszNDE4LDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogCiAgICAgICAgIGlm
IChjb25zdHJ1Y3RUeXBlID09IENvbnN0cnVjdFR5cGVKUykgewogICAgICAgICAgICAgU2NvcGVD
aGFpbk5vZGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGNvbnN0cnVjdERhdGEuanMuc2NvcGVDaGFp
bjsKLSAgICAgICAgICAgIENvZGVCbG9jayogbmV3Q29kZUJsb2NrID0gJmNvbnN0cnVjdERhdGEu
anMuZnVuY3Rpb25FeGVjdXRhYmxlLT5ieXRlY29kZShjYWxsRGF0YVNjb3BlQ2hhaW4pOworICAg
ICAgICAgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2sgPSAmY29uc3RydWN0RGF0YS5qcy5mdW5j
dGlvbkV4ZWN1dGFibGUtPmJ5dGVjb2RlKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluKTsK
IAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAgICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IGNhbGxGcmFtZS0+cihwcm90bykuanNWYWx1ZSgpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0ODMsNyArMTQ4Myw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9jYWxsX0pTRnUKICAgICBBU1NFUlQoIWZ1bmN0aW9uLT5p
c0hvc3RGdW5jdGlvbigpKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBm
dW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CiAgICAgU2NvcGVDaGFpbk5vZGUqIGNhbGxEYXRhU2Nv
cGVDaGFpbiA9IGZ1bmN0aW9uLT5zY29wZSgpLm5vZGUoKTsKLSAgICBleGVjdXRhYmxlLT5qaXRD
b2RlKGNhbGxEYXRhU2NvcGVDaGFpbik7CisgICAgZXhlY3V0YWJsZS0+aml0Q29kZShzdGFja0Zy
YW1lLmNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluKTsKIAogICAgIHJldHVybiBmdW5jdGlv
bjsKIH0KQEAgLTE1NDUsNyArMTU0NSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2
bV9sYXp5TGlua0MKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAgICAgaWYg
KCFleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlQmxvY2sgPSAmc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmJ5dGVjb2RlKGNhbGxl
ZS0+c2NvcGUoKS5ub2RlKCkpOworICAgICAgICBjb2RlQmxvY2sgPSAmc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmJ5dGVjb2RlKHN0YWNrRnJhbWUuY2FsbEZy
YW1lLCBjYWxsZWUtPnNjb3BlKCkubm9kZSgpKTsKICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9ICZzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCkt
PmdldENhbGxMaW5rSW5mbyhzdGFja0ZyYW1lLmFyZ3NbMV0ucmV0dXJuQWRkcmVzcygpKTsKIAog
ICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQpJbmRleDogSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZXMuY3BwCShyZXZpc2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MTMsOSArMTgxMywxMCBAQCBSZWdpc3RlcklEKiBUcnlO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVNjb3BlTm9kZURhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFNjb3BlTm9kZURh
dGE6OlNjb3BlTm9kZURhdGEoUGFyc2VyQXJlbmEmIGFyZW5hLCBTb3VyY2VFbGVtZW50cyogY2hp
bGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBpbnQg
bnVtQ29uc3RhbnRzKQotICAgIDogbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQorICAgIDog
bV9hcmVuYShuZXcgUGFyc2VyQXJlbmEoKSkKKyAgICAsIG1fbnVtQ29uc3RhbnRzKG51bUNvbnN0
YW50cykKIHsKLSAgICBtX2FyZW5hLnN3YXAoYXJlbmEpOworICAgIG1fYXJlbmEtPnN3YXAoYXJl
bmEpOwogICAgIGlmICh2YXJTdGFjaykKICAgICAgICAgbV92YXJTdGFjay5zd2FwKCp2YXJTdGFj
ayk7CiAgICAgaWYgKGZ1bmNTdGFjaykKQEAgLTE4NjEsOSArMTg2Miw5IEBAIFBhc3NSZWZQdHI8
UHJvZ3JhbU5vZGU+IFByb2dyYW1Ob2RlOjpjcmUKIHsKICAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+
IG5vZGUgPSBuZXcgUHJvZ3JhbU5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBm
dW5jU3RhY2ssIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKLSAgICBBU1NFUlQo
bm9kZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKLSAgICBub2RlLT5kYXRhKCkt
Pm1fYXJlbmEucmVtb3ZlTGFzdCgpOwotICAgIEFTU0VSVCghbm9kZS0+ZGF0YSgpLT5tX2FyZW5h
LmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKKyAgICBBU1NFUlQobm9kZS0+ZGF0YSgpLT5tX2FyZW5h
LT5sYXN0KCkgPT0gbm9kZSk7CisgICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLT5yZW1vdmVMYXN0
KCk7CisgICAgQVNTRVJUKCFub2RlLT5kYXRhKCktPm1fYXJlbmEtPmNvbnRhaW5zKG5vZGUuZ2V0
KCkpKTsKIAogICAgIHJldHVybiBub2RlLnJlbGVhc2UoKTsKIH0KQEAgLTE4OTIsOSArMTg5Myw5
IEBAIFBhc3NSZWZQdHI8RXZhbE5vZGU+IEV2YWxOb2RlOjpjcmVhdGUoSlMKIHsKICAgICBSZWZQ
dHI8RXZhbE5vZGU+IG5vZGUgPSBuZXcgRXZhbE5vZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZh
clN0YWNrLCBmdW5jU3RhY2ssIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKLSAg
ICBBU1NFUlQobm9kZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKLSAgICBub2Rl
LT5kYXRhKCktPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwotICAgIEFTU0VSVCghbm9kZS0+ZGF0YSgp
LT5tX2FyZW5hLmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKKyAgICBBU1NFUlQobm9kZS0+ZGF0YSgp
LT5tX2FyZW5hLT5sYXN0KCkgPT0gbm9kZSk7CisgICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLT5y
ZW1vdmVMYXN0KCk7CisgICAgQVNTRVJUKCFub2RlLT5kYXRhKCktPm1fYXJlbmEtPmNvbnRhaW5z
KG5vZGUuZ2V0KCkpKTsKIAogICAgIHJldHVybiBub2RlLnJlbGVhc2UoKTsKIH0KQEAgLTE5NjMs
MjIgKzE5NjQsMTMgQEAgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBGdW5jdGlvbkJvZAog
ewogICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBub2RlID0gbmV3IEZ1bmN0aW9uQm9keU5v
ZGUoZ2xvYmFsRGF0YSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIHNvdXJjZUNvZGUs
IGZlYXR1cmVzLCBudW1Db25zdGFudHMpOwogCi0gICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9h
cmVuYS5sYXN0KCkgPT0gbm9kZSk7Ci0gICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxh
c3QoKTsKLSAgICBBU1NFUlQoIW5vZGUtPmRhdGEoKS0+bV9hcmVuYS5jb250YWlucyhub2RlLmdl
dCgpKSk7CisgICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS0+bGFzdCgpID09IG5vZGUp
OworICAgIG5vZGUtPmRhdGEoKS0+bV9hcmVuYS0+cmVtb3ZlTGFzdCgpOworICAgIEFTU0VSVCgh
bm9kZS0+ZGF0YSgpLT5tX2FyZW5hLT5jb250YWlucyhub2RlLmdldCgpKSk7CiAKICAgICByZXR1
cm4gbm9kZS5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6cmVwYXJzZURh
dGFJZk5lY2Vzc2FyeShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCi17Ci0gICAgLy8g
VGhpcyBicmFuY2ggaXMgb25seSBuZWNlc3Nhcnkgc2luY2UgeW91IGNhbiBzdGlsbCBjcmVhdGUg
YSBub24tc3R1YiBGdW5jdGlvbkJvZHlOb2RlIGJ5Ci0gICAgLy8gY2FsbGluZyBQYXJzZXI6OnBh
cnNlPEZ1bmN0aW9uQm9keU5vZGU+KCkuICAgCi0gICAgaWYgKCFkYXRhKCkpCi0gICAgICAgIHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLT5wYXJzZXItPnJlcGFyc2VJblBsYWNlKHNjb3BlQ2hh
aW5Ob2RlLT5nbG9iYWxEYXRhLCB0aGlzKTsKLSAgICBBU1NFUlQoZGF0YSgpKTsKLX0KLQogUmVn
aXN0ZXJJRCogRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29r
KERpZEVudGVyQ2FsbEZyYW1lLCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CkBAIC0xOTk1LDE4
ICsxOTg3LDYgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdEJ5dGVjbwogICAg
IHJldHVybiAwOwogfQogCi1VU3RyaW5nIEZ1bmN0aW9uQm9keU5vZGU6OnBhcmFtU3RyaW5nKCkg
Y29uc3QKLXsKLSAgICBVU3RyaW5nIHMoIiIpOwotICAgIGZvciAoc2l6ZV90IHBvcyA9IDA7IHBv
cyA8IG1fcGFyYW1ldGVyQ291bnQ7ICsrcG9zKSB7Ci0gICAgICAgIGlmICghcy5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBzICs9ICIsICI7Ci0gICAgICAgIHMgKz0gcGFyYW1ldGVycygpW3Bvc10u
dXN0cmluZygpOwotICAgIH0KLQotICAgIHJldHVybiBzOwotfQotCiBJZGVudGlmaWVyKiBGdW5j
dGlvbkJvZHlOb2RlOjpjb3B5UGFyYW1ldGVycygpCiB7CiAgICAgSWRlbnRpZmllciogcGFyYW1l
dGVycyA9IHN0YXRpY19jYXN0PElkZW50aWZpZXIqPihmYXN0TWFsbG9jKG1fcGFyYW1ldGVyQ291
bnQgKiBzaXplb2YoSWRlbnRpZmllcikpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZp
c2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzg5LDcgKzEzODksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTY29w
ZU5vZGVEYXRhKFBhcnNlckFyZW5hJiwgU291cmNlRWxlbWVudHMqLCBWYXJTdGFjayosIEZ1bmN0
aW9uU3RhY2sqLCBpbnQgbnVtQ29uc3RhbnRzKTsKIAotICAgICAgICBQYXJzZXJBcmVuYSBtX2Fy
ZW5hOworICAgICAgICBPd25QdHI8UGFyc2VyQXJlbmE+IG1fYXJlbmE7CiAgICAgICAgIFZhclN0
YWNrIG1fdmFyU3RhY2s7CiAgICAgICAgIEZ1bmN0aW9uU3RhY2sgbV9mdW5jdGlvblN0YWNrOwog
ICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CkBAIC0xNDA2LDcgKzE0MDYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGFkb3B0RGF0YShzdGQ6OmF1dG9fcHRyPFNjb3BlTm9k
ZURhdGE+IGRhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCghZGF0YS0+bV9hcmVu
YS5jb250YWlucyh0aGlzKSk7CisgICAgICAgICAgICBBU1NFUlQoIWRhdGEtPm1fYXJlbmEtPmNv
bnRhaW5zKHRoaXMpKTsKICAgICAgICAgICAgIEFTU0VSVCghbV9kYXRhKTsKICAgICAgICAgICAg
IG1fZGF0YS5hZG9wdChkYXRhKTsKICAgICAgICAgfQpAQCAtMTQzOSw2ICsxNDM5LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5tX251bUNvbnN0YW50cyAr
IDI7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzY29wZUlzRnVuY3Rp
b24gPSBmYWxzZTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBzZXRTb3VyY2UoY29u
c3QgU291cmNlQ29kZSYgc291cmNlKSB7IG1fc291cmNlID0gc291cmNlOyB9CiAKQEAgLTE0Nzcs
NyArMTQ3OSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIq
IHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICAgICAgc2l6
ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudDsgfQot
ICAgICAgICBVU3RyaW5nIHBhcmFtU3RyaW5nKCkgY29uc3QgOwogICAgICAgICBJZGVudGlmaWVy
KiBjb3B5UGFyYW1ldGVycygpOwogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTE0ODcsNyAr
MTQ4OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQoKSB7IHJldHVybiBtX2lkZW50OyB9CiAKLSAgICAgICAgdm9pZCByZXBhcnNl
RGF0YUlmTmVjZXNzYXJ5KFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSk7CisgICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHNjb3BlSXNGdW5jdGlvbiA9IHRydWU7CiAKICAgICBwcml2YXRl
OgogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKEpTR2xvYmFsRGF0YSopOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDQ3NjUyKQorKysgSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDMzICs2Nyw2IEBAIHZvaWQgUGFy
c2VyOjpwYXJzZShKU0dsb2JhbERhdGEqIGdsb2JhbEQKICAgICB9CiB9CiAKLXZvaWQgUGFyc2Vy
OjpyZXBhcnNlSW5QbGFjZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEZ1bmN0aW9uQm9keU5v
ZGUqIGZ1bmN0aW9uQm9keU5vZGUpCi17Ci0gICAgQVNTRVJUKCFmdW5jdGlvbkJvZHlOb2RlLT5k
YXRhKCkpOwotCi0gICAgbV9zb3VyY2UgPSAmZnVuY3Rpb25Cb2R5Tm9kZS0+c291cmNlKCk7Ci0g
ICAgZ2xvYmFsRGF0YS0+bGV4ZXItPnNldElzUmVwYXJzaW5nKCk7Ci0gICAgcGFyc2UoZ2xvYmFs
RGF0YSwgMCwgMCk7Ci0gICAgQVNTRVJUKG1fc291cmNlRWxlbWVudHMpOwotCi0gICAgZnVuY3Rp
b25Cb2R5Tm9kZS0+YWRvcHREYXRhKHN0ZDo6YXV0b19wdHI8U2NvcGVOb2RlRGF0YT4obmV3IFNj
b3BlTm9kZURhdGEoZ2xvYmFsRGF0YS0+cGFyc2VyLT5hcmVuYSgpLAotICAgICAgICBtX3NvdXJj
ZUVsZW1lbnRzLAotICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9u
cy0+ZGF0YSA6IDAsIAotICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAmbV9mdW5jRGVjbGFy
YXRpb25zLT5kYXRhIDogMCwKLSAgICAgICAgbV9udW1Db25zdGFudHMpKSk7Ci0gICAgYm9vbCB1
c2VzQXJndW1lbnRzID0gZnVuY3Rpb25Cb2R5Tm9kZS0+dXNlc0FyZ3VtZW50cygpOwotICAgIGZ1
bmN0aW9uQm9keU5vZGUtPnNldEZlYXR1cmVzKG1fZmVhdHVyZXMpOwotICAgIGlmICh1c2VzQXJn
dW1lbnRzICYmICFmdW5jdGlvbkJvZHlOb2RlLT51c2VzQXJndW1lbnRzKCkpCi0gICAgICAgIGZ1
bmN0aW9uQm9keU5vZGUtPnNldFVzZXNBcmd1bWVudHMoKTsKLQotICAgIEFTU0VSVChnbG9iYWxE
YXRhLT5wYXJzZXItPmFyZW5hKCkuaXNFbXB0eSgpKTsKLQotICAgIG1fc291cmNlID0gMDsKLSAg
ICBtX3NvdXJjZUVsZW1lbnRzID0gMDsKLSAgICBtX3ZhckRlY2xhcmF0aW9ucyA9IDA7Ci0gICAg
bV9mdW5jRGVjbGFyYXRpb25zID0gMDsKLX0KLQogdm9pZCBQYXJzZXI6OmRpZEZpbmlzaFBhcnNp
bmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVsZW1lbnRzLCBQYXJzZXJBcmVuYURhdGE8RGVjbGFy
YXRpb25TdGFja3M6OlZhclN0YWNrPiogdmFyU3RhY2ssIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNr
PiogZnVuY1N0YWNrLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBsYXN0TGluZSwgaW50IG51
bUNvbnN0YW50cykKIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlzaW9uIDQ3NjUy
KQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxl
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJMZXhlci5oIgogI2lu
Y2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtNDQsMjEgKzQ1LDIyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIFBhcnNlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4KLSAgICAgICAgUGFzc1JlZlB0cjxQYXJzZWROb2Rl
PiBwYXJzZShFeGVjU3RhdGUqLCBEZWJ1Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBpbnQqIGVy
ckxpbmUgPSAwLCBVU3RyaW5nKiBlcnJNc2cgPSAwKTsKLSAgICAgICAgdGVtcGxhdGUgPGNsYXNz
IFBhcnNlZE5vZGU+Ci0gICAgICAgIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcmVwYXJzZShKU0ds
b2JhbERhdGEqLCBQYXJzZWROb2RlKik7Ci0gICAgICAgIHZvaWQgcmVwYXJzZUluUGxhY2UoSlNH
bG9iYWxEYXRhKiwgRnVuY3Rpb25Cb2R5Tm9kZSopOwotICAgICAgICBQYXNzUmVmUHRyPEZ1bmN0
aW9uQm9keU5vZGU+IHBhcnNlRnVuY3Rpb25Gcm9tR2xvYmFsQ29kZShFeGVjU3RhdGUqLCBEZWJ1
Z2dlciosIGNvbnN0IFNvdXJjZUNvZGUmLCBpbnQqIGVyckxpbmUgPSAwLCBVU3RyaW5nKiBlcnJN
c2cgPSAwKTsKKyAgICAgICAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBwYXJzZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIERlYnVnZ2VyKiwgRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBpbnQqIGVyckxpbmUgPSAwLCBVU3RyaW5nKiBlcnJNc2cgPSAwKTsKIAogICAgICAg
ICB2b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBQYXJzZXJBcmVuYURhdGE8
RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPiosIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrPios
IENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGxhc3RMaW5lLCBpbnQgbnVtQ29uc3RhbnRzKTsK
IAotICAgICAgICBQYXJzZXJBcmVuYSYgYXJlbmEoKSB7IHJldHVybiBtX2FyZW5hOyB9CisgICAg
ICAgIFBhcnNlckFyZW5hJiBhcmVuYSgpIHsgcmV0dXJuICptX2FyZW5hOyB9CisKKyAgICAgICAg
UGFyc2VyKCkKKyAgICAgICAgICAgIDogbV9hcmVuYShuZXcgUGFyc2VyQXJlbmEoKSkKKyAgICAg
ICAgeworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHBhcnNlKEpTR2xv
YmFsRGF0YSosIGludCogZXJyTGluZSwgVVN0cmluZyogZXJyTXNnKTsKIAotICAgICAgICBQYXJz
ZXJBcmVuYSBtX2FyZW5hOworICAgICAgICBPd25QdHI8UGFyc2VyQXJlbmE+IG1fYXJlbmE7CiAg
ICAgICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOwogICAgICAgICBTb3VyY2VFbGVtZW50
cyogbV9zb3VyY2VFbGVtZW50czsKICAgICAgICAgUGFyc2VyQXJlbmFEYXRhPERlY2xhcmF0aW9u
U3RhY2tzOjpWYXJTdGFjaz4qIG1fdmFyRGVjbGFyYXRpb25zOwpAQCAtNjksMTA3ICs3MSwzNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5v
ZGU+Ci0gICAgUGFzc1JlZlB0cjxQYXJzZWROb2RlPiBQYXJzZXI6OnBhcnNlKEV4ZWNTdGF0ZSog
ZXhlYywgRGVidWdnZXIqIGRlYnVnZ2VyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGludCog
ZXJyTGluZSwgVVN0cmluZyogZXJyTXNnKQorICAgIFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gUGFy
c2VyOjpwYXJzZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIERlYnVnZ2VyKiBkZWJ1Z2dlciwg
RXhlY1N0YXRlKiBkZWJ1Z2dlckV4ZWNTdGF0ZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBp
bnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1zZykKICAgICB7CiAgICAgICAgIG1fc291cmNlID0g
JnNvdXJjZTsKLSAgICAgICAgcGFyc2UoJmV4ZWMtPmdsb2JhbERhdGEoKSwgZXJyTGluZSwgZXJy
TXNnKTsKLSAgICAgICAgUmVmUHRyPFBhcnNlZE5vZGU+IHJlc3VsdDsKLSAgICAgICAgaWYgKG1f
c291cmNlRWxlbWVudHMpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0
ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3NvdXJjZUVsZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6
IDAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bmNEZWNs
YXJhdGlvbnMgPyAmbV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhIDogMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1fc291cmNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2ZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX251bUNvbnN0YW50cyk7Ci0gICAgICAgICAgICByZXN1bHQt
PnNldExvYyhtX3NvdXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgbV9hcmVuYS5yZXNldCgpOwotCi0gICAgICAgIG1fc291cmNlID0gMDsKLSAgICAg
ICAgbV92YXJEZWNsYXJhdGlvbnMgPSAwOwotICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPSAw
OwotCi0gICAgICAgIGlmIChkZWJ1Z2dlcikKLSAgICAgICAgICAgIGRlYnVnZ2VyLT5zb3VyY2VQ
YXJzZWQoZXhlYywgc291cmNlLCAqZXJyTGluZSwgKmVyck1zZyk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwotICAgIH0KKyAgICAgICAgaWYgKEZ1bmN0aW9uQm9keU5vZGU6OnNj
b3BlSXNGdW5jdGlvbikKKyAgICAgICAgICAgIGdsb2JhbERhdGEtPmxleGVyLT5zZXRJc1JlcGFy
c2luZygpOworICAgICAgICBwYXJzZShnbG9iYWxEYXRhLCBlcnJMaW5lLCBlcnJNc2cpOwogCi0g
ICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNlZE5vZGU+Ci0gICAgUGFzc1JlZlB0cjxQYXJzZWROb2Rl
PiBQYXJzZXI6OnJlcGFyc2UoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQYXJzZWROb2RlKiBv
bGRQYXJzZWROb2RlKQotICAgIHsKLSAgICAgICAgbV9zb3VyY2UgPSAmb2xkUGFyc2VkTm9kZS0+
c291cmNlKCk7Ci0gICAgICAgIHBhcnNlKGdsb2JhbERhdGEsIDAsIDApOwogICAgICAgICBSZWZQ
dHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgICAgICBpZiAobV9zb3VyY2VFbGVtZW50cykgewog
ICAgICAgICAgICAgcmVzdWx0ID0gUGFyc2VkTm9kZTo6Y3JlYXRlKGdsb2JhbERhdGEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50cywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/
ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZnVuY0RlY2xhcmF0aW9ucyA/ICZtX2Z1bmNEZWNsYXJhdGlvbnMt
PmRhdGEgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptX3Nv
dXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRQYXJzZWRO
b2RlLT5mZWF0dXJlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgICAgIG1fc291cmNlRWxlbWVudHMsCisgICAgICAg
ICAgICBtX3ZhckRlY2xhcmF0aW9ucyA/ICZtX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YSA6IDAsCisg
ICAgICAgICAgICBtX2Z1bmNEZWNsYXJhdGlvbnMgPyAmbV9mdW5jRGVjbGFyYXRpb25zLT5kYXRh
IDogMCwKKyAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgIG1fZmVhdHVyZXMsCisgICAg
ICAgICAgICBtX251bUNvbnN0YW50cyk7CiAgICAgICAgICAgICByZXN1bHQtPnNldExvYyhtX3Nv
dXJjZS0+Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9h
cmVuYS5yZXNldCgpOworICAgICAgICBtX2FyZW5hLT5yZXNldCgpOwogCiAgICAgICAgIG1fc291
cmNlID0gMDsKKyAgICAgICAgbV9zb3VyY2VFbGVtZW50cyA9IDA7CiAgICAgICAgIG1fdmFyRGVj
bGFyYXRpb25zID0gMDsKICAgICAgICAgbV9mdW5jRGVjbGFyYXRpb25zID0gMDsKIAorICAgICAg
ICBpZiAoZGVidWdnZXIgJiYgIUZ1bmN0aW9uQm9keU5vZGU6OnNjb3BlSXNGdW5jdGlvbikKKyAg
ICAgICAgICAgIGRlYnVnZ2VyLT5zb3VyY2VQYXJzZWQoZGVidWdnZXJFeGVjU3RhdGUsIHNvdXJj
ZSwgKmVyckxpbmUsICplcnJNc2cpOwogICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgUGFzc1JlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBQYXJzZXI6
OnBhcnNlRnVuY3Rpb25Gcm9tR2xvYmFsQ29kZShFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiBk
ZWJ1Z2dlciwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcq
IGVyck1zZykKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbSA9IHBh
cnNlPFByb2dyYW1Ob2RlPihleGVjLCBkZWJ1Z2dlciwgc291cmNlLCBlcnJMaW5lLCBlcnJNc2cp
OwotCi0gICAgICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAg
ICAgIFN0YXRlbWVudFZlY3RvciYgY2hpbGRyZW4gPSBwcm9ncmFtLT5jaGlsZHJlbigpOwotICAg
ICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDEpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQot
ICAgICAgICBTdGF0ZW1lbnROb2RlKiBleHByU3RhdGVtZW50ID0gY2hpbGRyZW5bMF07Ci0gICAg
ICAgIEFTU0VSVChleHByU3RhdGVtZW50KTsKLSAgICAgICAgQVNTRVJUKGV4cHJTdGF0ZW1lbnQt
PmlzRXhwclN0YXRlbWVudCgpKTsKLSAgICAgICAgaWYgKCFleHByU3RhdGVtZW50IHx8ICFleHBy
U3RhdGVtZW50LT5pc0V4cHJTdGF0ZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0g
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBmdW5jRXhwciA9IHN0YXRpY19jYXN0PEV4cHJTdGF0ZW1l
bnROb2RlKj4oZXhwclN0YXRlbWVudCktPmV4cHIoKTsKLSAgICAgICAgQVNTRVJUKGZ1bmNFeHBy
KTsKLSAgICAgICAgQVNTRVJUKGZ1bmNFeHByLT5pc0Z1bmNFeHByTm9kZSgpKTsKLSAgICAgICAg
aWYgKCFmdW5jRXhwciB8fCAhZnVuY0V4cHItPmlzRnVuY0V4cHJOb2RlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKLQotICAgICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IHN0
YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9keSgpOwotICAgICAgICBBU1NF
UlQoYm9keSk7Ci0gICAgICAgIHJldHVybiBib2R5LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBp
bmxpbmUgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpwYXJzZShFeGVjU3RhdGUqIGV4ZWMsIGJv
b2wgYWxsb3dEZWJ1ZykKLSAgICB7Ci0gICAgICAgIGludCBlcnJMaW5lOwotICAgICAgICBVU3Ry
aW5nIGVyck1zZzsKLSAgICAgICAgbV9ub2RlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnBhcnNlci0+
cGFyc2U8RXZhbE5vZGU+KGV4ZWMsIGFsbG93RGVidWcgPyBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPmRlYnVnZ2VyKCkgOiAwLCBtX3NvdXJjZSwgJmVyckxpbmUsICZlcnJNc2cpOwotICAg
ICAgICBpZiAoIW1fbm9kZSkKLSAgICAgICAgICAgIHJldHVybiBFcnJvcjo6Y3JlYXRlKGV4ZWMs
IFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIG1fc291cmNlLnByb3ZpZGVyKCktPmFzSUQo
KSwgbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpwYXJzZShFeGVjU3Rh
dGUqIGV4ZWMsIGJvb2wgYWxsb3dEZWJ1ZykKLSAgICB7Ci0gICAgICAgIGludCBlcnJMaW5lOwot
ICAgICAgICBVU3RyaW5nIGVyck1zZzsKLSAgICAgICAgbV9ub2RlID0gZXhlYy0+Z2xvYmFsRGF0
YSgpLnBhcnNlci0+cGFyc2U8UHJvZ3JhbU5vZGU+KGV4ZWMsIGFsbG93RGVidWcgPyBleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkgOiAwLCBtX3NvdXJjZSwgJmVyckxpbmUs
ICZlcnJNc2cpOwotICAgICAgICBpZiAoIW1fbm9kZSkKLSAgICAgICAgICAgIHJldHVybiBFcnJv
cjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIG1fc291cmNlLnBy
b3ZpZGVyKCktPmFzSUQoKSwgbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gUGFyc2Vy
X2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc051bWVyaWNDb21wYXJlRnVuY3Rpb24oQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxE
YXRhJiBjYWxsRGF0YSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNh
bGxEYXRhKQogewogICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZUpTKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC03NSwxMCArNzUsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGlzTnVtZXJp
Y0NvbXBhcmVGdW5jdAogI2lmIEVOQUJMRShKSVQpCiAgICAgLy8gSWYgdGhlIEpJVCBpcyBlbmFi
bGVkIHRoZW4gd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50IHRoYXQgZXZlcnkKICAg
ICAvLyBmdW5jdGlvbiB3aXRoIGEgQ29kZUJsb2NrIGFsc28gaGFzIEpJVCBjb2RlLgotICAgIGNh
bGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+aml0Q29kZShjYWxsRGF0YS5qcy5zY29wZUNo
YWluKTsKKyAgICBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmppdENvZGUoZXhlYywg
Y2FsbERhdGEuanMuc2NvcGVDaGFpbik7CiAgICAgQ29kZUJsb2NrJiBjb2RlQmxvY2sgPSBjYWxs
RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVjb2RlKCk7CiAjZWxzZQot
ICAgIENvZGVCbG9jayYgY29kZUJsb2NrID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxl
LT5ieXRlY29kZShjYWxsRGF0YS5qcy5zY29wZUNoYWluKTsKKyAgICBDb2RlQmxvY2smIGNvZGVC
bG9jayA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Ynl0ZWNvZGUoZXhlYywgY2Fs
bERhdGEuanMuc2NvcGVDaGFpbik7CiAjZW5kaWYKIAogICAgIHJldHVybiBjb2RlQmxvY2suaXNO
dW1lcmljQ29tcGFyZUZ1bmN0aW9uKCk7CkBAIC00NTYsNyArNDU2LDcgQEAgSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29ydAogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZnVu
Y3Rpb24uZ2V0Q2FsbERhdGEoY2FsbERhdGEpOwogCiAgICAgaWYgKHRoaXNPYmotPmNsYXNzSW5m
bygpID09ICZKU0FycmF5OjppbmZvKSB7Ci0gICAgICAgIGlmIChpc051bWVyaWNDb21wYXJlRnVu
Y3Rpb24oY2FsbFR5cGUsIGNhbGxEYXRhKSkKKyAgICAgICAgaWYgKGlzTnVtZXJpY0NvbXBhcmVG
dW5jdGlvbihleGVjLCBjYWxsVHlwZSwgY2FsbERhdGEpKQogICAgICAgICAgICAgYXNBcnJheSh0
aGlzT2JqKS0+c29ydE51bWVyaWMoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSk7
CiAgICAgICAgIGVsc2UgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBlTm9uZSkKICAgICAgICAgICAg
IGFzQXJyYXkodGhpc09iaiktPnNvcnQoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDQ3
NjUyKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBDb21wbGV0aW9uIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSog
ZXhlYywgCiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSBw
cm9ncmFtKHNvdXJjZSk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS5wYXJzZShleGVj
KTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLmNoZWNrU3ludGF4KGV4ZWMpOwogICAg
IGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIGVycm9yKTsKIApA
QCAtNTQsNyArNTQsNyBAQCBDb21wbGV0aW9uIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
CiAgICAgSlNMb2NrIGxvY2soZXhlYyk7CiAKICAgICBQcm9ncmFtRXhlY3V0YWJsZSBwcm9ncmFt
KHNvdXJjZSk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS5wYXJzZShleGVjKTsKKyAg
ICBKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLmNvbXBpbGUoZXhlYywgc2NvcGVDaGFpbi5ub2Rl
KCkpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIENvbXBsZXRpb24oVGhyb3csIGVy
cm9yKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biA0NzY1MikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJKSVQuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUzLDU4ICs1NCw5MiBAQCBQcm9ncmFtRXhlY3V0YWJsZTo6
flByb2dyYW1FeGVjdXRhYmxlKCkKIAogRnVuY3Rpb25FeGVjdXRhYmxlOjp+RnVuY3Rpb25FeGVj
dXRhYmxlKCkKIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcGFyYW1ldGVyQ291bnQ7ICsr
aSkKKyAgICAgICAgbV9wYXJhbWV0ZXJzW2ldLn5JZGVudGlmaWVyKCk7CisgICAgZmFzdEZyZWUo
bV9wYXJhbWV0ZXJzKTsKICAgICBkZWxldGUgbV9jb2RlQmxvY2s7CiB9CiAKLXZvaWQgRXZhbEV4
ZWN1dGFibGU6OmdlbmVyYXRlQnl0ZWNvZGUoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQorSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogeworICAgIGludCBlcnJMaW5lOworICAgIFVT
dHJpbmcgZXJyTXNnOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBleGVjLT5nbG9i
YWxEYXRhKCkucGFyc2VyLT5wYXJzZTxFdmFsTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLCBleGVjLCBtX3NvdXJjZSwgJmVy
ckxpbmUsICZlcnJNc2cpOworICAgIGlmICghZXZhbE5vZGUpCisgICAgICAgIHJldHVybiBFcnJv
cjo6Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIG1fc291cmNlLnBy
b3ZpZGVyKCktPmFzSUQoKSwgbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOworICAgIHJlY29y
ZFBhcnNlKGV2YWxOb2RlLT5mZWF0dXJlcygpLCBldmFsTm9kZS0+bGluZU5vKCksIGV2YWxOb2Rl
LT5sYXN0TGluZSgpKTsKKwogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNoYWluTm9k
ZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xvYmFs
T2JqZWN0KCk7CiAKICAgICBBU1NFUlQoIW1fZXZhbENvZGVCbG9jayk7CiAgICAgbV9ldmFsQ29k
ZUJsb2NrID0gbmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5w
cm92aWRlcigpLCBzY29wZUNoYWluLmxvY2FsRGVwdGgoKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2Rl
R2VuZXJhdG9yPiBnZW5lcmF0b3IobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlKCksIGds
b2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9ldmFsQ29kZUJsb2NrLT5zeW1i
b2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2spKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIGdsb2Jh
bE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xU
YWJsZSgpLCBtX2V2YWxDb2RlQmxvY2spKTsKICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAg
ICAgCi0gICAgZXZhbE5vZGUoKS0+ZGVzdHJveURhdGEoKTsKKyAgICBldmFsTm9kZS0+ZGVzdHJv
eURhdGEoKTsKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Z2Vu
ZXJhdGVCeXRlY29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCitKU09iamVjdCog
UHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBp
bnQgZXJyTGluZTsKKyAgICBVU3RyaW5nIGVyck1zZzsKKyAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+
IHByb2dyYW1Ob2RlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLnBhcnNlci0+cGFyc2U8UHJvZ3JhbU5v
ZGU+KCZleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGVi
dWdnZXIoKSwgZXhlYywgbV9zb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKKyAgICBpZiAoIXBy
b2dyYW1Ob2RlKQorICAgICAgICByZXR1cm4gRXJyb3I6OmNyZWF0ZShleGVjLCBTeW50YXhFcnJv
ciwgZXJyTXNnLCBlcnJMaW5lLCBtX3NvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIG1fc291cmNl
LnByb3ZpZGVyKCktPnVybCgpKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNPYmplY3QqIFByb2dy
YW1FeGVjdXRhYmxlOjpjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNj
b3BlQ2hhaW5Ob2RlKQoreworICAgIGludCBlcnJMaW5lOworICAgIFVTdHJpbmcgZXJyTXNnOwor
ICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBleGVjLT5nbG9iYWxEYXRhKCku
cGFyc2VyLT5wYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLCBleGVjLCBtX3NvdXJjZSwgJmVyckxpbmUs
ICZlcnJNc2cpOworICAgIGlmICghcHJvZ3JhbU5vZGUpCisgICAgICAgIHJldHVybiBFcnJvcjo6
Y3JlYXRlKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIG1fc291cmNlLnByb3Zp
ZGVyKCktPmFzSUQoKSwgbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpOworICAgIHJlY29yZFBh
cnNlKHByb2dyYW1Ob2RlLT5mZWF0dXJlcygpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCksIHByb2dy
YW1Ob2RlLT5sYXN0TGluZSgpKTsKKwogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNo
YWluTm9kZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4u
Z2xvYmFsT2JqZWN0KCk7CiAgICAgCiAgICAgQVNTRVJUKCFtX3Byb2dyYW1Db2RlQmxvY2spOwog
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEdsb2Jh
bENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSk7Ci0gICAgT3duUHRyPEJ5
dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1O
b2RlKCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJmdsb2JhbE9iamVj
dC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrKSk7CisgICAgT3duUHRyPEJ5dGVj
b2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2Rl
LmdldCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sICZnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jaykpOwogICAgIGdlbmVyYXRvci0+
Z2VuZXJhdGUoKTsKIAotICAgIHByb2dyYW1Ob2RlKCktPmRlc3Ryb3lEYXRhKCk7CisgICAgcHJv
Z3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRnVuY3Rp
b25FeGVjdXRhYmxlOjpnZW5lcmF0ZUJ5dGVjb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
Tm9kZSkKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlKEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKIHsKLSAgICBib2R5KCktPnJlcGFyc2VEYXRhSWZO
ZWNlc3Nhcnkoc2NvcGVDaGFpbk5vZGUpOworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9
IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihnbG9i
YWxEYXRhLCAwLCAwLCBtX3NvdXJjZSk7CisgICAgaWYgKG1fZm9yY2VVc2VzQXJndW1lbnRzKQor
ICAgICAgICBib2R5LT5zZXRVc2VzQXJndW1lbnRzKCk7CisgICAgYm9keS0+ZmluaXNoUGFyc2lu
Zyhjb3B5UGFyYW1ldGVycygpLCBtX3BhcmFtZXRlckNvdW50LCBtX25hbWUpOworICAgIHJlY29y
ZFBhcnNlKGJvZHktPmZlYXR1cmVzKCksIGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgp
KTsKIAogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzY29wZUNoYWluTm9kZSk7CiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCk7CiAK
ICAgICBBU1NFUlQoIW1fY29kZUJsb2NrKTsKICAgICBtX2NvZGVCbG9jayA9IG5ldyBGdW5jdGlv
bkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJj
ZSgpLnN0YXJ0T2Zmc2V0KCkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJh
dG9yKG5ldyBCeXRlY29kZUdlbmVyYXRvcihib2R5KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIo
KSwgc2NvcGVDaGFpbiwgbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrKSk7
CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IobmV3IEJ5dGVjb2RlR2Vu
ZXJhdG9yKGJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwg
bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fY29kZUJsb2NrKSk7CiAgICAgZ2VuZXJhdG9y
LT5nZW5lcmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVycyA9IG1fY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnM7CiAgICAgQVNTRVJUKG1fbnVtUGFyYW1ldGVycyk7CiAgICAgbV9udW1WYXJpYWJs
ZXMgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzOwogCi0gICAgYm9keSgpLT5kZXN0cm95RGF0YSgp
OworICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQogCi12b2lk
IEV2YWxFeGVjdXRhYmxlOjpnZW5lcmF0ZUpJVENvZGUoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW5Ob2RlKQordm9pZCBFdmFsRXhlY3V0YWJsZTo6Z2VuZXJhdGVKSVRDb2RlKEV4ZWNTdGF0ZSog
ZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogewotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gJmJ5dGVjb2RlKHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9ICZieXRlY29kZShleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgbV9qaXRDb2Rl
ID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBjb2RlQmxvY2spOwog
CiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCkBAIC0xMTMsOSArMTQ4LDkgQEAgdm9pZCBF
dmFsRXhlY3V0YWJsZTo6Z2VuZXJhdGVKSVRDb2RlKFNjbwogI2VuZGlmCiB9CiAKLXZvaWQgUHJv
Z3JhbUV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUpCit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpnZW5lcmF0ZUpJVENvZGUoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSAmYnl0ZWNvZGUoc2NvcGVDaGFpbk5vZGUpOworICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gJmJ5dGVjb2RlKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBtX2ppdENv
ZGUgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIGNvZGVCbG9jayk7
CiAKICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKQEAgLTEyNCw5ICsxNTksOSBAQCB2b2lk
IFByb2dyYW1FeGVjdXRhYmxlOjpnZW5lcmF0ZUpJVENvZGUoCiAjZW5kaWYKIH0KIAotdm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6OmdlbmVyYXRlSklUQ29kZShTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbk5vZGUpCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Z2VuZXJhdGVKSVRDb2RlKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogewotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gJmJ5dGVjb2RlKHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9ICZieXRlY29kZShleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgbV9q
aXRDb2RlID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBjb2RlQmxv
Y2spOwogCiAjaWYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCkBAIC0xNDUsOSArMTgwLDEwIEBA
IHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjptYXJrQWdncmVnYXRlKE0KIAogRXhjZXB0aW9uSW5m
byogRnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5ld0Z1bmN0aW9uQm9k
eSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cmVwYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihnbG9iYWxE
YXRhLCBib2R5KCkpOwotICAgIEFTU0VSVChuZXdGdW5jdGlvbkJvZHkpOwotICAgIG5ld0Z1bmN0
aW9uQm9keS0+ZmluaXNoUGFyc2luZyhib2R5KCktPmNvcHlQYXJhbWV0ZXJzKCksIGJvZHkoKS0+
cGFyYW1ldGVyQ291bnQoKSwgYm9keSgpLT5pZGVudCgpKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4gbmV3RnVuY3Rpb25Cb2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5j
dGlvbkJvZHlOb2RlPihnbG9iYWxEYXRhLCAwLCAwLCBtX3NvdXJjZSk7CisgICAgaWYgKG1fZm9y
Y2VVc2VzQXJndW1lbnRzKQorICAgICAgICBuZXdGdW5jdGlvbkJvZHktPnNldFVzZXNBcmd1bWVu
dHMoKTsKKyAgICBuZXdGdW5jdGlvbkJvZHktPmZpbmlzaFBhcnNpbmcoY29weVBhcmFtZXRlcnMo
KSwgbV9wYXJhbWV0ZXJDb3VudCwgbV9uYW1lKTsKIAogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFp
bihzY29wZUNoYWluTm9kZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNj
b3BlQ2hhaW4uZ2xvYmFsT2JqZWN0KCk7CkBAIC0xNzMsNyArMjA5LDcgQEAgRXhjZXB0aW9uSW5m
byogRnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBhcgogCiBFeGNlcHRpb25JbmZvKiBFdmFsRXhlY3V0
YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAg
IFJlZlB0cjxFdmFsTm9kZT4gbmV3RXZhbEJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnJlcGFy
c2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGV2YWxOb2RlKCkpOworICAgIFJlZlB0cjxFdmFsTm9k
ZT4gbmV3RXZhbEJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXItPnBhcnNlPEV2YWxOb2RlPihnbG9i
YWxEYXRhLCAwLCAwLCBtX3NvdXJjZSk7CiAKICAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oc2Nv
cGVDaGFpbk5vZGUpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNo
YWluLmdsb2JhbE9iamVjdCgpOwpAQCAtMTk0LDEzICsyMzAsOCBAQCBFeGNlcHRpb25JbmZvKiBF
dmFsRXhlY3V0YWJsZTo6cmVwYXJzZUV4CiAgICAgcmV0dXJuIG5ld0NvZGVCbG9jay0+ZXh0cmFj
dEV4Y2VwdGlvbkluZm8oKTsKIH0KIAotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlY29tcGls
ZShFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVjb21waWxlKEV4
ZWNTdGF0ZSopCiB7Ci0gICAgRnVuY3Rpb25Cb2R5Tm9kZSogb2xkQm9keSA9IGJvZHkoKTsKLSAg
ICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbmV3Qm9keSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5w
YXJzZXItPnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGV4ZWMsIDAsIG1fc291cmNlKTsKLSAgICBB
U1NFUlQobmV3Qm9keSk7Ci0gICAgbmV3Qm9keS0+ZmluaXNoUGFyc2luZyhvbGRCb2R5LT5jb3B5
UGFyYW1ldGVycygpLCBvbGRCb2R5LT5wYXJhbWV0ZXJDb3VudCgpLCBvbGRCb2R5LT5pZGVudCgp
KTsKLSAgICBtX25vZGUgPSBuZXdCb2R5OwogICAgIGRlbGV0ZSBtX2NvZGVCbG9jazsKICAgICBt
X2NvZGVCbG9jayA9IDA7CiAgICAgbV9udW1QYXJhbWV0ZXJzID0gTlVNX1BBUkFNRVRFUlNfTk9U
X0NPTVBJTEVEOwpAQCAtMjA5LDYgKzI0MCw1MyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
cmVjb21waWxlKEV4ZWNTCiAjZW5kaWYKIH0KIAorUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFi
bGU+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRpZmllciYg
ZnVuY3Rpb25OYW1lLCBFeGVjU3RhdGUqIGV4ZWMsIERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1zZykKK3sKKyAg
ICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW0gPSBleGVjLT5nbG9iYWxEYXRhKCkucGFyc2Vy
LT5wYXJzZTxQcm9ncmFtTm9kZT4oJmV4ZWMtPmdsb2JhbERhdGEoKSwgZGVidWdnZXIsIGV4ZWMs
IHNvdXJjZSwgZXJyTGluZSwgZXJyTXNnKTsKKworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBTdGF0ZW1lbnRWZWN0b3ImIGNoaWxkcmVuID0gcHJvZ3JhbS0+Y2hp
bGRyZW4oKTsKKyAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDEpCisgICAgICAgIHJldHVybiAw
OworCisgICAgU3RhdGVtZW50Tm9kZSogZXhwclN0YXRlbWVudCA9IGNoaWxkcmVuWzBdOworICAg
IEFTU0VSVChleHByU3RhdGVtZW50KTsKKyAgICBBU1NFUlQoZXhwclN0YXRlbWVudC0+aXNFeHBy
U3RhdGVtZW50KCkpOworICAgIGlmICghZXhwclN0YXRlbWVudCB8fCAhZXhwclN0YXRlbWVudC0+
aXNFeHByU3RhdGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgRXhwcmVzc2lvbk5v
ZGUqIGZ1bmNFeHByID0gc3RhdGljX2Nhc3Q8RXhwclN0YXRlbWVudE5vZGUqPihleHByU3RhdGVt
ZW50KS0+ZXhwcigpOworICAgIEFTU0VSVChmdW5jRXhwcik7CisgICAgQVNTRVJUKGZ1bmNFeHBy
LT5pc0Z1bmNFeHByTm9kZSgpKTsKKyAgICBpZiAoIWZ1bmNFeHByIHx8ICFmdW5jRXhwci0+aXNG
dW5jRXhwck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4gYm9keSA9IHN0YXRpY19jYXN0PEZ1bmNFeHByTm9kZSo+KGZ1bmNFeHByKS0+Ym9k
eSgpOworICAgIEFTU0VSVChib2R5KTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9u
RXhlY3V0YWJsZShmdW5jdGlvbk5hbWUsIGJvZHktPnNvdXJjZSgpLCBib2R5LT51c2VzQXJndW1l
bnRzKCksIGJvZHktPmNvcHlQYXJhbWV0ZXJzKCksIGJvZHktPnBhcmFtZXRlckNvdW50KCksIGJv
ZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKSk7Cit9CisKK0lkZW50aWZpZXIqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y29weVBhcmFtZXRlcnMoKQoreworICAgIElkZW50aWZpZXIqIHBhcmFt
ZXRlcnMgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyKj4oZmFzdE1hbGxvYyhtX3BhcmFtZXRlckNv
dW50ICogc2l6ZW9mKElkZW50aWZpZXIpKSk7CisgICAgV1RGOjpWZWN0b3JDb3BpZXI8ZmFsc2Us
IElkZW50aWZpZXI+Ojp1bmluaXRpYWxpemVkQ29weShtX3BhcmFtZXRlcnMsIG1fcGFyYW1ldGVy
cyArIG1fcGFyYW1ldGVyQ291bnQsIHBhcmFtZXRlcnMpOworICAgIHJldHVybiBwYXJhbWV0ZXJz
OworfQorCitVU3RyaW5nIEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1TdHJpbmcoKSBjb25zdAor
eworICAgIFVTdHJpbmcgcygiIik7CisgICAgZm9yIChpbnQgcG9zID0gMDsgcG9zIDwgbV9wYXJh
bWV0ZXJDb3VudDsgKytwb3MpIHsKKyAgICAgICAgaWYgKCFzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHMgKz0gIiwgIjsKKyAgICAgICAgcyArPSBtX3BhcmFtZXRlcnNbcG9zXS51c3RyaW5nKCk7
CisgICAgfQorCisgICAgcmV0dXJuIHM7Cit9CisKIH07CiAKIApJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDQ3NjUyKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgY2xhc3MgQ29kZUJsb2NrOworICAgIGNsYXNzIERlYnVnZ2VyOwog
ICAgIGNsYXNzIEV2YWxDb2RlQmxvY2s7CiAgICAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKICAg
ICBjbGFzcyBTY29wZUNoYWluTm9kZTsKQEAgLTEwMiwyNCArMTAzLDM0IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
ICAgICAgICAgICAgIDogRXhlY3V0YWJsZUJhc2UoTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVE
KQogICAgICAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICAgICAsIG1fZmVhdHVy
ZXMoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgU291cmNlQ29kZSYg
c291cmNlKCkgeyByZXR1cm4gbV9zb3VyY2U7IH0KLSAgICAgICAgaW50cHRyX3Qgc291cmNlSUQo
KSBjb25zdCB7IHJldHVybiBtX25vZGUtPnNvdXJjZUlEKCk7IH0KLSAgICAgICAgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLT5zb3VyY2VVUkwoKTsgfQot
ICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLT5saW5lTm8oKTsgfQot
ICAgICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX25vZGUtPmxhc3RMaW5lKCk7
IH0KLQotICAgICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLT51c2Vz
RXZhbCgpOyB9Ci0gICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZS0+dXNlc0FyZ3VtZW50cygpOyB9Ci0gICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9ub2RlLT5uZWVkc0FjdGl2YXRpb24oKTsgfQorICAgICAgICBpbnRw
dHJfdCBzb3VyY2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVyKCktPmFzSUQo
KTsgfQorICAgICAgICBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZS5wcm92aWRlcigpLT51cmwoKTsgfQorICAgICAgICBpbnQgbGluZU5vKCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdExpbmU7IH0KKyAgICAgICAgaW50IGxhc3RMaW5lKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0TGluZTsgfQorCisgICAgICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KKyAgICAgICAgYm9vbCB1c2VzQXJndW1l
bnRzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIEFyZ3VtZW50c0ZlYXR1cmU7IH0KKyAg
ICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYg
KEV2YWxGZWF0dXJlIHwgQ2xvc3VyZUZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVy
ZSk7IH0KIAogICAgICAgICB2aXJ0dWFsIEV4Y2VwdGlvbkluZm8qIHJlcGFyc2VFeGNlcHRpb25J
bmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKikgPSAwOwogCiAg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0
dXJlcywgaW50IGZpcnN0TGluZSwgaW50IGxhc3RMaW5lKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2ZlYXR1cmVzID0gZmVhdHVyZXM7CisgICAgICAgICAgICBtX2ZpcnN0TGluZSA9IGZpcnN0
TGluZTsKKyAgICAgICAgICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKKyAgICAgICAgfQorCiAg
ICAgICAgIFNvdXJjZUNvZGUgbV9zb3VyY2U7Ci0gICAgICAgIFJlZlB0cjxTY29wZU5vZGU+IG1f
bm9kZTsKKyAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgICAgIGludCBtX2Zp
cnN0TGluZTsKKyAgICAgICAgaW50IG1fbGFzdExpbmU7CiAgICAgfTsKIAogICAgIGNsYXNzIEV2
YWxFeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpAQCAtMTMyLDM3ICsxNDMs
MzQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgfkV2YWxFeGVjdXRhYmxlKCk7CiAKLSAg
ICAgICAgSlNPYmplY3QqIHBhcnNlKEV4ZWNTdGF0ZSogZXhlYywgYm9vbCBhbGxvd0RlYnVnID0g
dHJ1ZSk7Ci0KLSAgICAgICAgRXZhbENvZGVCbG9jayYgYnl0ZWNvZGUoU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlKQorICAgICAgICBFdmFsQ29kZUJsb2NrJiBieXRlY29kZShFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICAgICAgZ2VuZXJhdGVC
eXRlY29kZShzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICBpZiAoIW1fZXZhbENvZGVCbG9j
aykgeworICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvbXBpbGUoZXhlYywgc2Nv
cGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoIWVycm9yLCBlcnJv
cik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gKm1fZXZhbENvZGVCbG9jazsK
ICAgICAgICAgfQogCi0gICAgICAgIEV4Y2VwdGlvbkluZm8qIHJlcGFyc2VFeGNlcHRpb25JbmZv
KEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29kZUJsb2NrKik7CisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAKKyAgICAgICAg
RXhjZXB0aW9uSW5mbyogcmVwYXJzZUV4Y2VwdGlvbkluZm8oSlNHbG9iYWxEYXRhKiwgU2NvcGVD
aGFpbk5vZGUqLCBDb2RlQmxvY2sqKTsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZhbEV4
ZWN1dGFibGU+IGNyZWF0ZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBFdmFsRXhlY3V0YWJsZShzb3VyY2UpKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgRXZhbE5vZGUqIGV2YWxOb2RlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbE5vZGUqPiht
X25vZGUuZ2V0KCkpOyB9Ci0KLSAgICAgICAgdm9pZCBnZW5lcmF0ZUJ5dGVjb2RlKFNjb3BlQ2hh
aW5Ob2RlKik7Ci0KICAgICAgICAgRXZhbENvZGVCbG9jayogbV9ldmFsQ29kZUJsb2NrOwogCiAj
aWYgRU5BQkxFKEpJVCkKICAgICBwdWJsaWM6Ci0gICAgICAgIEpJVENvZGUmIGppdENvZGUoU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQorICAgICAgICBKSVRDb2RlJiBqaXRDb2RlKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIW1faml0Q29kZSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUpJ
VENvZGUoc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGdlbmVyYXRlSklUQ29kZShl
eGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlOwogICAg
ICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGdlbmVyYXRlSklUQ29kZShTY29w
ZUNoYWluTm9kZSopOworICAgICAgICB2b2lkIGdlbmVyYXRlSklUQ29kZShFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMTc2LDExNyArMTg0LDExNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIH5Qcm9ncmFtRXhlY3V0YWJsZSgp
OwogCi0gICAgICAgIEpTT2JqZWN0KiBwYXJzZShFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgYWxsb3dE
ZWJ1ZyA9IHRydWUpOwotCi0gICAgICAgIC8vIENvZGVCbG9ja3MgZm9yIHByb2dyYW0gY29kZSBh
cmUgdHJhbnNpZW50IGFuZCB0aGVyZWZvcmUgdG8gbm90IGdhaW4gZnJvbSBmcm9tIHRocm93aW5n
IG91dCB0aGVyZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCi0gICAgICAgIEV4Y2VwdGlvbkluZm8q
IHJlcGFyc2VFeGNlcHRpb25JbmZvKEpTR2xvYmFsRGF0YSosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29k
ZUJsb2NrKikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KLQotICAgICAgICBQ
cm9ncmFtQ29kZUJsb2NrJiBieXRlY29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUp
CisgICAgICAgIFByb2dyYW1Db2RlQmxvY2smIGJ5dGVjb2RlKEV4ZWNTdGF0ZSogZXhlYywgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgICAgICBnZW5lcmF0ZUJ5dGVjb2RlKHNj
b3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgIGlmICghbV9wcm9ncmFtQ29kZUJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gY29tcGlsZShleGVjLCBzY29wZUNoYWlu
Tm9kZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCghZXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAqbV9wcm9ncmFtQ29kZUJsb2NrOwogICAg
ICAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUo
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxQcm9ncmFtTm9kZSo+KG1fbm9kZS5nZXQoKSk7IH0KKyAg
ICAgICAgSlNPYmplY3QqIGNoZWNrU3ludGF4KEV4ZWNTdGF0ZSopOworICAgICAgICBKU09iamVj
dCogY29tcGlsZShFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwogCi0gICAgICAgIHZvaWQg
Z2VuZXJhdGVCeXRlY29kZShTY29wZUNoYWluTm9kZSopOworICAgICAgICAvLyBDb2RlQmxvY2tz
IGZvciBwcm9ncmFtIGNvZGUgYXJlIHRyYW5zaWVudCBhbmQgdGhlcmVmb3JlIGRvIG5vdCBnYWlu
IGZyb20gZnJvbSB0aHJvd2luZyBvdXQgdGhlcmUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgorICAg
ICAgICBFeGNlcHRpb25JbmZvKiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBT
Y29wZUNoYWluTm9kZSosIENvZGVCbG9jayopIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVy
biAwOyB9CiAKKyAgICBwcml2YXRlOgogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBtX3Byb2dy
YW1Db2RlQmxvY2s7CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHB1YmxpYzoKLSAgICAgICAgSklU
Q29kZSYgaml0Q29kZShTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCisgICAgICAgIEpJ
VENvZGUmIGppdENvZGUoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFp
bk5vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9qaXRDb2RlKQotICAgICAgICAg
ICAgICAgIGdlbmVyYXRlSklUQ29kZShzY29wZUNoYWluTm9kZSk7CisgICAgICAgICAgICAgICAg
Z2VuZXJhdGVKSVRDb2RlKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgICAgIHJldHVy
biBtX2ppdENvZGU7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZ2Vu
ZXJhdGVKSVRDb2RlKFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZvaWQgZ2VuZXJhdGVKSVRD
b2RlKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAjZW5kaWYKICAgICB9OwogCiAgICAg
Y2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIHB1YmxpYzoKLSAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEZ1bmN0aW9uQm9keU5vZGUqIGJvZHkpCi0g
ICAgICAgICAgICA6IFNjcmlwdEV4ZWN1dGFibGUoYm9keS0+c291cmNlKCkpCisgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZShjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIGJvb2wgZm9yY2VVc2VzQXJndW1lbnRzLCBJZGVudGlmaWVyKiBwYXJhbWV0ZXJz
LCBpbnQgcGFyYW1ldGVyQ291bnQsIGludCBmaXJzdExpbmUsIGludCBsYXN0TGluZSkKKyAgICAg
ICAgICAgIDogU2NyaXB0RXhlY3V0YWJsZShzb3VyY2UpCisgICAgICAgICAgICAsIG1fZm9yY2VV
c2VzQXJndW1lbnRzKGZvcmNlVXNlc0FyZ3VtZW50cykKKyAgICAgICAgICAgICwgbV9wYXJhbWV0
ZXJzKHBhcmFtZXRlcnMpCisgICAgICAgICAgICAsIG1fcGFyYW1ldGVyQ291bnQocGFyYW1ldGVy
Q291bnQpCiAgICAgICAgICAgICAsIG1fY29kZUJsb2NrKDApCiAgICAgICAgICAgICAsIG1fbmFt
ZShuYW1lKQogICAgICAgICAgICAgLCBtX251bVZhcmlhYmxlcygwKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtX25vZGUgPSBib2R5OworICAgICAgICAgICAgbV9maXJzdExpbmUgPSBmaXJzdExp
bmU7CisgICAgICAgICAgICBtX2xhc3RMaW5lID0gbGFzdExpbmU7CiAgICAgICAgIH0KIAogICAg
ICAgICB+RnVuY3Rpb25FeGVjdXRhYmxlKCk7CiAKLSAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
bmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQotCi0gICAgICAgIEpTRnVuY3Rpb24qIG1ha2UoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbik7CisgICAgICAgIEpTRnVu
Y3Rpb24qIG1ha2UoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNGdW5jdGlvbihleGVj
LCB0aGlzLCBzY29wZUNoYWluKTsKKyAgICAgICAgfQogCi0gICAgICAgIENvZGVCbG9jayYgYnl0
ZWNvZGUoU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKSAKKyAgICAgICAgQ29kZUJsb2Nr
JiBieXRlY29kZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9k
ZSkgCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChzY29wZUNoYWluTm9kZSk7CiAgICAg
ICAgICAgICBpZiAoIW1fY29kZUJsb2NrKQotICAgICAgICAgICAgICAgIGdlbmVyYXRlQnl0ZWNv
ZGUoc2NvcGVDaGFpbk5vZGUpOworICAgICAgICAgICAgICAgIGNvbXBpbGUoZXhlYywgc2NvcGVD
aGFpbk5vZGUpOwogICAgICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9jazsKICAgICAgICAgfQor
CisgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jb2RlQmxvY2s7CisgICAgICAgIH0KKwogICAgICAgICBDb2RlQmxvY2smIGdl
bmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrKTsKICAgICAgICAgICAgIHJldHVybiAqbV9jb2RlQmxvY2s7CiAgICAgICAgIH0KIAotICAg
ICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gYm9keSgpLT51c2VzRXZhbCgpOyB9
Ci0gICAgICAgIGJvb2wgdXNlc0FyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIGJvZHkoKS0+dXNl
c0FyZ3VtZW50cygpOyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIGJvZHkoKS0+cGFyYW1ldGVyQ291bnQoKTsgfQorICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnQ7IH0KICAgICAgICAgc2l6ZV90
IHZhcmlhYmxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX251bVZhcmlhYmxlczsgfQotICAgICAg
ICBVU3RyaW5nIHBhcmFtU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gYm9keSgpLT5wYXJhbVN0cmlu
ZygpOyB9Ci0KLSAgICAgICAgYm9vbCBpc0dlbmVyYXRlZCgpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jazsKLSAgICAgICAgfQorICAgICAgICBVU3RyaW5n
IHBhcmFtU3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCByZWNvbXBpbGUoRXhlY1N0YXRl
KiBleGVjKTsKLQogICAgICAgICBFeGNlcHRpb25JbmZvKiByZXBhcnNlRXhjZXB0aW9uSW5mbyhK
U0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9kZSosIENvZGVCbG9jayopOwotCiAgICAgICAgIHZv
aWQgbWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjayk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gZnJvbUdsb2JhbENvZGUoY29uc3QgSWRlbnRp
ZmllciYsIEV4ZWNTdGF0ZSosIERlYnVnZ2VyKiwgY29uc3QgU291cmNlQ29kZSYsIGludCogZXJy
TGluZSA9IDAsIFVTdHJpbmcqIGVyck1zZyA9IDApOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZSogYm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0
aW9uQm9keU5vZGUqPihtX25vZGUuZ2V0KCkpOyB9Ci0KLSAgICAgICAgdm9pZCBnZW5lcmF0ZUJ5
dGVjb2RlKFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZvaWQgY29tcGlsZShFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBJZGVudGlmaWVyKiBjb3B5UGFyYW1ldGVycygp
OwogCisgICAgICAgIGJvb2wgbV9mb3JjZVVzZXNBcmd1bWVudHM7CisgICAgICAgIElkZW50aWZp
ZXIqIG1fcGFyYW1ldGVyczsKKyAgICAgICAgaW50IG1fcGFyYW1ldGVyQ291bnQ7CiAgICAgICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1fbmFt
ZTsKKyAgICAgICAgSWRlbnRpZmllciBtX25hbWU7CiAgICAgICAgIHNpemVfdCBtX251bVZhcmlh
YmxlczsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgcHVibGljOgotICAgICAgICBKSVRDb2RlJiBq
aXRDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKKyAgICAgICAgSklUQ29kZSYg
aml0Q29kZShFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2ppdENvZGUpCi0gICAgICAgICAgICAgICAg
Z2VuZXJhdGVKSVRDb2RlKHNjb3BlQ2hhaW5Ob2RlKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0
ZUpJVENvZGUoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgICAgICAgICAgcmV0dXJuIG1faml0
Q29kZTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBnZW5lcmF0ZUpJ
VENvZGUoU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdm9pZCBnZW5lcmF0ZUpJVENvZGUoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICNlbmRpZgogICAgIH07CiAKICAgICBpbmxpbmUg
RnVuY3Rpb25FeGVjdXRhYmxlKiBKU0Z1bmN0aW9uOjpqc0V4ZWN1dGFibGUoKSBjb25zdCB7IEFT
U0VSVCghaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUoKSk7IHJldHVybiBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihtX2V4ZWN1dGFibGUuZ2V0KCkpOyB9CiAKLSAgICBpbmxpbmUgSlNG
dW5jdGlvbiogRnVuY3Rpb25FeGVjdXRhYmxlOjptYWtlKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW4pCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBK
U0Z1bmN0aW9uKGV4ZWMsIHRoaXMsIHNjb3BlQ2hhaW4pOwotICAgIH0KLQogICAgIGlubGluZSBi
b29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2V4ZWN1dGFibGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDEz
ICs4NywxMyBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb24oRXhlY1N0YXRlKiBlCiAgICAg
aW50IGVyckxpbmU7CiAgICAgVVN0cmluZyBlcnJNc2c7CiAgICAgU291cmNlQ29kZSBzb3VyY2Ug
PSBtYWtlU291cmNlKHByb2dyYW0sIHNvdXJjZVVSTCwgbGluZU51bWJlcik7Ci0gICAgUmVmUHRy
PEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBleGVjLT5nbG9iYWxEYXRhKCkucGFyc2VyLT5wYXJz
ZUZ1bmN0aW9uRnJvbUdsb2JhbENvZGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
LT5kZWJ1Z2dlcigpLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKLSAgICBpZiAoIWJvZHkp
CisgICAgUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gZnVuY3Rpb24gPSBGdW5jdGlvbkV4ZWN1
dGFibGU6OmZyb21HbG9iYWxDb2RlKGZ1bmN0aW9uTmFtZSwgZXhlYywgZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpLCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKKyAg
ICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2UucHJvdmlkZXIoKS0+YXNJRCgpLCBzb3VyY2Uu
cHJvdmlkZXIoKS0+dXJsKCkpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4o
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xvYmFsVGhp
c1ZhbHVlKCkpOwotICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywgYWRvcHRS
ZWYobmV3IEZ1bmN0aW9uRXhlY3V0YWJsZShmdW5jdGlvbk5hbWUsIGJvZHkuZ2V0KCkpKSwgc2Nv
cGVDaGFpbi5ub2RlKCkpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTRnVuY3Rpb24oZXhlYywg
ZnVuY3Rpb24sIHNjb3BlQ2hhaW4ubm9kZSgpKTsKIH0KIAogLy8gRUNNQSAxNS4zLjIgVGhlIEZ1
bmN0aW9uIENvbnN0cnVjdG9yCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCShyZXZpc2lvbiA0NzY1MikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw4IEBAIGNvbnN0IFZlY3Rv
cjxJbnN0cnVjdGlvbj4mIEpTR2xvYmFsRGF0YToKIHsKICAgICBpZiAoIWxhenlOdW1lcmljQ29t
cGFyZUZ1bmN0aW9uLnNpemUoKSAmJiAhaW5pdGlhbGl6aW5nTGF6eU51bWVyaWNDb21wYXJlRnVu
Y3Rpb24pIHsKICAgICAgICAgaW5pdGlhbGl6aW5nTGF6eU51bWVyaWNDb21wYXJlRnVuY3Rpb24g
PSB0cnVlOwotICAgICAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gZnVuY3Rpb25Cb2R5ID0g
cGFyc2VyLT5wYXJzZUZ1bmN0aW9uRnJvbUdsb2JhbENvZGUoZXhlYywgMCwgbWFrZVNvdXJjZShV
U3RyaW5nKCIoZnVuY3Rpb24gKHYxLCB2MikgeyByZXR1cm4gdjEgLSB2MjsgfSkiKSksIDAsIDAp
OwotICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUgZnVuY3Rpb24oZnVuY3Rpb25Cb2R5LT5pZGVu
dCgpLCBmdW5jdGlvbkJvZHkuZ2V0KCkpOwotICAgICAgICBsYXp5TnVtZXJpY0NvbXBhcmVGdW5j
dGlvbiA9IGZ1bmN0aW9uLmJ5dGVjb2RlKGV4ZWMtPnNjb3BlQ2hhaW4oKSkuaW5zdHJ1Y3Rpb25z
KCk7CisgICAgICAgIFJlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+IGZ1bmN0aW9uID0gRnVuY3Rp
b25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShJZGVudGlmaWVyKGV4ZWMsICJudW1lcmljQ29t
cGFyZSIpLCBleGVjLCAwLCBtYWtlU291cmNlKFVTdHJpbmcoIihmdW5jdGlvbiAodjEsIHYyKSB7
IHJldHVybiB2MSAtIHYyOyB9KSIpKSwgMCwgMCk7CisgICAgICAgIGxhenlOdW1lcmljQ29tcGFy
ZUZ1bmN0aW9uID0gZnVuY3Rpb24tPmJ5dGVjb2RlKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSku
aW5zdHJ1Y3Rpb25zKCk7CiAgICAgICAgIGluaXRpYWxpemluZ0xhenlOdW1lcmljQ29tcGFyZUZ1
bmN0aW9uID0gZmFsc2U7CiAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gNDc2NTIpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxG
dW5jRXZhbChFeGUKICAgICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDsKIAogICAgIEV2YWxFeGVj
dXRhYmxlIGV2YWwobWFrZVNvdXJjZShzKSk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gZXZhbC5w
YXJzZShleGVjKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBldmFsLmNvbXBpbGUoZXhlYywgc3Rh
dGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih1bndyYXBwZWRPYmplY3QpLT5nbG9iYWxTY29wZUNo
YWluKCkubm9kZSgpKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIGVycm9yKTsKIAo=
</data>
<flag name="review"
          id="19522"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38816</attachid>
            <date>2009-08-31 09:04:45 -0700</date>
            <delta_ts>2009-08-31 12:32:41 -0700</delta_ts>
            <desc>fixed typo</desc>
            <filename>typo.patch</filename>
            <type>text/plain</type>
            <size>1518</size>
            <attacher name="Robert Agoston">Agoston.Robert</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3ODk2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDgtMzEgIFJvYmVydCBB
Z29zdG9uICA8QWdvc3Rvbi5Sb2JlcnRAc3R1ZC51LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlZCB0eXBvLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg2OTEKKworICAgICAgICAq
IHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyOjpwYXJzZSk6CisKIDIwMDkt
MDgtMjcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBNYWNpZWogU3RhY2hvd2lhay4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgJKHJldmlz
aW9uIDQ3ODk2KQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIFBhc3NSZWZQdHI8UGFy
c2VkTm9kZT4gUGFyc2VyOjpwYXJzZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIERlYnVnZ2Vy
KiBkZWJ1Z2dlciwgRXhlY1N0YXRlKiBkZWJ1Z2dlckV4ZWNTdGF0ZSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1zZykKICAgICB7CiAgICAgICAg
IG1fc291cmNlID0gJnNvdXJjZTsKLSAgICAgICAgaWYgKEZ1bmN0aW9uQm9keU5vZGU6OnNjb3Bl
SXNGdW5jdGlvbikKKyAgICAgICAgaWYgKFBhcnNlZE5vZGU6OnNjb3BlSXNGdW5jdGlvbikKICAg
ICAgICAgICAgIGdsb2JhbERhdGEtPmxleGVyLT5zZXRJc1JlcGFyc2luZygpOwogICAgICAgICBw
YXJzZShnbG9iYWxEYXRhLCBlcnJMaW5lLCBlcnJNc2cpOwogCkBAIC05Myw3ICs5Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBtX3ZhckRlY2xhcmF0aW9ucyA9IDA7CiAgICAgICAgIG1f
ZnVuY0RlY2xhcmF0aW9ucyA9IDA7CiAKLSAgICAgICAgaWYgKGRlYnVnZ2VyICYmICFGdW5jdGlv
bkJvZHlOb2RlOjpzY29wZUlzRnVuY3Rpb24pCisgICAgICAgIGlmIChkZWJ1Z2dlciAmJiAhUGFy
c2VkTm9kZTo6c2NvcGVJc0Z1bmN0aW9uKQogICAgICAgICAgICAgZGVidWdnZXItPnNvdXJjZVBh
cnNlZChkZWJ1Z2dlckV4ZWNTdGF0ZSwgc291cmNlLCAqZXJyTGluZSwgKmVyck1zZyk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgIH0K
</data>
<flag name="review"
          id="19807"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>