<?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>123444</bug_id>
          
          <creation_ts>2013-10-29 07:06:18 -0700</creation_ts>
          <short_desc>Adjust CallFrameHeader’s ReturnPC and CallFrame locations to match the native ABI</short_desc>
          <delta_ts>2013-10-30 14:25:53 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>123042</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>944415</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-29 07:06:18 -0700</bug_when>
    <thetext>Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944416</commentid>
    <comment_count>1</comment_count>
      <attachid>215385</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-29 07:13:47 -0700</bug_when>
    <thetext>Created attachment 215385
patch 1.

First patch.  It builds.  It runs.  It passes tests.  But it probably need some ChangeLog comments.  Uploading it to get some feedback first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944419</commentid>
    <comment_count>2</comment_count>
      <attachid>215385</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-29 07:21:38 -0700</bug_when>
    <thetext>Comment on attachment 215385
patch 1.

Attachment 215385 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/17148072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944421</commentid>
    <comment_count>3</comment_count>
      <attachid>215385</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-29 07:40:07 -0700</bug_when>
    <thetext>Comment on attachment 215385
patch 1.

Attachment 215385 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/17108099</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944425</commentid>
    <comment_count>4</comment_count>
      <attachid>215385</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-29 07:44:43 -0700</bug_when>
    <thetext>Comment on attachment 215385
patch 1.

Attachment 215385 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/17138083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944429</commentid>
    <comment_count>5</comment_count>
      <attachid>215385</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-29 08:02:19 -0700</bug_when>
    <thetext>Comment on attachment 215385
patch 1.

Attachment 215385 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/17058089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944498</commentid>
    <comment_count>6</comment_count>
      <attachid>215385</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-29 11:34:57 -0700</bug_when>
    <thetext>Comment on attachment 215385
patch 1.

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

Looks like this needs another go-round.

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:103
&gt; -    emitPutToCallFrameHeader(GPRInfo::regT2, JSStack::ReturnPC);
&gt; +    emitPutReturnPCToCallFrameHeader(GPRInfo::regT2);

Instead of creating an extra layer of helper functions, I think you should use the existing emitPutToCallFrameHeader, and pass it returnPCOffset() as the offset.

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:131
&gt; -        emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, GPRInfo::argumentGPR0);
&gt; +        emitGetCallerFrameFromCallFrameHeaderPtr(GPRInfo::argumentGPR0);

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:131
&gt; -        jit.store32(AssemblyHelpers::TrustedImm32(JSValue::CellTag), AssemblyHelpers::tagFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::CallerFrame)));
&gt; -        jit.storePtr(callerFrameGPR, AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::CallerFrame)));
&gt; -        jit.storePtr(AssemblyHelpers::TrustedImmPtr(jumpTarget), AssemblyHelpers::payloadFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + JSStack::ReturnPC)));
&gt; +        jit.storePtr(callerFrameGPR, AssemblyHelpers::Address(GPRInfo::callFrameRegister, inlineCallFrame-&gt;callerFrameOffset()));
&gt; +        jit.storePtr(AssemblyHelpers::TrustedImmPtr(jumpTarget), AssemblyHelpers::Address(GPRInfo::callFrameRegister, inlineCallFrame-&gt;returnPCOffset()));

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:665
&gt; +    m_jit.storePtr(GPRInfo::callFrameRegister, calleeFrameCallerFrame(numArgs));

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3119
&gt; -        m_jit.emitGetFromCallFrameHeaderPtr(JSStack::ReturnPC, GPRInfo::regT2);
&gt; +        m_jit.emitGetReturnPCFromCallFrameHeaderPtr(GPRInfo::regT2);
&gt;          // Restore our caller&apos;s &quot;r&quot;.
&gt; -        m_jit.emitGetFromCallFrameHeaderPtr(JSStack::CallerFrame, GPRInfo::callFrameRegister);
&gt; +        m_jit.emitGetCallerFrameFromCallFrameHeaderPtr(GPRInfo::callFrameRegister);

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:744
&gt; +    MacroAssembler::Address calleeFrameSlot(int numArgs, int slot, int byteOffset = 0)

Instead of passing a byte offset to this function, callers should call this function and then call .withOffset() on its return value. That seems to be the existing idiom. It&apos;s strange to pass a byte offset to a function named &quot;calleeFrameSlot&quot; because &quot;slot&quot; implies that we&apos;re counting JSValue-sized stack slots.

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:132
&gt; +        void clearReturnPC() { registers()[JSStack::CallerFrameAndReturnPC] = static_cast&lt;Instruction*&gt;(0); }

This is broken. You need to assign 0 to .vPC() in the union.

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:220
&gt; +        void setCallerFrame(CallFrame* callerFrame) { static_cast&lt;Register*&gt;(this)[JSStack::CallerFrameAndReturnPC] = callerFrame; }

Ditto. You need to assign callerFrame to .callerFrame in the union.

&gt; Source/JavaScriptCore/interpreter/CallFrame.h:299
&gt; +        void setReturnPC(void* value) { static_cast&lt;Register*&gt;(this)[JSStack::CallerFrameAndReturnPC] = (Instruction*)value; }

Ditto.

&gt; Source/JavaScriptCore/interpreter/JSStack.h:59
&gt; +            // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.

Really? CallerFrameAndReturnPC is an Instruction*? I don&apos;t think it is.

&gt; Source/JavaScriptCore/interpreter/Register.h:66
&gt; +        CallFrame* callerFrame() const;

This should be callFrame.

&gt; Source/JavaScriptCore/interpreter/Register.h:103
&gt; +            CallFrame* callerFrame;

This should be named &quot;callFrame&quot;, since our union members name their types, and not what they&apos;re used for.

&gt; Source/JavaScriptCore/interpreter/Register.h:109
&gt; +            } callerFrameAndPC;

Ditto.

&gt; Source/JavaScriptCore/interpreter/Register.h:145
&gt; +    ALWAYS_INLINE Register&amp; Register::operator=(CallFrame* callerFrame)

This is a bad abstraction. Register is just a union. You&apos;re building into it the layout of the stack. There&apos;s no guarantee that every time I store a CallFrame* to the stack I&apos;m trying to change my return address. You should remove this assignment operator altogether.

&gt; Source/JavaScriptCore/interpreter/Register.h:161
&gt;      ALWAYS_INLINE Register&amp; Register::operator=(Instruction* vPC)

Ditto.

&gt; Source/JavaScriptCore/interpreter/Register.h:190
&gt;      ALWAYS_INLINE Instruction* Register::vPC() const

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944950</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-30 09:59:24 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 215385 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215385&amp;action=review
&gt; 
&gt; Looks like this needs another go-round.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:103
&gt; &gt; -    emitPutToCallFrameHeader(GPRInfo::regT2, JSStack::ReturnPC);
&gt; &gt; +    emitPutReturnPCToCallFrameHeader(GPRInfo::regT2);
&gt; 
&gt; Instead of creating an extra layer of helper functions, I think you should use the existing emitPutToCallFrameHeader, and pass it returnPCOffset() as the offset.

As discussed offline, since the pre-existing emitPutToCallFrameHeader() takes a slot index and will not work for our purpose here, we&apos;ll stick with these CallerFrame and ReturnPC specific getter/putters.


&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:744
&gt; &gt; +    MacroAssembler::Address calleeFrameSlot(int numArgs, int slot, int byteOffset = 0)
&gt; 
&gt; Instead of passing a byte offset to this function, callers should call this function and then call .withOffset() on its return value. That seems to be the existing idiom. It&apos;s strange to pass a byte offset to a function named &quot;calleeFrameSlot&quot; because &quot;slot&quot; implies that we&apos;re counting JSValue-sized stack slots.

Will fix.


&gt; &gt; Source/JavaScriptCore/interpreter/CallFrame.h:132
&gt; &gt; +        void clearReturnPC() { registers()[JSStack::CallerFrameAndReturnPC] = static_cast&lt;Instruction*&gt;(0); }
&gt; 
&gt; This is broken. You need to assign 0 to .vPC() in the union.

Actually no, it does work.  It makes use of assignment operators in Register treating CallFrame* and Instruction* differently.  But I agree that this is a hack and obviously confusing to the reader.  I will change the implementation to make the assignment explicit and do away with the assignment operator hack.
 
&gt; &gt; Source/JavaScriptCore/interpreter/JSStack.h:59
&gt; &gt; +            // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*.
&gt; 
&gt; Really? CallerFrameAndReturnPC is an Instruction*? I don&apos;t think it is.

Ahh, the perils of retaining stale comments (without thinking it through).  Will remove.

&gt; &gt; Source/JavaScriptCore/interpreter/Register.h:103
&gt; &gt; +            CallFrame* callerFrame;
&gt; 
&gt; This should be named &quot;callFrame&quot;, since our union members name their types, and not what they&apos;re used for.

OK, will fix.

&gt; &gt; Source/JavaScriptCore/interpreter/Register.h:145
&gt; &gt; +    ALWAYS_INLINE Register&amp; Register::operator=(CallFrame* callerFrame)
&gt; 
&gt; This is a bad abstraction. Register is just a union. You&apos;re building into it the layout of the stack. There&apos;s no guarantee that every time I store a CallFrame* to the stack I&apos;m trying to change my return address. You should remove this assignment operator altogether.

Agreed.  Will fix (as indicated above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945135</commentid>
    <comment_count>8</comment_count>
      <attachid>215555</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-30 13:00:37 -0700</bug_when>
    <thetext>Created attachment 215555
patch 2: new and improved after addressing all feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945139</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-30 13:03:06 -0700</bug_when>
    <thetext>Attachment 215555 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeOrigin.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLink.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/CallFrame.h&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.h&apos;, u&apos;Source/JavaScriptCore/interpreter/Register.h&apos;, u&apos;Source/JavaScriptCore/jit/AssemblyHelpers.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCall.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITCall32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITInlines.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOperations.cpp&apos;, u&apos;Source/JavaScriptCore/jit/SpecializedThunkJIT.h&apos;, u&apos;Source/JavaScriptCore/jit/ThunkGenerators.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntData.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter.asm&apos;]&quot; exit_code: 1
Source/JavaScriptCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945141</commentid>
    <comment_count>10</comment_count>
      <attachid>215555</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-30 13:04:36 -0700</bug_when>
    <thetext>Comment on attachment 215555
patch 2: new and improved after addressing all feedback.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +	- The Register type no longer supports CallFrame* and Instruction*.
&gt; 
&gt; Line contains tab character.  [whitespace/tab] [5]

I thought I&apos;d fix that.  Will fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945164</commentid>
    <comment_count>11</comment_count>
      <attachid>215555</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-10-30 13:43:51 -0700</bug_when>
    <thetext>Comment on attachment 215555
patch 2: new and improved after addressing all feedback.

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

r=me

Please fix the enum.

&gt; Source/JavaScriptCore/interpreter/JSStack.h:70
&gt; +            Invalid = 0,
&gt; +            CodeBlock = sizeof(CallerFrameAndPC) / sizeof(Register),
&gt; +            ScopeChain,
&gt; +            Callee,
&gt; +            ArgumentCount,
&gt; +            ThisArgument,
&gt; +            FirstArgument,
&gt; +            CallFrameHeaderSize = ThisArgument,

A few things here:

(1) Let&apos;s not add Invalid to this enum. It&apos;s curious to tempt someone into using an invalid constant. Instead, let&apos;s change the code that wants an invalid mapped virtual register number to use CodeBlock or INT_MAX.

(2) Is CallFrameHeaderSize really ThisArgument? On 64bit, ThisArgument is 6, but there are 8 entries in the call frame header. This seems like a bug. Are you trying to exclude CallerFrameAndPC from the header size? That seems weird.

(3) Michael mentioned that he liked the enum in the other order, so he could see how things laid out on the stack. Can you add a comment that shows the in-memory order of these values, or do something else to preserve that feature?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945178</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-30 14:08:34 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 215555 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215555&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; Please fix the enum.
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/JSStack.h:70
&gt; &gt; +            Invalid = 0,
&gt; &gt; +            CodeBlock = sizeof(CallerFrameAndPC) / sizeof(Register),
&gt; &gt; +            ScopeChain,
&gt; &gt; +            Callee,
&gt; &gt; +            ArgumentCount,
&gt; &gt; +            ThisArgument,
&gt; &gt; +            FirstArgument,
&gt; &gt; +            CallFrameHeaderSize = ThisArgument,
&gt; 
&gt; A few things here:
&gt; 
&gt; (1) Let&apos;s not add Invalid to this enum. It&apos;s curious to tempt someone into using an invalid constant. Instead, let&apos;s change the code that wants an invalid mapped virtual register number to use CodeBlock or INT_MAX.

Will fix, and replace uses of Invalid with INT_MAX.

&gt; (2) Is CallFrameHeaderSize really ThisArgument? On 64bit, ThisArgument is 6, but there are 8 entries in the call frame header. This seems like a bug. Are you trying to exclude CallerFrameAndPC from the header size? That seems weird.

This is not a bug, but is probably not expressed that well.  Hence the confusion.  The CallFrameHeaderSize is indeed 6 on 64-bit and 5 on 32-bit.  The CallFrameHeader does not include ThisArgument and FirstArgument, but Michael added those in his recent patch for convenience of accessing those slots.

Will rewrite as follows:

        enum CallFrameHeaderEntry {
            CodeBlock = sizeof(CallerFrameAndPC) / sizeof(Register),
            ScopeChain,
            Callee,
            ArgumentCount,
            CallFrameHeaderSize,

            // The following entries are not part of the CallFrameHeader but are provided here as a convenience:
            ThisArgument = CallFrameHeaderSize,
            FirstArgument,
        };

&gt; (3) Michael mentioned that he liked the enum in the other order, so he could see how things laid out on the stack. Can you add a comment that shows the in-memory order of these values, or do something else to preserve that feature?

I talked with Michael and he agreed that if we structure it this way, there&apos;s no need to explicitly spell out the values of those enums.  So, I&apos;ll skip this part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945185</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-30 14:25:53 -0700</bug_when>
    <thetext>Thanks for the reviews.  Landed in r158315: &lt;http://trac.webkit.org/r158315&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215385</attachid>
            <date>2013-10-29 07:13:47 -0700</date>
            <delta_ts>2013-10-30 13:00:37 -0700</delta_ts>
            <desc>patch 1.</desc>
            <filename>bug-123444.patch</filename>
            <type>text/plain</type>
            <size>52415</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBA
CisyMDEzLTEwLTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGp1c3QgQ2FsbEZyYW1lSGVhZGVy4oCZcyBSZXR1cm5QQyBhbmQgQ2FsbEZyYW1lIGxvY2F0aW9u
cyB0byBtYXRjaCB0aGUgbmF0aXZlIEFCSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzQ0NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHdhcyBwYXJ0aWFsbHkgY29udHJpYnV0ZWQg
YnkgTWljaGFlbCBTYWJvZmYuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6Cisg
ICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21w
aWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0
aW9uSGFuZGxlcnMpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjYWxsZWVGcmFtZVNsb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWxsZWVBcmd1bWVudFNsb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWxsZWVGcmFtZVRhZ1Nsb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2FsbGVlQXJndW1lbnRUYWdTbG90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdCk6CisgICAgICAgIC0gUmVuYW1lZCB0
aGVzZSB0byBjbGVhcmx5IGluZGljYXRlIHRoYXQgdGhleSBvcGVyYXRlIG9uIHRoZSBjYWxsZWUg
ZnJhbWUuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxlZUZyYW1lQ2Fs
bGVyRnJhbWUpOgorICAgICAgICAtIEFkZGVkIHRoaXMgdG8gYWNjZXNzIHRoZSBjYWxsZXJGcmFt
ZSBwb2ludGVyIGluIHRoZSBjYWxsZWUgZnJhbWUuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjYWxs
ZXJGcmFtZSk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2FsbGVyRnJhbWVPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJldHVyblBDT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
RXhlY1N0YXRlOjpyZXR1cm5QQyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGFzUmV0dXJu
UEMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyUmV0dXJuUEMpOgorICAgICAgICAo
SlNDOjpFeGVjU3RhdGU6OnNldENhbGxlckZyYW1lKToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRl
OjpzZXRSZXR1cm5QQyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAgICAg
ICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyOjpjYWxs
ZXJGcmFtZU9mZnNldCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyOjpwY09mZnNldCk6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6
Y2FsbGVyRnJhbWUpOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6dlBDKToKKyAgICAgICAgKiBq
aXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpl
bWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0Q2FsbGVyRnJhbWVUb0NhbGxGcmFtZUhlYWRlcik6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldFJldHVyblBDRnJvbUNhbGxGcmFt
ZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1dFJldHVy
blBDVG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OkpJVCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcnMpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwp
OgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhp
cyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpKSVQ6OnVubWFwKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cmV0X29iamVjdF9vcl90aGlzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmV0dXJuSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OlNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJldHVybkRvdWJsZSk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJldHVybkludDMyKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmV0dXJuSlNDZWxsKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAg
ICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0
b3IpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc206CisKIDIwMTMtMTAtMjggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBPU1JFeGl0OjptX3dhdGNocG9pbnRJbmRleCBzaG91bGQgYmUgaW4gT1NS
RXhpdENvbXBpbGF0aW9uSW5mbwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDkg
QEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jaygpIGNvbnN0OwogICAgIAorICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKTsgfQorICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNrT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxG
cmFtZTo6cmV0dXJuUENPZmZzZXQoKTsgfQorCiAgICAgdm9pZCBkdW1wQnJpZWZGdW5jdGlvbklu
Zm9ybWF0aW9uKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRl
eHQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFbnRyeSgpCiAgICAgLy8gY2hlY2spIHdoaWNoIHdpbGwg
YmUgZGVwZW5kZW50IG9uIHN0YWNrIGxheW91dC4gKFdlJ2QgbmVlZCB0byBhY2NvdW50IGZvciB0
aGlzIGluCiAgICAgLy8gYm90aCBub3JtYWwgcmV0dXJuIGNvZGUgYW5kIHdoZW4ganVtcGluZyB0
byBhbiBleGNlcHRpb24gaGFuZGxlcikuCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKEdQUkluZm86OnJlZ1QyKTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5m
bzo6cmVnVDIsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0UmV0dXJuUENUb0NhbGxG
cmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZy
YW1lSGVhZGVyKG1fY29kZUJsb2NrLCBKU1N0YWNrOjpDb2RlQmxvY2spOwogfQogCkBAIC0xMjgs
NyArMTI4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAg
IGlmICghbV9leGNlcHRpb25DaGVja3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewog
ICAgICAgICAvLyBSZW1vdmUgaG9zdENhbGxGcmFtZUZsYWcgZnJvbSBjYWxsZXIuCiAgICAgICAg
IG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7Ci0gICAg
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGFuZFB0cihU
cnVzdGVkSW1tMzIoc2FmZUNhc3Q8aW50MzJfdD4ofkNhbGxGcmFtZTo6aG9zdENhbGxGcmFtZUZs
YWcoKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBkb0xvb2t1cCA9IGp1bXAo
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNyw5ICsxMjcsOCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzCiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFp
bikpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKS0+c2NvcGUoKSksIEFzc2VtYmx5SGVscGVyczo6
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpDYWxsZXJGcmFtZSkpKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1l
R1BSLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxlckZyYW1lKSkpOwotICAgICAg
ICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQp
LCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlJldHVyblBDKSkpOworICAgICAgICBqaXQu
c3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgp
KSk7CisgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
anVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CiAgICAgICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwogICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1
Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJn
dW1lbnRDb3VudCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU4MTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYxLDEwICs2NjEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgIAogICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15
VGhpc0FyZ3VtZW50OwogCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG51bUFyZ3MpLCBjYWxsRnJhbWVQYXlsb2FkU2xvdChudW1BcmdzLCBKU1N0YWNrOjpB
cmd1bWVudENvdW50KSk7Ci0gICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGNhbGxGcmFtZVBheWxvYWRTbG90KG51bUFyZ3MsIEpTU3RhY2s6OkNhbGxlckZyYW1l
KSk7Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQYXlsb2FkR1BSLCBjYWxsRnJhbWVQYXlsb2Fk
U2xvdChudW1BcmdzLCBKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICBtX2ppdC5zdG9yZTMyKGNhbGxl
ZVRhZ0dQUiwgY2FsbEZyYW1lVGFnU2xvdChudW1BcmdzLCBKU1N0YWNrOjpDYWxsZWUpKTsKKyAg
ICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJncyksIGNh
bGxlZUZyYW1lUGF5bG9hZFNsb3QobnVtQXJncywgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwor
ICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBjYWxsZWVGcmFt
ZUNhbGxlckZyYW1lKG51bUFyZ3MpKTsKKyAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVBheWxvYWRH
UFIsIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QobnVtQXJncywgSlNTdGFjazo6Q2FsbGVlKSk7Cisg
ICAgbV9qaXQuc3RvcmUzMihjYWxsZWVUYWdHUFIsIGNhbGxlZUZyYW1lVGFnU2xvdChudW1Bcmdz
LCBKU1N0YWNrOjpDYWxsZWUpKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2Vk
QXJnczsgaSsrKSB7CiAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJB
cmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CkBAIC02NzMsOCArNjczLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBHUFJS
ZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7CiAgICAgICAgIHVzZShhcmdFZGdl
KTsKIAotICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgYXJndW1lbnRUYWdTbG90KG51
bUFyZ3MsIGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKGFy
Z1BheWxvYWRHUFIsIGFyZ3VtZW50UGF5bG9hZFNsb3QobnVtQXJncywgaSArIGR1bW15VGhpc0Fy
Z3VtZW50KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BSLCBjYWxsZWVBcmd1bWVu
dFRhZ1Nsb3QobnVtQXJncywgaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAgIG1faml0
LnN0b3JlMzIoYXJnUGF5bG9hZEdQUiwgY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChudW1Bcmdz
LCBpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICB9CiAKICAgICBmbHVzaFJlZ2lzdGVycygp
OwpAQCAtMzExNCw5ICszMTE0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3Mu
Ci0gICAgICAgIG1faml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJl
dHVyblBDLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIG1faml0LmVtaXRHZXRSZXR1cm5QQ0Zy
b21DYWxsRnJhbWVIZWFkZXJQdHIoR1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAvLyBSZXN0b3Jl
IG91ciBjYWxsZXIncyAiciIuCi0gICAgICAgIG1faml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgICAgIG1faml0LmVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICAvLyBSZXR1cm4uCiAgICAgICAg
IG1faml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QyKTsK
ICAgICAgICAgbV9qaXQucmV0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1ODE2OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4Nyw5ICs2ODcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgCiAgICAgaW50IG51bUFyZ3MgPSBudW1QYXNzZWRBcmdzICsgZHVtbXlUaGlz
QXJndW1lbnQ7CiAgICAgCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKG51bUFyZ3MpLCBjYWxsRnJhbWVQYXlsb2FkU2xvdChudW1BcmdzLCBKU1N0YWNrOjpB
cmd1bWVudENvdW50KSk7Ci0gICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgY2FsbEZyYW1lU2xvdChudW1BcmdzLCBKU1N0YWNrOjpDYWxsZXJGcmFtZSkpOwotICAg
IG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBjYWxsRnJhbWVTbG90KG51bUFyZ3MsIEpTU3RhY2s6
OkNhbGxlZSkpOworICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihudW1BcmdzKSwgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChudW1BcmdzLCBKU1N0YWNrOjpBcmd1
bWVudENvdW50KSk7CisgICAgbV9qaXQuc3RvcmU2NChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgY2FsbGVlRnJhbWVTbG90KG51bUFyZ3MsIEpTU3RhY2s6OkNhbGxlckZyYW1lKSk7CisgICAg
bV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIGNhbGxlZUZyYW1lU2xvdChudW1BcmdzLCBKU1N0YWNr
OjpDYWxsZWUpKTsKICAgICAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7
IGkrKykgewogICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwpAQCAtNjk3LDcgKzY5Nyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgR1BSUmVnIGFy
Z0dQUiA9IGFyZy5ncHIoKTsKICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAgICAgICAKLSAgICAg
ICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIGFyZ3VtZW50U2xvdChudW1BcmdzLCBpICsgZHVtbXlU
aGlzQXJndW1lbnQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIGNhbGxlZUFyZ3Vt
ZW50U2xvdChudW1BcmdzLCBpICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKICAgICB9CiAKICAgICBm
bHVzaFJlZ2lzdGVycygpOwpAQCAtMzQzNiw5ICszNDM2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRy
ZXNzLgotICAgICAgICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNr
OjpSZXR1cm5QQywgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBtX2ppdC5lbWl0R2V0UmV0dXJu
UENGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgLy8gUmVz
dG9yZSBvdXIgY2FsbGVyJ3MgInIiLgotICAgICAgICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgICAgICBtX2ppdC5lbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgLy8gUmV0dXJuLgogICAg
ICAgICBtX2ppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdU
MSk7CiAgICAgICAgIG1faml0LnJldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTU4MTY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NDEsMzUgKzc0MSw0MCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIC8vIEFjY2VzcyB0byBv
dXIgZml4ZWQgY2FsbGVlIENhbGxGcmFtZS4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBj
YWxsRnJhbWVTbG90KGludCBudW1BcmdzLCBpbnQgc2xvdCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyBjYWxsZWVGcmFtZVNsb3QoaW50IG51bUFyZ3MsIGludCBzbG90LCBpbnQgYnl0ZU9m
ZnNldCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGNhbGxlZUZyYW1lT2Zmc2V0KG51bUFyZ3MpICsg
c2l6ZW9mKFJlZ2lzdGVyKSAqIHNsb3QpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGNhbGxlZUZyYW1lT2Zmc2V0KG51
bUFyZ3MpICsgc2l6ZW9mKFJlZ2lzdGVyKSAqIHNsb3QgKyBieXRlT2Zmc2V0KTsKICAgICB9CiAK
ICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUuCi0gICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYXJndW1lbnRTbG90KGludCBudW1BcmdzLCBpbnQgYXJndW1lbnQp
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlQXJndW1lbnRTbG90KGludCBudW1B
cmdzLCBpbnQgYXJndW1lbnQpCiAgICAgewotICAgICAgICByZXR1cm4gY2FsbEZyYW1lU2xvdChu
dW1BcmdzLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpOwor
ICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVTbG90KG51bUFyZ3MsIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MgY2FsbEZyYW1lVGFnU2xvdChpbnQgbnVtQXJncywgaW50IHNsb3QpCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KGludCBudW1BcmdzLCBp
bnQgc2xvdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsRnJhbWVTbG90KG51bUFyZ3MsIHNs
b3QpLndpdGhPZmZzZXQoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChudW1BcmdzLCBzbG90
KS53aXRoT2Zmc2V0KE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbEZyYW1l
UGF5bG9hZFNsb3QoaW50IG51bUFyZ3MsIGludCBzbG90KQorICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoaW50IG51bUFyZ3MsIGludCBzbG90KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZVNsb3QobnVtQXJncywgc2xvdCkud2l0aE9mZnNl
dChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQp
KTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdChudW1BcmdzLCBzbG90KS53aXRoT2Zm
c2V0KE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFyZ3VtZW50VGFnU2xv
dChpbnQgbnVtQXJncywgaW50IGFyZ3VtZW50KQorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
IGNhbGxlZUFyZ3VtZW50VGFnU2xvdChpbnQgbnVtQXJncywgaW50IGFyZ3VtZW50KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFyZ3VtZW50U2xvdChudW1BcmdzLCBhcmd1bWVudCkud2l0aE9mZnNl
dChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwor
ICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KG51bUFyZ3MsIGFyZ3VtZW50KS53aXRo
T2Zmc2V0KE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXJndW1lbnRQYXlsb2Fk
U2xvdChpbnQgbnVtQXJncywgaW50IGFyZ3VtZW50KQorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaW50IG51bUFyZ3MsIGludCBhcmd1bWVudCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhcmd1bWVudFNsb3QobnVtQXJncywgYXJndW1lbnQpLndp
dGhPZmZzZXQoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSk7CisgICAgICAgIHJldHVybiBjYWxsZWVBcmd1bWVudFNsb3QobnVtQXJncywgYXJn
dW1lbnQpLndpdGhPZmZzZXQoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mg
Y2FsbGVlRnJhbWVDYWxsZXJGcmFtZShpbnQgbnVtQXJncykKKyAgICB7CisgICAgICAgIHJldHVy
biBjYWxsZWVGcmFtZVNsb3QobnVtQXJncywgMCwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKTsKICAgICB9CiAKICAgICB2b2lkIGVtaXRDYWxsKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTU4MTY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NyBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogc3RhdGljIHZvaWQgY29tcGlsZUVudHJ5KENDYWxs
SGVscGVycyYgaml0KQogewogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwo
R1BSSW5mbzo6cmVnVDIpOwotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5m
bzo6cmVnVDIsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBqaXQuZW1pdFB1dFJldHVyblBDVG9D
YWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5lbWl0UHV0SW1tZWRpYXRl
VG9DYWxsRnJhbWVIZWFkZXIoaml0LmNvZGVCbG9jaygpLCBKU1N0YWNrOjpDb2RlQmxvY2spOwog
fQogCkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3Rh
dGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSwKICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQUjAp
OwogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgaml0LmVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCBHUFJJbmZvOjpy
ZWdUMSk7Ci0gICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNr
OjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBqaXQu
ZW1pdEdldFJldHVyblBDRnJvbUNhbGxGcmFtZUhlYWRlclB0cihHUFJJbmZvOjpyZWdUMSk7Cisg
ICAgICAgIGppdC5lbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgaml0LnJldCgpOwogICAgICAg
ICAKQEAgLTE2Miw4ICsxNjIsOCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0
YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksCiAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIw
KTsKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGppdC5l
bWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5mbzo6
cmVnVDEpOwotICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFj
azo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgaml0
LmVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIoR1BSSW5mbzo6cmVnVDEpOwor
ICAgICAgICBqaXQuZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIGppdC5yZXQoKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZS5oCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDI2IEBAIG5hbWVz
cGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUmIG9wZXJhdG9yPShjb25zdCBSZWdpc3Rl
ciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKSA9IHI7IHJldHVybiAqdGhpczsg
fQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiB0aGlz
W0pTU3RhY2s6OkNhbGxlckZyYW1lXS5jYWxsRnJhbWUoKTsgfQorI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiB0aGlzW0pT
U3RhY2s6OkNhbGxlckZyYW1lXS5SZWdpc3Rlcjo6Y2FsbGVyRnJhbWUoKTsgfQorICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgeyByZXR1cm4gSlNTdGFjazo6Q2Fs
bGVyRnJhbWUgKiBzaXplb2YoUmVnaXN0ZXIpOyB9CisjZWxzZQorICAgICAgICBDYWxsRnJhbWUq
IGNhbGxlckZyYW1lKCkgY29uc3QgeyByZXR1cm4gdGhpc1tKU1N0YWNrOjpDYWxsZXJGcmFtZUFu
ZFJldHVyblBDXS5SZWdpc3Rlcjo6Y2FsbGVyRnJhbWUoKTsgfQorICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgeyByZXR1cm4gSlNTdGFjazo6Q2FsbGVyRnJhbWVB
bmRSZXR1cm5QQyAqIHNpemVvZihSZWdpc3RlcikgKyBSZWdpc3Rlcjo6Y2FsbGVyRnJhbWVPZmZz
ZXQoKTsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSklUKSB8fCBFTkFCTEUoTExJTlQpCisjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5QQygpIGNvbnN0
IHsgcmV0dXJuIFJldHVybkFkZHJlc3NQdHIodGhpc1tKU1N0YWNrOjpSZXR1cm5QQ10udlBDKCkp
OyB9CiAgICAgICAgIGJvb2wgaGFzUmV0dXJuUEMoKSBjb25zdCB7IHJldHVybiAhIXRoaXNbSlNT
dGFjazo6UmV0dXJuUENdLnZQQygpOyB9CiAgICAgICAgIHZvaWQgY2xlYXJSZXR1cm5QQygpIHsg
cmVnaXN0ZXJzKClbSlNTdGFjazo6UmV0dXJuUENdID0gc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rpb24q
PigwKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgeyByZXR1
cm4gSlNTdGFjazo6UmV0dXJuUEMgKiBzaXplb2YoUmVnaXN0ZXIpOyB9CisjZWxzZQorICAgICAg
ICBSZXR1cm5BZGRyZXNzUHRyIHJldHVyblBDKCkgY29uc3QgeyByZXR1cm4gUmV0dXJuQWRkcmVz
c1B0cih0aGlzW0pTU3RhY2s6OkNhbGxlckZyYW1lQW5kUmV0dXJuUENdLnZQQygpKTsgfQorICAg
ICAgICBib29sIGhhc1JldHVyblBDKCkgY29uc3QgeyByZXR1cm4gISF0aGlzW0pTU3RhY2s6OkNh
bGxlckZyYW1lQW5kUmV0dXJuUENdLnZQQygpOyB9CisgICAgICAgIHZvaWQgY2xlYXJSZXR1cm5Q
QygpIHsgcmVnaXN0ZXJzKClbSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRSZXR1cm5QQ10gPSBzdGF0
aWNfY2FzdDxJbnN0cnVjdGlvbio+KDApOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcmV0
dXJuUENPZmZzZXQoKSB7IHJldHVybiBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFJldHVyblBDICog
c2l6ZW9mKFJlZ2lzdGVyKSArIFJlZ2lzdGVyOjpwY09mZnNldCgpOyB9CisjZW5kaWYKICNlbmRp
ZgogICAgICAgICBBYnN0cmFjdFBDIGFic3RyYWN0UmV0dXJuUEMoVk0mIHZtKSB7IHJldHVybiBB
YnN0cmFjdFBDKHZtLCB0aGlzKTsgfQogCkBAIC0xOTksNyArMjE0LDExIEBAIG5hbWVzcGFjZSBK
U0MgIHsKICAgICAgICAgdm9pZCBzZXRDdXJyZW50VlBDKEluc3RydWN0aW9uKiB2cGMpOwogI2Vu
ZGlmCiAKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB2b2lkIHNldENhbGxlckZyYW1lKENh
bGxGcmFtZSogY2FsbGVyRnJhbWUpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtKU1N0
YWNrOjpDYWxsZXJGcmFtZV0gPSBjYWxsZXJGcmFtZTsgfQorI2Vsc2UgLy8gVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgdm9pZCBzZXRDYWxsZXJGcmFtZShDYWxsRnJhbWUqIGNhbGxlckZyYW1lKSB7
IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRSZXR1
cm5QQ10gPSBjYWxsZXJGcmFtZTsgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IHZvaWQgc2V0U2NvcGUoSlNTY29wZSogc2NvcGUpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0
aGlzKVtKU1N0YWNrOjpTY29wZUNoYWluXSA9IHNjb3BlOyB9CiAKICAgICAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGluaXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiB2UEMsIEpT
U2NvcGUqIHNjb3BlLApAQCAtMjc0LDggKzI5MywxMiBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAg
ICAgIHZvaWQgc2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoaW50IGNvdW50KSB7IHN0YXRp
Y19jYXN0PFJlZ2lzdGVyKj4odGhpcylbSlNTdGFjazo6QXJndW1lbnRDb3VudF0ucGF5bG9hZCgp
ID0gY291bnQ7IH0KICAgICAgICAgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSkgeyBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0pTU3RhY2s6OkNhbGxlZV0gPSBSZWdpc3Rlcjo6
d2l0aENhbGxlZShjYWxsZWUpOyB9CiAgICAgICAgIHZvaWQgc2V0Q29kZUJsb2NrKENvZGVCbG9j
ayogY29kZUJsb2NrKSB7IHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4odGhpcylbSlNTdGFjazo6Q29k
ZUJsb2NrXSA9IGNvZGVCbG9jazsgfQorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIHZvaWQg
c2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKVtK
U1N0YWNrOjpSZXR1cm5QQ10gPSAoSW5zdHJ1Y3Rpb24qKXZhbHVlOyB9Ci0gICAgICAgIAorI2Vs
c2UKKyAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBzdGF0aWNfY2FzdDxS
ZWdpc3Rlcio+KHRoaXMpW0pTU3RhY2s6OkNhbGxlckZyYW1lQW5kUmV0dXJuUENdID0gKEluc3Ry
dWN0aW9uKil2YWx1ZTsgfQorI2VuZGlmCisKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFt
ZU5vRmxhZ3MoKSB7IHJldHVybiBjYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxh
ZygpOyB9CiAKICAgICAgICAgLy8gQ2FsbEZyYW1lOjppdGVyYXRlKCkgZXhwZWN0cyBhIEZ1bmN0
b3IgdGhhdCBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgbWV0aG9kOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCShyZXZpc2lvbiAxNTgxNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MiwxNCArNTIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEpTU3RhY2spOwogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBDYWxsRnJh
bWVIZWFkZXJFbnRyeSB7Ci0gICAgICAgICAgICBDYWxsRnJhbWVIZWFkZXJTaXplID0gNiwKLQot
ICAgICAgICAgICAgQXJndW1lbnRDb3VudCA9IDYsCi0gICAgICAgICAgICBDYWxsZXJGcmFtZSA9
IDUsCi0gICAgICAgICAgICBDYWxsZWUgPSA0LAotICAgICAgICAgICAgU2NvcGVDaGFpbiA9IDMs
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIENhbGxlckZyYW1lID0gMSwKICAgICAg
ICAgICAgIFJldHVyblBDID0gMiwgLy8gVGhpcyBpcyBlaXRoZXIgYW4gSW5zdHJ1Y3Rpb24qIG9y
IGEgcG9pbnRlciBpbnRvIEpJVCBnZW5lcmF0ZWQgY29kZSBzdG9yZWQgYXMgYW4gSW5zdHJ1Y3Rp
b24qLgotICAgICAgICAgICAgQ29kZUJsb2NrID0gMSwKKyNlbHNlCisgICAgICAgICAgICAvLyBU
aGlzIGlzIGVpdGhlciBhbiBJbnN0cnVjdGlvbiogb3IgYSBwb2ludGVyIGludG8gSklUIGdlbmVy
YXRlZCBjb2RlIHN0b3JlZCBhcyBhbiBJbnN0cnVjdGlvbiouCisgICAgICAgICAgICBDYWxsZXJG
cmFtZUFuZFJldHVyblBDID0gMSwKKyNlbmRpZgorICAgICAgICAgICAgU2NvcGVDaGFpbiwKKyAg
ICAgICAgICAgIENvZGVCbG9jaywKKyAgICAgICAgICAgIEFyZ3VtZW50Q291bnQsCisgICAgICAg
ICAgICBDYWxsZWUsCisgICAgICAgICAgICBDYWxsRnJhbWVIZWFkZXJTaXplID0gQ2FsbGVlLAog
ICAgICAgICB9OwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZGVmYXVsdENhcGFjaXR5
ID0gNTEyICogMTAyNDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9S
ZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBpbnQzMl90IGkoKSBjb25zdDsKICAgICAgICAgSlNB
Y3RpdmF0aW9uKiBhY3RpdmF0aW9uKCkgY29uc3Q7Ci0gICAgICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lKCkgY29uc3Q7CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdDsKICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdDsKICAgICAgICAgSlNPYmplY3QqIGZ1
bmN0aW9uKCkgY29uc3Q7CiAgICAgICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5
TmFtZUl0ZXJhdG9yKCkgY29uc3Q7CkBAIC04OCwxNCArODgsMjYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgc3RhdGljIFJlZ2lzdGVyIHdpdGhDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSk7
CiAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IGNhbGxl
ckZyYW1lT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFJlZ2lzdGVyLCB1LmNhbGxl
ckZyYW1lQW5kUEMuY2FsbGVyRnJhbWUpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3QgcGNP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoUmVnaXN0ZXIsIHUuY2FsbGVyRnJhbWVB
bmRQQy52UEMpOyB9CisjZW5kaWYKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHVuaW9uIHsKICAg
ICAgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOwotICAgICAgICAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWU7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICAgICAgICAg
IEluc3RydWN0aW9uKiB2UEM7CiAgICAgICAgICAgICBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIGVu
Y29kZWRWYWx1ZTsKICAgICAgICAgICAgIGRvdWJsZSBudW1iZXI7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWU7CisgICAgICAgICAgICBJbnN0
cnVjdGlvbiogdlBDOworI2Vsc2UKKyAgICAgICAgICAgIHN0cnVjdCAgeworICAgICAgICAgICAg
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWU7CisgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24q
IHZQQzsKKyAgICAgICAgICAgIH0gY2FsbGVyRnJhbWVBbmRQQzsKKyNlbmRpZgogICAgICAgICAg
ICAgaW50NjRfdCBpbnRlZ2VyOwogICAgICAgICB9IHU7CiAgICAgfTsKQEAgLTEzMCw5ICsxNDIs
MTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAvLyBJbnRlcnByZXRlciBmdW5jdGlvbnMKIAot
ICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCisgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJh
dG9yPShDYWxsRnJhbWUqIGNhbGxlckZyYW1lKQogICAgIHsKLSAgICAgICAgdS5jYWxsRnJhbWUg
PSBjYWxsRnJhbWU7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgdS5jYWxsZXJGcmFtZSA9
IGNhbGxlckZyYW1lOworI2Vsc2UKKyAgICAgICAgdS5jYWxsZXJGcmFtZUFuZFBDLmNhbGxlckZy
YW1lID0gY2FsbGVyRnJhbWU7CisjZW5kaWYKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0K
IApAQCAtMTQ0LDcgKzE2MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIEFMV0FZU19JTkxJ
TkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSW5zdHJ1Y3Rpb24qIHZQQykKICAgICB7
CisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdS52UEMgPSB2UEM7CisjZWxzZQorICAgICAg
ICB1LmNhbGxlckZyYW1lQW5kUEMudlBDID0gdlBDOworI2VuZGlmCiAgICAgICAgIHJldHVybiAq
dGhpczsKICAgICB9CiAKQEAgLTE1Myw5ICsxNzMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHJldHVybiBqc1ZhbHVlKCkuYXNJbnQzMigpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgQ2FsbEZyYW1lKiBSZWdpc3Rlcjo6Y2FsbEZyYW1lKCkgY29uc3QKKyAgICBBTFdBWVNfSU5M
SU5FIENhbGxGcmFtZSogUmVnaXN0ZXI6OmNhbGxlckZyYW1lKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiB1LmNhbGxGcmFtZTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1
cm4gdS5jYWxsZXJGcmFtZTsKKyNlbHNlCisgICAgICAgIHJldHVybiB1LmNhbGxlckZyYW1lQW5k
UEMuY2FsbGVyRnJhbWU7CisjZW5kaWYKICAgICB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBD
b2RlQmxvY2sqIFJlZ2lzdGVyOjpjb2RlQmxvY2soKSBjb25zdApAQCAtMTY1LDcgKzE4OSwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIEFMV0FZU19JTkxJTkUgSW5zdHJ1Y3Rpb24qIFJlZ2lz
dGVyOjp2UEMoKSBjb25zdAogICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICByZXR1
cm4gdS52UEM7CisjZWxzZQorICAgICAgICByZXR1cm4gdS5jYWxsZXJGcmFtZUFuZFBDLnZQQzsK
KyNlbmRpZgogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBSZWdpc3Rlcjo6dW5i
b3hlZEludDMyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU4MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsNyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJl
ZyBmcm9tLCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKICAgICB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmU2NChmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKLSNlbHNlCi0gICAg
ICAgIHN0b3JlMzIoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50
cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0jZW5kaWYKKyAgICAgICAgc3RvcmVQdHIoZnJvbSwg
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFk
ZXIodm9pZCogdmFsdWUsIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5KQpAQCAt
MTQ1LDYgKzE0MSwyNiBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
dmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeSAqIHNpemVv
ZihSZWdpc3RlcikpKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJJRCB0bykKKyAgICB7CisgICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFt
ZU9mZnNldCgpKSwgdG8pOworICAgIH0KKworICAgIHZvaWQgZW1pdFB1dENhbGxlckZyYW1lVG9D
YWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tKQorICAgIHsKKyAgICAgICAgc3RvcmVQdHIo
ZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpjYWxs
ZXJGcmFtZU9mZnNldCgpKSk7CisgICAgfQorCisgICAgdm9pZCBlbWl0R2V0UmV0dXJuUENGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVySUQgdG8pCisgICAgeworICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENP
ZmZzZXQoKSksIHRvKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSkKKyAgICB7CisgICAgICAgIHN0b3JlUHRyKGZyb20s
IEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENP
ZmZzZXQoKSkpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEdQUlJlZyByZWcp
CiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgSklUOjpKSVQoVk0qIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICwgbV9qdW1wVGFy
Z2V0SW5kZXgoMCkKICAgICAsIG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQoKHVuc2lnbmVkKS0xKQot
ICAgICwgbV9tYXBwZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleChKU1N0YWNrOjpSZXR1cm5QQykKKyAg
ICAsIG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVySW5kZXgoSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRS
ZXR1cm5QQykKICAgICAsIG1fbWFwcGVkVGFnKChSZWdpc3RlcklEKS0xKQogICAgICwgbV9tYXBw
ZWRQYXlsb2FkKChSZWdpc3RlcklEKS0xKQogI2Vsc2UKQEAgLTU0Nyw3ICs1NDcsNyBAQCBDb21w
aWxhdGlvblJlc3VsdCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIG5vcCgpOwogCiAg
ICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QyKTsKLSAgICBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXIocmVnVDIsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0UmV0
dXJuUENUb0NhbGxGcmFtZUhlYWRlcihyZWdUMik7CiAgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2Fs
bEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBKU1N0YWNrOjpDb2RlQmxvY2spOwogCiAgICAgTGFi
ZWwgYmVnaW5MYWJlbCh0aGlzKTsKQEAgLTYxMiw3ICs2MTIsNyBAQCBDb21waWxhdGlvblJlc3Vs
dCBKSVQ6OnByaXZhdGVDb21waWxlKEpJCiAgICAgICAgIGFyaXR5Q2hlY2sgPSBsYWJlbCgpOwog
ICAgICAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDApLCAmbV9jb2RlQmxvY2stPm1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkKTsKICAgICAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJl
Z1QyKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QyLCBKU1N0YWNrOjpS
ZXR1cm5QQyk7CisgICAgICAgIGVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKHJlZ1Qy
KTsKICAgICAgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2Nr
LCBKU1N0YWNrOjpDb2RlQmxvY2spOwogCiAgICAgICAgIGxvYWQzMihwYXlsb2FkRm9yKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpLCByZWdUMSk7CkBAIC04MDIsNyArODAyLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFuZGxlcgogICAgIGlmICghbV9leGNlcHRpb25DaGVj
a3NXaXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICAvLyBSZW1vdmUgaG9z
dENhbGxGbGFnIGZyb20gY2FsbGVyCiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxG
cmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
ICAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAgICAgICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoc2FmZUNhc3Q8aW50MzJf
dD4ofkNhbGxGcmFtZTo6aG9zdENhbGxGcmFtZUZsYWcoKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwogICAgICAgICBkb0xvb2t1cCA9IGp1bXAoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNTgxNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDggKzYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJy
ZQogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAK
ICAgICBlbWl0TG9hZChkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIHJlZ1QyKTsKLSAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIocmVnVDIpOworICAg
IGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoY2FsbEZyYW1lUmVnaXN0
ZXIpOwogCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDIpOwogICAg
IHJldCgpOwpAQCAtNzgsOCArNzgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXRfb2JqZWN0X29y
X3RoaXMoSW5zCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgcmVnVDIpOwogICAgIEp1bXAgbm90T2JqZWN0ID0gZW1pdEp1bXBJZk5vdE9iamVj
dChyZWdUMik7CiAKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpS
ZXR1cm5QQywgcmVnVDIpOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3Rh
Y2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgZW1pdEdldFJldHVyblBD
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihyZWdUMik7CisgICAgZW1pdEdldENhbGxlckZyYW1lRnJv
bUNhbGxGcmFtZUhlYWRlclB0cihjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICByZXN0b3JlUmV0
dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMik7CiAgICAgcmV0KCk7CkBAIC04OCw4ICs4OCw4
IEBAIHZvaWQgSklUOjplbWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnMKICAgICBub3RPYmpl
Y3QubGluayh0aGlzKTsKICAgICBlbWl0TG9hZCh0aGlzUmVnLCByZWdUMSwgcmVnVDApOwogCi0g
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIHJlZ1Qy
KTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFt
ZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVI
ZWFkZXJQdHIocmVnVDIpOworICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFk
ZXJQdHIoY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4ocmVnVDIpOwogICAgIHJldCgpOwpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGkKIHsKICAgICBjYWxsT3BlcmF0aW9uV2l0
aENhbGxGcmFtZVJvbGxiYWNrT25FeGNlcHRpb24ob3BlcmF0aW9uQ2FsbEV2YWwpOwogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVt
cHR5VmFsdWVUYWcpKSk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFj
azo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBlbWl0R2V0Q2FsbGVyRnJh
bWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIHNhbXBs
ZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CiAgICAgCkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50LCBjYWxsRnJh
bWVSZWdpc3RlcikpOwogICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVnVDEsIHJlZ1QwKTsgLy8gcmVn
VDEsIHJlZ1QwIGhvbGRzIGNhbGxlZS4KIAotICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVy
LCBBZGRyZXNzKHJlZ1QzLCBKU1N0YWNrOjpDYWxsZXJGcmFtZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRk
cmVzcyhHUFJJbmZvOjpyZWdUMywgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CiAg
ICAgZW1pdFN0b3JlKEpTU3RhY2s6OkNhbGxlZSwgcmVnVDEsIHJlZ1QwLCByZWdUMyk7CiAgICAg
bW92ZShyZWdUMywgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE1ODE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpCiB7CiAgICAgY2FsbE9wZXJh
dGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKG9wZXJhdGlvbkNhbGxFdmFsKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2g2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKSkpKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
clB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGVtaXRH
ZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoY2FsbEZyYW1lUmVnaXN0ZXIpOwog
CiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTkyLDcg
Kzk5Miw3IEBAIGlubGluZSB2b2lkIEpJVDo6dW5tYXAoUmVnaXN0ZXJJRCByZWdpc3QKIGlubGlu
ZSB2b2lkIEpJVDo6dW5tYXAoKQogewogICAgIG1fbWFwcGVkQnl0ZWNvZGVPZmZzZXQgPSAodW5z
aWduZWQpLTE7Ci0gICAgbV9tYXBwZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCA9IEpTU3RhY2s6OlJl
dHVyblBDOworICAgIG1fbWFwcGVkVmlydHVhbFJlZ2lzdGVySW5kZXggPSBKU1N0YWNrOjpDYWxs
ZXJGcmFtZUFuZFJldHVyblBDOwogICAgIG1fbWFwcGVkVGFnID0gKFJlZ2lzdGVySUQpLTE7CiAg
ICAgbV9tYXBwZWRQYXlsb2FkID0gKFJlZ2lzdGVySUQpLTE7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxNTgxNjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDEyICs1NCwxMiBAQCBKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2CiAjaWYgQ1BVKFg4NikKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNj
b3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNh
bgogICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0Q2Fs
bGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QwKTsKICAgICBlbWl0R2V0RnJvbUNh
bGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDApOwogICAg
IGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4p
OwogCiAgICAgcGVlayhyZWdUMSk7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1Qx
LCBKU1N0YWNrOjpSZXR1cm5QQyk7CisgICAgZW1pdFB1dFJldHVyblBDVG9DYWxsRnJhbWVIZWFk
ZXIocmVnVDEpOwogCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoZWN4LCBlZHgs
IC4uLik7CiAgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CkBA
IC03NywxMiArNzcsMTIgQEAgSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRp
dgogI2VsaWYgQ1BVKEFSTSkKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWlu
IGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAgIC8v
IGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0Q2FsbGVyRnJhbWVG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QyKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDIpOwogICAgIGVtaXRQdXRD
ZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwogCiAgICAg
cHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNlcnZl
ZAotICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMp
OworICAgIGVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzKTsKIAogICAgIC8v
IENhbGxpbmcgY29udmVudGlvbjogICAgICBmKHIwID09IHJlZ1QwLCByMSA9PSByZWdUMSwgLi4u
KTsKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKQEAgLTEw
MCwxMiArMTAwLDEyIEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYK
ICNlbGlmIENQVShNSVBTKQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4g
aW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAgICAgLy8g
Z2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgcmVnVDApOworICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZy
b21DYWxsRnJhbWVIZWFkZXJQdHIocmVnVDApOwogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFB1dENl
bGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CiAKICAgICBw
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVk
Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7
CisgICAgZW1pdFB1dFJldHVyblBDVG9DYWxsRnJhbWVIZWFkZXIocmVnVDMpOwogCiAgICAgLy8g
Q2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoYTAsIGExLCBhMiwgYTMpOwogICAgIC8vIEhvc3Qg
ZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwpAQCAtMTMyLDEyICsxMzIsMTIgQEAg
SklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogI2VsaWYgQ1BVKFNINCkK
ICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJh
bWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAgIC8vIGdldCB0byBpdHMgZ2xvYmFs
IGRhdGEuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVy
RnJhbWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKHJlZ1QyKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpT
Y29wZUNoYWluLCByZWdUMSwgcmVnVDIpOwogICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFk
ZXIocmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwogCiAgICAgcHJlc2VydmVSZXR1cm5BZGRy
ZXNzQWZ0ZXJDYWxsKHJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNlcnZlZAotICAgIGVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOworICAgIGVtaXRQdXRSZXR1
cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzKTsKIAogICAgIC8vIENhbGxpbmcgY29udmVudGlv
bjogZihyMCA9PSByZWdUNCwgcjEgPT0gcmVnVDUsIC4uLik7CiAgICAgLy8gSG9zdCBmdW5jdGlv
biBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZQogewogICAgIEFTU0VSVChyZXR1cm5WYWx1
ZVJlZ2lzdGVyICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICBlbWl0TG9hZChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOwotICAgIHJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OlJl
dHVyblBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOworICAgIHJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENh
bGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOwogICAgIHJldCgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1ODE2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3NSwxMCArMjc1LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiog
Y3VycmUKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIHJldHVyblZhbHVlUmVnaXN0ZXIpOwogCiAgICAgLy8gR3JhYiB0aGUgcmV0dXJu
IGFkZHJlc3MuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0
dXJuUEMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KHJlZ1QxKTsKIAogICAgIC8vIFJlc3RvcmUgb3VyIGNhbGxlcidzICJyIi4KLSAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVn
aXN0ZXIpOworICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoY2Fs
bEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgLy8gUmV0dXJuLgogICAgIHJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKHJlZ1QxKTsKQEAgLTI5OCwxMCArMjk4LDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX3JldF9vYmplY3Rfb3JfdGhpcyhJbnMKICAgICBKdW1wIG5vdE9iamVjdCA9IGVtaXRK
dW1wSWZOb3RPYmplY3QocmVnVDIpOwogCiAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3Mu
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIHJl
Z1QxKTsKKyAgICBlbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QxKTsK
IAogICAgIC8vIFJlc3RvcmUgb3VyIGNhbGxlcidzICJyIi4KLSAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwor
ICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoY2FsbEZyYW1lUmVn
aXN0ZXIpOwogCiAgICAgLy8gUmV0dXJuLgogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKHJlZ1QxKTsKQEAgLTMxMywxMCArMzEzLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dF9vYmplY3Rfb3JfdGhpcyhJbnMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJldHVyblZhbHVlUmVnaXN0ZXIpOwogCiAgICAgLy8g
R3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoSlNTdGFjazo6UmV0dXJuUEMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0UmV0dXJuUENGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKHJlZ1QxKTsKIAogICAgIC8vIFJlc3RvcmUgb3VyIGNhbGxlcidzICJy
Ii4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFt
ZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgLy8gUmV0dXJuLgogICAgIHJl
c3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QxKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU4MTY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcxNyw3ICsxNzE3LDcgQEAgYXNtICgKICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIEhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICJcbiIKIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJc
biIKLSAgICAibW92IDQwKCVyMTMpLCAlcjEzXG4iCisgICAgIm1vdiA4KCVyMTMpLCAlcjEzXG4i
IC8vIEpTU3RhY2s6OkNhbGxlckZyYW1lCiAgICAgIm1vdiAlcjEzLCAlcmRpXG4iCiAgICAgImpt
cCAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkg
IlxuIgogKTsKQEAgLTE3MjgsNyArMTcyOCw3IEBAIGFzbSAoCiAiLmdsb2JsICIgU1lNQk9MX1NU
UklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCiBISURFX1NZTUJPTChnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlKSAiXG4iCiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUp
ICI6IiAiXG4iCi0gICAgIm1vdiA0MCglZWRpKSwgJWVkaVxuIgorICAgICJtb3YgOCglZWRpKSwg
JWVkaVxuIiAvLyBKU1N0YWNrOjpDYWxsZXJGcmFtZQogICAgICJtb3YgJWVkaSwgNCglZXNwKVxu
IgogICAgICJqbXAgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhF
eGVjU3RhdGUpICJcbiIKICk7CkBAIC0xNzQyLDcgKzE3NDIsNyBAQCBISURFX1NZTUJPTChnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCiAiLnRodW1iIiAiXG4iCiAiLnRodW1iX2Z1bmMgIiBU
SFVNQl9GVU5DX1BBUkFNKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIFNZTUJPTF9TVFJJ
TkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICAibGRyIHI1LCBbcjUsICM0
MF0iICJcbiIKKyAgICAibGRyIHI1LCBbcjUsICM4XSIgIlxuIiAvLyBKU1N0YWNrOjpDYWxsZXJG
cmFtZQogICAgICJtb3YgcjAsIHI1IiAiXG4iCiAgICAgImIgIiBMT0NBTF9SRUZFUkVOQ0UoZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZVdpdGhFeGVjU3RhdGUpICJcbiIKICk7CkBAIC0xNzU0LDcgKzE3
NTQsNyBAQCBhc20gKAogSElERV9TWU1CT0woZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgog
SU5MSU5FX0FSTV9GVU5DVElPTihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKQogU1lNQk9MX1NUUklO
RyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiOiIgIlxuIgotICAgICJsZHIgcjUsIFtyNSwgIzQw
XSIgIlxuIgorICAgICJsZHIgcjUsIFtyNSwgIzhdIiAiXG4iIC8vIEpTU3RhY2s6OkNhbGxlckZy
YW1lCiAgICAgIm1vdiByMCwgcjUiICJcbiIKICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShnZXRI
b3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgogKTsKQEAgLTE3NzgsNyArMTc3
OCw3IEBAIGFzbSAoCiBISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCiBT
WU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4iCiAgICAgTE9BRF9G
VU5DVElPTl9UT19UOShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkKLSAgICAi
bHcgJHMwLCA0MCgkczApIiAiXG4iCisgICAgImx3ICRzMCwgOCgkczApIiAiXG4iIC8vIEpTU3Rh
Y2s6OkNhbGxlckZyYW1lCiAgICAgIm1vdmUgJGEwLCAkczAiICJcbiIKICAgICAiYiAiIExPQ0FM
X1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgogKTsK
QEAgLTE3ODksNyArMTc4OSw3IEBAIGFzbSAoCiAiLmdsb2JsICIgU1lNQk9MX1NUUklORyhnZXRI
b3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCiBISURFX1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZh
bHVlKSAiXG4iCiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICI6IiAiXG4i
Ci0gICAgImFkZCAjNDAsIHIxNCIgIlxuIgorICAgICJhZGQgIzgsIHIxNCIgIlxuIiAvLyBKU1N0
YWNrOjpDYWxsZXJGcmFtZQogICAgICJtb3YubCBAcjE0LCByMTQiICJcbiIKICAgICAibW92IHIx
NCwgcjQiICJcbiIKICAgICAibW92LmwgMmYsICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIgpA
QCAtMTgwNCw3ICsxODA0LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgX19kZWNsc3BlYyhuYWtlZCkg
RW5jb2RlZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSgpCiAgICAgewogICAgICAgICBfX2FzbSB7Ci0gICAgICAgICAgICBtb3YgZWRp
LCBbZWRpICsgNDBdOworICAgICAgICAgICAgbW92IGVkaSwgW2VkaSArIDhdOyAvLyBKU1N0YWNr
OjpDYWxsZXJGcmFtZQogICAgICAgICAgICAgbW92IFtlc3AgKyA0XSwgZWRpOwogICAgICAgICAg
ICAgam1wIGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlCiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBheWxvYWQsIHBh
eWxvYWQgPT0gcmVnVDApOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0YWcsIHRhZyA9PSBy
ZWdUMSk7Ci0gICAgICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IoSlNTdGFjazo6Q2FsbGVyRnJh
bWUsIGNhbGxGcmFtZVJlZ2lzdGVyKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgICAgICByZXQoKTsKICAgICAg
ICAgfQogI2VuZGlmCkBAIC0xMzEsNyArMTMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBsb3dOb25aZXJvLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBoaWdoTm9uWmVyby5saW5r
KHRoaXMpOwogI2VuZGlmCi0gICAgICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IoSlNTdGFjazo6
Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAg
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgICAgICByZXQo
KTsKICAgICAgICAgfQogCkBAIC0xNDAsNyArMTQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBpZiAoc3JjICE9IHJlZ1QwKQogICAgICAgICAgICAgICAgIG1vdmUoc3JjLCByZWdU
MCk7CiAgICAgICAgICAgICB0YWdSZXR1cm5Bc0ludDMyKCk7Ci0gICAgICAgICAgICBsb2FkUHRy
KHBheWxvYWRGb3IoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJl
Z2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CiAgICAgICAgICAgICByZXQoKTsKICAgICAgICAgfQogCkBAIC0xNDksNyArMTQ5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoc3JjICE9IHJlZ1QwKQogICAgICAgICAg
ICAgICAgIG1vdmUoc3JjLCByZWdUMCk7CiAgICAgICAgICAgICB0YWdSZXR1cm5Bc0pTQ2VsbCgp
OwotICAgICAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBj
YWxsRnJhbWVSZWdpc3RlciksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICAgICAgcmV0KCk7CiAgICAgICAgIH0K
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCShyZXZpc2lvbiAxNTgxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiAgICAgLy8gVGhlIENhbGxG
cmFtZSByZWdpc3RlciBwb2ludHMgdG8gdGhlIChmYWlsZWQpIGNhbGxlZSBmcmFtZSwgc28gd2Ug
bmVlZCB0byBwb3AgYmFjayBvbmUgZnJhbWUuCiAgICAgaml0LmxvYWRQdHIoCi0gICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIp
KSAqIEpTU3RhY2s6OkNhbGxlckZyYW1lKSwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0
KCkpLAogICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICBqaXQuc2V0
dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKQEAgLTkwLDkgKzg4LDcgQEAgc3RhdGljIHZvaWQgc2xv
d1BhdGhGb3IoCiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJn
R1BSMik7CiAgICAgaml0LnN0b3JlUHRyKAogICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIyLAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQykpOworICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENP
ZmZzZXQoKSkpOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
JnZtLT50b3BDYWxsRnJhbWUpOwogICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwog
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0xMDQsMTUg
KzEwMCwxMSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICAvLyAyKSBIb3N0IGNhbGwg
cmV0dXJuIHZhbHVlIHJldHVybmVyIHRoaW5neS4KICAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8g
Y2FsbC4KICAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAot
ICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6UmV0dXJuUEMp
LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksCiAgICAgICAgIEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUik7CiAgICAgaml0LnN0b3JlUHRyKAogICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygK
LSAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBD
KSk7CisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSk7CiAgICAgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKICAgICBqaXQu
cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
UmV0dXJuR1BSKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CkBAIC0yNzIsMTIgKzI2NCwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUZvckdlCiAjaWYgQ1BVKFg4NikKICAgICAvLyBMb2FkIGNhbGxlciBmcmFt
ZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBj
YWxsIGNhbgogICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgaml0LmVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBKU0ludGVyZmFjZUpJ
VDo6cmVnVDApOworICAgIGppdC5lbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRl
cihKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwogCiAgICAgaml0
LnBlZWsoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1l
SGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6UmV0dXJuUEMpOworICAgIGpp
dC5lbWl0UHV0UmV0dXJuUENUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDEp
OwogCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoZWN4LCBlZHgsIC4uLik7CiAg
ICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CkBAIC0yOTYsMTIg
KzI4OCwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAjZWxp
ZiBDUFUoWDg2XzY0KQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50
byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0
IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CisgICAgaml0
LmVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwKTsKICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
U2NvcGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFjZUpJVDo6cmVnVDAp
OwogICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CiAKICAgICBqaXQucGVlayhKU0ludGVyZmFjZUpJ
VDo6cmVnVDEpOwotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QxLCBKU1N0YWNrOjpSZXR1cm5QQyk7CisgICAgaml0LmVtaXRQdXRSZXR1cm5QQ1Rv
Q2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7CiAKICNpZiAhT1MoV0lORE9X
UykKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlZGksIGVzaSwgZWR4LCBlY3gs
IC4uLik7CkBAIC0zNDEsMTIgKzMzMywxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG5hdGl2ZUZvckdlCiAKICAgICAvLyBMb2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGlu
dG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAgIC8vIGdl
dCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVy
UHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBBUk02NFJlZ2lzdGVyczo6eDMpOworICAgIGppdC5l
bWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEFSTTY0UmVnaXN0ZXJzOjp4
Myk7CiAgICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3Bl
Q2hhaW4sIEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgQVJNNjRSZWdpc3RlcnM6OngzKTsKICAgICBq
aXQuZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpT
U3RhY2s6OlNjb3BlQ2hhaW4pOwogCiAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChKU0ludGVyZmFjZUpJVDo6cmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCi0gICAgaml0
LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihBUk02NFJlZ2lzdGVyczo6bHIsIEpTU3RhY2s6OlJl
dHVyblBDKTsKKyAgICBqaXQuZW1pdFB1dFJldHVyblBDVG9DYWxsRnJhbWVIZWFkZXIoQVJNNjRS
ZWdpc3RlcnM6OmxyKTsKIAogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNT
dGF0ZSopOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlciwg
QVJNNjRSZWdpc3RlcnM6OngwKTsKQEAgLTM2MSwxMiArMzUzLDEyIEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICNlbGlmIENQVShBUk0pCiAgICAgLy8gTG9hZCBj
YWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hh
dGV2ZXIgd2UgY2FsbCBjYW4KICAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgotICAgIGpp
dC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QyKTsKKyAgICBqaXQuZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxG
cmFtZUhlYWRlclB0cihKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGppdC5lbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6
cmVnVDEsIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LmVtaXRQdXRDZWxsVG9DYWxs
RnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsK
IAogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNlcnZlZAotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVI
ZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7CisgICAgaml0
LmVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7
CiAKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihyMCA9PSByZWdUMCwgcjEgPT0g
cmVnVDEsIC4uLik7CiAgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRl
Kik7CkBAIC0zODIsMTIgKzM3NCwxMiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5h
dGl2ZUZvckdlCiAjZWxpZiBDUFUoU0g0KQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2Nv
cGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2Fu
CiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBqaXQuZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50ZXJmYWNlSklUOjpyZWdU
Mik7CisgICAgaml0LmVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNJ
bnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDIpOwogICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50
ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CiAKICAgICBqaXQucHJlc2Vy
dmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7IC8vIENhbGxl
ZSBwcmVzZXJ2ZWQKLSAgICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNl
SklUOjpyZWdUMywgSlNTdGFjazo6UmV0dXJuUEMpOworICAgIGppdC5lbWl0UHV0UmV0dXJuUENU
b0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwogCiAgICAgLy8gQ2FsbGlu
ZyBjb252ZW50aW9uOiBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdUNSwgLi4uKTsKICAgICAvLyBI
b3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKQEAgLTQwMywxMiArMzk1LDEy
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICNlbGlmIENQVShN
SVBTKQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNh
bGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBn
bG9iYWwgZGF0YS4KLSAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFj
azo6Q2FsbGVyRnJhbWUsIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CisgICAgaml0LmVtaXRHZXRD
YWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsK
ICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFp
biwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGpp
dC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNT
dGFjazo6U2NvcGVDaGFpbik7CiAKICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJD
YWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKLSAgICBqaXQu
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMywgSlNTdGFjazo6
UmV0dXJuUEMpOworICAgIGppdC5lbWl0UHV0UmV0dXJuUENUb0NhbGxGcmFtZUhlYWRlcihKU0lu
dGVyZmFjZUpJVDo6cmVnVDMpOwogCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYo
YTAsIGExLCBhMiwgYTMpOwogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNT
dGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJ
KHJldmlzaW9uIDE1ODE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMyArNzAsMjggQEAgdm9pZCBEYXRhOjpwZXJm
b3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgCiAgICAgLy8gQXNzZXJ0aW9ucyB0byBtYXRjaCBM
b3dMZXZlbEludGVycHJldGVyLmFzbS4gIElmIHlvdSBjaGFuZ2UgYW55IG9mIHRoaXMgY29kZSwg
YmUKICAgICAvLyBwcmVwYXJlZCB0byBjaGFuZ2UgTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYXMg
d2VsbCEhCi0gICAgQVNTRVJUKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKiA4ID09IDQ4
KTsKLSAgICBBU1NFUlQoSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIDggPT0gNDgpOwotICAgIEFT
U0VSVChKU1N0YWNrOjpDYWxsZXJGcmFtZSAqIDggPT0gNDApOwotICAgIEFTU0VSVChKU1N0YWNr
OjpDYWxsZWUgKiA4ID09IDMyKTsKLSAgICBBU1NFUlQoSlNTdGFjazo6U2NvcGVDaGFpbiAqIDgg
PT0gMjQpOwotICAgIEFTU0VSVChKU1N0YWNrOjpSZXR1cm5QQyAqIDggPT0gMTYpOwotICAgIEFT
U0VSVChKU1N0YWNrOjpDb2RlQmxvY2sgKiA4ID09IDgpOworCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBjb25zdCBwdHJkaWZmX3QgUHRyU2l6ZSA9IDg7CisgICAgY29uc3QgcHRyZGlmZl90IENh
bGxGcmFtZUhlYWRlclNsb3RzID0gNjsKKyNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGkuZS4g
MzItYml0IHZlcnNpb24KKyAgICBjb25zdCBwdHJkaWZmX3QgUHRyU2l6ZSA9IDQ7CisgICAgY29u
c3QgcHRyZGlmZl90IENhbGxGcmFtZUhlYWRlclNsb3RzID0gNTsKKyNlbmRpZgorICAgIGNvbnN0
IHB0cmRpZmZfdCBTbG90U2l6ZSA9IDg7CisKKyAgICBBU1NFUlQoc2l6ZW9mKHZvaWQqKSA9PSBQ
dHJTaXplKTsKKyAgICBBU1NFUlQoc2l6ZW9mKFJlZ2lzdGVyKSA9PSBTbG90U2l6ZSk7CisgICAg
QVNTRVJUKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgPT0gQ2FsbEZyYW1lSGVhZGVyU2xv
dHMpOworCisgICAgQVNTRVJUKENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSA9PSBTbG90
U2l6ZSk7CisgICAgQVNTRVJUKENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSA9PSBDYWxsRnJh
bWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkgKyBQdHJTaXplKTsKKyAgICBBU1NFUlQoSlNTdGFjazo6
U2NvcGVDaGFpbiAqIHNpemVvZihSZWdpc3RlcikgPT0gQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNl
dCgpICsgUHRyU2l6ZSk7CisgICAgQVNTRVJUKEpTU3RhY2s6OkNvZGVCbG9jayAqIHNpemVvZihS
ZWdpc3RlcikgPT0gSlNTdGFjazo6U2NvcGVDaGFpbiAqIHNpemVvZihSZWdpc3RlcikgKyBTbG90
U2l6ZSk7CisgICAgQVNTRVJUKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0
ZXIpID09IEpTU3RhY2s6OkNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikgKyBTbG90U2l6ZSk7
CisgICAgQVNTRVJUKEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikgPT0gSlNTdGFj
azo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikgKyBTbG90U2l6ZSk7CisgICAgQVNT
RVJUKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKiBzaXplb2YoUmVnaXN0ZXIpID09IEpT
U3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpOworCiAgICAgQVNTRVJUKENhbGxGcmFt
ZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApID09IEpTU3RhY2s6OkNhbGxGcmFtZUhl
YWRlclNpemUgKyAxKTsKICNpZiBDUFUoQklHX0VORElBTikKICAgICBBU1NFUlQoT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpID09IDApOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkocmV2aXNpb24gMTU4MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMjUgQEAg
aWYgQVJNdjdzCiBlbmQKIAogIyBUaGVzZSBkZWNsYXJhdGlvbnMgbXVzdCBtYXRjaCBpbnRlcnBy
ZXRlci9KU1N0YWNrLmguCi1jb25zdCBDYWxsRnJhbWVIZWFkZXJTaXplID0gNDgKKworaWYgSlNW
QUxVRTY0Citjb25zdCBQdHJTaXplID0gOAogY29uc3QgQ2FsbEZyYW1lSGVhZGVyU2xvdHMgPSA2
Ci1jb25zdCBBcmd1bWVudENvdW50ID0gNDgKLWNvbnN0IENhbGxlckZyYW1lID0gNDAKLWNvbnN0
IENhbGxlZSA9IDMyCi1jb25zdCBTY29wZUNoYWluID0gMjQKLWNvbnN0IFJldHVyblBDID0gMTYK
LWNvbnN0IENvZGVCbG9jayA9IDgKK2Vsc2UKK2NvbnN0IFB0clNpemUgPSA0Citjb25zdCBDYWxs
RnJhbWVIZWFkZXJTbG90cyA9IDUKK2VuZAorY29uc3QgU2xvdFNpemUgPSA4CisKK2NvbnN0IENh
bGxlckZyYW1lID0gU2xvdFNpemUKK2NvbnN0IFJldHVyblBDID0gQ2FsbGVyRnJhbWUgKyBQdHJT
aXplCitjb25zdCBTY29wZUNoYWluID0gUmV0dXJuUEMgKyBQdHJTaXplCitjb25zdCBDb2RlQmxv
Y2sgPSBTY29wZUNoYWluICsgU2xvdFNpemUKK2NvbnN0IEFyZ3VtZW50Q291bnQgPSBDb2RlQmxv
Y2sgKyBTbG90U2l6ZQorY29uc3QgQ2FsbGVlID0gQXJndW1lbnRDb3VudCArIFNsb3RTaXplCitj
b25zdCBDYWxsRnJhbWVIZWFkZXJTaXplID0gQ2FsbGVlCiAKLWNvbnN0IFRoaXNBcmd1bWVudE9m
ZnNldCA9IENhbGxGcmFtZUhlYWRlclNpemUgKyA4Citjb25zdCBUaGlzQXJndW1lbnRPZmZzZXQg
PSBDYWxsRnJhbWVIZWFkZXJTaXplICsgU2xvdFNpemUKIAogIyBTb21lIHZhbHVlIHJlcHJlc2Vu
dGF0aW9uIGNvbnN0YW50cy4KIGlmIEpTVkFMVUU2NAo=
</data>
<flag name="review"
          id="238095"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="238097"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215555</attachid>
            <date>2013-10-30 13:00:37 -0700</date>
            <delta_ts>2013-10-30 13:43:51 -0700</delta_ts>
            <desc>patch 2: new and improved after addressing all feedback.</desc>
            <filename>bug-123444b.patch</filename>
            <type>text/plain</type>
            <size>56600</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU4MzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBA
QAorMjAxMy0xMC0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRqdXN0IENhbGxGcmFtZUhlYWRlcidzIFJldHVyblBDIGFuZCBDYWxsRnJhbWUgbG9jYXRpb25z
IHRvIG1hdGNoIHRoZSBuYXRpdmUgQUJJIC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzQ0NC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAtIEludHJvZHVjZWQgYW4gZXhwbGljaXQgQ2FsbGVyRnJhbWVB
bmRQQyBzdHJ1Y3QuCisgICAgICAgIC0gQSBDYWxsRnJhbWUgaXMgZXhwZWN0ZWQgdG8gc3RhcnQg
d2l0aCBhIENhbGxlckZyYW1lQW5kUEMgc3RydWN0LiAKKwktIFRoZSBSZWdpc3RlciB0eXBlIG5v
IGxvbmdlciBzdXBwb3J0cyBDYWxsRnJhbWUqIGFuZCBJbnN0cnVjdGlvbiouCisKKyAgICAgICAg
ICBUaGVzZSBoaWRlcyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBKU1ZBTFVFMzJfNjQgYW5kIEpT
VkFMVUU2NCBpbgorICAgICAgICAgIHRlcm1zIG9mIG1hbmFnaW5nIHRoZSBjYWxsZXJGcmFtZSgp
IGFuZCByZXR1cm5QQygpIHZhbHVlcy4KKworICAgICAgICAtIENvbnZlcnQgYWxsIHVzZXMgb2Yg
SlNTdGFjazo6Q2FsbGVyRnJhbWUgYW5kIEpTU3RhY2s6OlJldHVyblBDIHRvCisgICAgICAgICAg
Z28gdGhyb3VnaCBDYWxsRnJhbWUgdG8gYWNjZXNzIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgYW5k
IG9mZnNldHMuCisgICAgICAgICAgQ2FsbEZyYW1lLCBpbiB0dXJuLCB3aWxsIGFjY2VzcyB0aGUg
Y2FsbGVyRnJhbWUgYW5kIHJldHVyblBDIHZpYQorICAgICAgICAgIHRoZSBDYWxsZXJGcmFtZUFu
ZFBDIHN0cnVjdC4KKworICAgICAgICAtIElubGluZUNhbGxGcmFtZSB3aWxsIHByb3ZpZGUgb2Zm
c2V0cyBmb3IgaXRzIGNhbGxlckZyYW1lIGFuZAorICAgICAgICAgIHJldHVyblBDLiBJdCB3aWxs
IG1ha2UgdXNlIG9mIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSBhbmQKKyAgICAgICAg
ICBDYWxsZXJGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSB0byBjb21wdXRlIHRoZXNlLgorCisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OmNhbGxlckZyYW1lT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpy
ZXR1cm5QQ09mZnNldCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbGVlRnJhbWVTbG90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbGVlQXJndW1lbnRTbG90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbGVlRnJhbWVUYWdTbG90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xvdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxlZUFyZ3VtZW50VGFnU2xv
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxlZUFyZ3VtZW50UGF5
bG9hZFNsb3QpOgorICAgICAgICAtIFByZWZpeGVkIGFsbCB0aGUgYWJvdmUgd2l0aCBjYWxsZWUg
c2luY2UgdGhleSBhcHBseSB0byB0aGUgY2FsbGVlIGZyYW1lLgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYWxsZWVGcmFtZUNhbGxlckZyYW1lKToKKyAgICAgICAgLSBBZGRl
ZCB0byBzZXQgdGhlIGNhbGxlckZyYW1lIHBvaW50ZXIgaW4gdGhlIGNhbGxlZSBmcmFtZS4KKwor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZU
TExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVFbnRyeSk6CisgICAgICAgIChK
U0M6OkZUTDo6bGluayk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAg
ICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2FsbGVyRnJhbWUpOgorICAgICAgICAoSlNDOjpFeGVjU3Rh
dGU6OmNhbGxlckZyYW1lT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpyZXR1cm5Q
Qyk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6aGFzUmV0dXJuUEMpOgorICAgICAgICAoSlND
OjpFeGVjU3RhdGU6OmNsZWFyUmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OnJl
dHVyblBDT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpzZXRDYWxsZXJGcmFtZSk6
CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6c2V0UmV0dXJuUEMpOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6OmNhbGxlckZyYW1lQW5kUEMpOgorICAgICAgICAqIGludGVycHJldGVyL0pTU3Rh
Y2suaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAtIENvbnZlcnQgdG8gdXNpbmcgc3RvcmVQdHIo
KSBoZXJlIGFuZCBzaW1wbGlmeSB0aGUgY29kZS4KKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0UHV0Q2FsbGVyRnJhbWVUb0NhbGxGcmFtZUhlYWRl
cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEdldFJldHVyblBDRnJvbUNh
bGxGcmFtZUhlYWRlclB0cik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFB1
dFJldHVyblBDVG9DYWxsRnJhbWVIZWFkZXIpOgorICAgICAgICAtIEhlbHBlcnMgdG8gZW1pdCBn
ZXRzL3B1dHMgb2YgdGhlIGNhbGxlckZyYW1lIGFuZCByZXR1cm5QQy4KKyAgICAgICAgKEpTQzo6
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldCk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVFeGNlcHRpb25I
YW5kbGVycyk6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6Cisg
ICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkpJVDo6dW5tYXApOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRl
Q29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaDoKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmV0dXJu
SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OnJldHVybkRvdWJs
ZSk6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OnJldHVybkludDMyKToKKyAg
ICAgICAgKEpTQzo6U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmV0dXJuSlNDZWxsKToKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6c2xvd1BhdGhGb3IpOgor
ICAgICAgICAoSlNDOjpuYXRpdmVGb3JHZW5lcmF0b3IpOgorCisgICAgICAgICogbGxpbnQvTExJ
bnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25z
KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgLSBV
cGRhdGVkIG9mZnNldHMgYW5kIGFzc2VydHMgdG8gbWF0Y2ggdGhlIG5ldyBDYWxsRnJhbWUgbGF5
b3V0LgorCiAyMDEzLTEwLTI1ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgSlNFeHBvcnQgZG9lc24ndCBzdXBwb3J0IGNvbnN0cnVjdG9ycwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lv
biAxNTgyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDkgQEAgc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaygpIGNvbnN0OwogICAg
IAorICAgIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNr
T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KTsgfQorICAgIHB0cmRpZmZfdCByZXR1cm5QQ09mZnNldCgpIGNvbnN0IHsgcmV0dXJuIHN0YWNr
T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKTsg
fQorCiAgICAgdm9pZCBkdW1wQnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTgy
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVF
bnRyeSgpCiAgICAgLy8gY2hlY2spIHdoaWNoIHdpbGwgYmUgZGVwZW5kZW50IG9uIHN0YWNrIGxh
eW91dC4gKFdlJ2QgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIGluCiAgICAgLy8gYm90aCBub3Jt
YWwgcmV0dXJuIGNvZGUgYW5kIHdoZW4ganVtcGluZyB0byBhbiBleGNlcHRpb24gaGFuZGxlciku
CiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QyKTsKLSAg
ICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIEpTU3RhY2s6OlJldHVy
blBDKTsKKyAgICBlbWl0UHV0UmV0dXJuUENUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdU
Mik7CiAgICAgZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBK
U1N0YWNrOjpDb2RlQmxvY2spOwogfQogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgIGlmICghbV9leGNlcHRpb25DaGVja3NX
aXRoQ2FsbEZyYW1lUm9sbGJhY2suZW1wdHkoKSkgewogICAgICAgICAvLyBSZW1vdmUgaG9zdENh
bGxGcmFtZUZsYWcgZnJvbSBjYWxsZXIuCiAgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzV2l0aENh
bGxGcmFtZVJvbGxiYWNrLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgICAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CiAgICAgICAgIGFuZFB0cihUcnVzdGVkSW1tMzIoc2FmZUNhc3Q8aW50
MzJfdD4ofkNhbGxGcmFtZTo6aG9zdENhbGxGcmFtZUZsYWcoKSkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOwogICAgICAgICBkb0xvb2t1cCA9IGp1bXAoKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCShyZXZpc2lvbiAxNTgyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw4ICsxMTEsOCBA
QCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgIGppdC5z
dG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2sp
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykpKTsKICAgICAgICAgaWYg
KCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQuc3RvcmU2
NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCktPnNjb3BlKCkpKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFpbikpKTsKLSAgICAgICAgaml0LnN0b3JlNjQoY2Fs
bGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVyRnJhbWUpKSk7
Ci0gICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVt
cFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6UmV0dXJuUEMpKSk7CisgICAg
ICAgIGppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworICAg
ICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJn
ZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CkBAIC0xMjcsOSArMTI3LDggQEAgdm9pZCByZWlm
eUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBqaXQuc3RvcmUzMihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
LT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCktPnNjb3Bl
KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7Ci0gICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVyRnJhbWUpKSk7Ci0gICAgICAgIGpp
dC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpD
YWxsZXJGcmFtZSkpKTsKLSAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpSZXR1
cm5QQykpKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVP
ZmZzZXQoKSkpOworICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0
KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogICAgICAgICBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZUluc3RydWN0aW9uKGlu
c3RydWN0aW9uKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1ODI3MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2MSwxMCArNjYxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICAKICAgICBpbnQgbnVtQXJncyA9IG51bVBhc3NlZEFyZ3MgKyBkdW1teVRoaXNBcmd1
bWVudDsKIAotICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihu
dW1BcmdzKSwgY2FsbEZyYW1lUGF5bG9hZFNsb3QobnVtQXJncywgSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpOwotICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBj
YWxsRnJhbWVQYXlsb2FkU2xvdChudW1BcmdzLCBKU1N0YWNrOjpDYWxsZXJGcmFtZSkpOwotICAg
IG1faml0LnN0b3JlMzIoY2FsbGVlUGF5bG9hZEdQUiwgY2FsbEZyYW1lUGF5bG9hZFNsb3QobnVt
QXJncywgSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxsZWVUYWdHUFIs
IGNhbGxGcmFtZVRhZ1Nsb3QobnVtQXJncywgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgbV9qaXQu
c3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFyZ3MpLCBjYWxsZWVGcmFt
ZVBheWxvYWRTbG90KG51bUFyZ3MsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICBtX2pp
dC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgY2FsbGVlRnJhbWVDYWxsZXJG
cmFtZShudW1BcmdzKSk7CisgICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQYXlsb2FkR1BSLCBjYWxs
ZWVGcmFtZVBheWxvYWRTbG90KG51bUFyZ3MsIEpTU3RhY2s6OkNhbGxlZSkpOworICAgIG1faml0
LnN0b3JlMzIoY2FsbGVlVGFnR1BSLCBjYWxsZWVGcmFtZVRhZ1Nsb3QobnVtQXJncywgSlNTdGFj
azo6Q2FsbGVlKSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkr
KykgewogICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRy
ZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwpAQCAtNjczLDggKzY3Myw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgR1BSUmVnIGFyZ1Bh
eWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOwogICAgICAgICB1c2UoYXJnRWRnZSk7CiAKLSAg
ICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIsIGFyZ3VtZW50VGFnU2xvdChudW1BcmdzLCBp
ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2Fk
R1BSLCBhcmd1bWVudFBheWxvYWRTbG90KG51bUFyZ3MsIGkgKyBkdW1teVRoaXNBcmd1bWVudCkp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgY2FsbGVlQXJndW1lbnRUYWdTbG90
KG51bUFyZ3MsIGkgKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgICAgICBtX2ppdC5zdG9yZTMy
KGFyZ1BheWxvYWRHUFIsIGNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QobnVtQXJncywgaSArIGR1
bW15VGhpc0FyZ3VtZW50KSk7CiAgICAgfQogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTMx
MTQsOSArMzExNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEdyYWIgdGhlIHJldHVybiBhZGRyZXNzLgotICAgICAg
ICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywg
R1BSSW5mbzo6cmVnVDIpOworICAgICAgICBtX2ppdC5lbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgLy8gUmVzdG9yZSBvdXIgY2Fs
bGVyJ3MgInIiLgotICAgICAgICBtX2ppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICBtX2ppdC5lbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgLy8gUmV0dXJuLgogICAgICAgICBtX2ppdC5y
ZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMik7CiAgICAgICAg
IG1faml0LnJldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTgyNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
ODcsOSArNjg3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgIAogICAgIGludCBudW1BcmdzID0gbnVtUGFzc2VkQXJncyArIGR1bW15VGhpc0FyZ3VtZW50
OwogICAgIAotICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihu
dW1BcmdzKSwgY2FsbEZyYW1lUGF5bG9hZFNsb3QobnVtQXJncywgSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpOwotICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGNh
bGxGcmFtZVNsb3QobnVtQXJncywgSlNTdGFjazo6Q2FsbGVyRnJhbWUpKTsKLSAgICBtX2ppdC5z
dG9yZTY0KGNhbGxlZUdQUiwgY2FsbEZyYW1lU2xvdChudW1BcmdzLCBKU1N0YWNrOjpDYWxsZWUp
KTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQXJn
cyksIGNhbGxlZUZyYW1lUGF5bG9hZFNsb3QobnVtQXJncywgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOworICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGNhbGxl
ZUZyYW1lQ2FsbGVyRnJhbWUobnVtQXJncykpOworICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BS
LCBjYWxsZWVGcmFtZVNsb3QobnVtQXJncywgSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKICAgICAgICAgRWRnZSBh
cmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQo
KSArIDEgKyBpXTsKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CiAgICAg
ICAgIHVzZShhcmdFZGdlKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BS
LCBhcmd1bWVudFNsb3QobnVtQXJncywgaSArIGR1bW15VGhpc0FyZ3VtZW50KSk7CisgICAgICAg
IG1faml0LnN0b3JlNjQoYXJnR1BSLCBjYWxsZWVBcmd1bWVudFNsb3QobnVtQXJncywgaSArIGR1
bW15VGhpc0FyZ3VtZW50KSk7CiAgICAgfQogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKQEAgLTM0
MzYsOSArMzQzNiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
IAogICAgICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KLSAgICAgICAgbV9qaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIEdQUkluZm86OnJl
Z1QxKTsKKyAgICAgICAgbV9qaXQuZW1pdEdldFJldHVyblBDRnJvbUNhbGxGcmFtZUhlYWRlclB0
cihHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIC8vIFJlc3RvcmUgb3VyIGNhbGxlcidzICJyIi4K
LSAgICAgICAgbV9qaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2Fs
bGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQuZW1p
dEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CiAgICAgICAgIC8vIFJldHVybi4KICAgICAgICAgbV9qaXQucmVzdG9yZVJldHVy
bkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICBtX2ppdC5yZXQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDE1ODI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzQxLDM1ICs3NDEsNDAgQEAgcHVibGlj
OgogICAgIH0KICAgICAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJh
bWUuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbEZyYW1lU2xvdChpbnQgbnVtQXJn
cywgaW50IHNsb3QpCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgY2FsbGVlRnJhbWVTbG90
KGludCBudW1BcmdzLCBpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgY2FsbGVlRnJhbWVPZmZz
ZXQobnVtQXJncykgKyBzaXplb2YoUmVnaXN0ZXIpICogc2xvdCk7CiAgICAgfQogCiAgICAgLy8g
QWNjZXNzIHRvIG91ciBmaXhlZCBjYWxsZWUgQ2FsbEZyYW1lLgotICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzIGFyZ3VtZW50U2xvdChpbnQgbnVtQXJncywgaW50IGFyZ3VtZW50KQorICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxlZUFyZ3VtZW50U2xvdChpbnQgbnVtQXJncywgaW50
IGFyZ3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZVNsb3QobnVtQXJncywg
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLm9mZnNldCgpKTsKKyAgICAgICAg
cmV0dXJuIGNhbGxlZUZyYW1lU2xvdChudW1BcmdzLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChhcmd1bWVudCkub2Zmc2V0KCkpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzIGNhbGxGcmFtZVRhZ1Nsb3QoaW50IG51bUFyZ3MsIGludCBzbG90KQorICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgbnVtQXJncywgaW50IHNsb3Qp
CiAgICAgewotICAgICAgICByZXR1cm4gY2FsbEZyYW1lU2xvdChudW1BcmdzLCBzbG90KS53aXRo
T2Zmc2V0KE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSk7CisgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QobnVtQXJncywgc2xvdCkud2l0aE9m
ZnNldChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
OwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxGcmFtZVBheWxvYWRT
bG90KGludCBudW1BcmdzLCBpbnQgc2xvdCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBj
YWxsZWVGcmFtZVBheWxvYWRTbG90KGludCBudW1BcmdzLCBpbnQgc2xvdCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBjYWxsRnJhbWVTbG90KG51bUFyZ3MsIHNsb3QpLndpdGhPZmZzZXQoT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAg
ICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QobnVtQXJncywgc2xvdCkud2l0aE9mZnNldChPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKICAg
ICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhcmd1bWVudFRhZ1Nsb3QoaW50IG51
bUFyZ3MsIGludCBhcmd1bWVudCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBjYWxsZWVB
cmd1bWVudFRhZ1Nsb3QoaW50IG51bUFyZ3MsIGludCBhcmd1bWVudCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhcmd1bWVudFNsb3QobnVtQXJncywgYXJndW1lbnQpLndpdGhPZmZzZXQoT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKKyAgICAgICAg
cmV0dXJuIGNhbGxlZUFyZ3VtZW50U2xvdChudW1BcmdzLCBhcmd1bWVudCkud2l0aE9mZnNldChP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAg
IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFyZ3VtZW50UGF5bG9hZFNsb3QoaW50
IG51bUFyZ3MsIGludCBhcmd1bWVudCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBjYWxs
ZWVBcmd1bWVudFBheWxvYWRTbG90KGludCBudW1BcmdzLCBpbnQgYXJndW1lbnQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYXJndW1lbnRTbG90KG51bUFyZ3MsIGFyZ3VtZW50KS53aXRoT2Zmc2V0
KE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
OworICAgICAgICByZXR1cm4gY2FsbGVlQXJndW1lbnRTbG90KG51bUFyZ3MsIGFyZ3VtZW50KS53
aXRoT2Zmc2V0KE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGNhbGxlZUZy
YW1lQ2FsbGVyRnJhbWUoaW50IG51bUFyZ3MpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbGVl
RnJhbWVTbG90KG51bUFyZ3MsIDApLndpdGhPZmZzZXQoQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKTsKICAgICB9CiAKICAgICB2b2lkIGVtaXRDYWxsKE5vZGUqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTU4MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogc3RhdGljIHZvaWQgY29tcGlsZUVudHJ5KEND
YWxsSGVscGVycyYgaml0KQogewogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNh
bGwoR1BSSW5mbzo6cmVnVDIpOwotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BS
SW5mbzo6cmVnVDIsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBqaXQuZW1pdFB1dFJldHVyblBD
VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIpOwogICAgIGppdC5lbWl0UHV0SW1tZWRp
YXRlVG9DYWxsRnJhbWVIZWFkZXIoaml0LmNvZGVCbG9jaygpLCBKU1N0YWNrOjpDb2RlQmxvY2sp
OwogfQogCkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
c3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSwKICAgICAgICAgICAgIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwogICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgaml0
LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCBHUFJJbmZv
OjpyZWdUMSk7Ci0gICAgICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpDYWxsZXJGcmFtZSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBq
aXQuZW1pdEdldFJldHVyblBDRnJvbUNhbGxGcmFtZUhlYWRlclB0cihHUFJJbmZvOjpyZWdUMSk7
CisgICAgICAgIGppdC5lbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgaml0LnJlc3RvcmVSZXR1cm5BZGRy
ZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgaml0LnJldCgpOwogICAg
ICAgICAKQEAgLTE2Miw4ICsxNjIsOCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSksCiAgICAgICAgICAgICBHUFJJbmZvOjpub25BcmdH
UFIwKTsKICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGpp
dC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgR1BSSW5m
bzo6cmVnVDEpOwotICAgICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNT
dGFjazo6Q2FsbGVyRnJhbWUsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAg
aml0LmVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIoR1BSSW5mbzo6cmVnVDEp
OworICAgICAgICBqaXQuZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgIGppdC5yZXN0b3JlUmV0dXJuQWRk
cmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIGppdC5yZXQoKTsKICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCShyZXZpc2lvbiAxNTgyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMiArMTEyLDEzIEBAIG5h
bWVzcGFjZSBKU0MgIHsKIAogICAgICAgICBDYWxsRnJhbWUmIG9wZXJhdG9yPShjb25zdCBSZWdp
c3RlciYgcikgeyAqc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0aGlzKSA9IHI7IHJldHVybiAqdGhp
czsgfQogCi0gICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25zdCB7IHJldHVybiB0
aGlzW0pTU3RhY2s6OkNhbGxlckZyYW1lXS5jYWxsRnJhbWUoKTsgfQotI2lmIEVOQUJMRShKSVQp
IHx8IEVOQUJMRShMTElOVCkKLSAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5QQygpIGNv
bnN0IHsgcmV0dXJuIFJldHVybkFkZHJlc3NQdHIodGhpc1tKU1N0YWNrOjpSZXR1cm5QQ10udlBD
KCkpOyB9Ci0gICAgICAgIGJvb2wgaGFzUmV0dXJuUEMoKSBjb25zdCB7IHJldHVybiAhIXRoaXNb
SlNTdGFjazo6UmV0dXJuUENdLnZQQygpOyB9Ci0gICAgICAgIHZvaWQgY2xlYXJSZXR1cm5QQygp
IHsgcmVnaXN0ZXJzKClbSlNTdGFjazo6UmV0dXJuUENdID0gc3RhdGljX2Nhc3Q8SW5zdHJ1Y3Rp
b24qPigwKTsgfQotI2VuZGlmCisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUoKSBjb25z
dCB7IHJldHVybiBjYWxsZXJGcmFtZUFuZFBDKCkuY2FsbGVyRnJhbWU7IH0KKyAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCBjYWxsZXJGcmFtZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihDYWxsZXJGcmFtZUFuZFBDLCBjYWxsZXJGcmFtZSk7IH0KKworICAgICAgICBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVyblBDKCkgY29uc3QgeyByZXR1cm4gUmV0dXJuQWRkcmVzc1B0cihjYWxsZXJG
cmFtZUFuZFBDKCkucGMpOyB9CisgICAgICAgIGJvb2wgaGFzUmV0dXJuUEMoKSBjb25zdCB7IHJl
dHVybiAhIWNhbGxlckZyYW1lQW5kUEMoKS5wYzsgfQorICAgICAgICB2b2lkIGNsZWFyUmV0dXJu
UEMoKSB7IGNhbGxlckZyYW1lQW5kUEMoKS5wYyA9IDA7IH0KKyAgICAgICAgc3RhdGljIHB0cmRp
ZmZfdCByZXR1cm5QQ09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDYWxsZXJGcmFt
ZUFuZFBDLCBwYyk7IH0KICAgICAgICAgQWJzdHJhY3RQQyBhYnN0cmFjdFJldHVyblBDKFZNJiB2
bSkgeyByZXR1cm4gQWJzdHJhY3RQQyh2bSwgdGhpcyk7IH0KIAogICAgICAgICBjbGFzcyBMb2Nh
dGlvbiB7CkBAIC0xOTksNyArMjAwLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICB2b2lk
IHNldEN1cnJlbnRWUEMoSW5zdHJ1Y3Rpb24qIHZwYyk7CiAjZW5kaWYKIAotICAgICAgICB2b2lk
IHNldENhbGxlckZyYW1lKENhbGxGcmFtZSogY2FsbGVyRnJhbWUpIHsgc3RhdGljX2Nhc3Q8UmVn
aXN0ZXIqPih0aGlzKVtKU1N0YWNrOjpDYWxsZXJGcmFtZV0gPSBjYWxsZXJGcmFtZTsgfQorICAg
ICAgICB2b2lkIHNldENhbGxlckZyYW1lKENhbGxGcmFtZSogZnJhbWUpIHsgY2FsbGVyRnJhbWVB
bmRQQygpLmNhbGxlckZyYW1lID0gZnJhbWU7IH0KICAgICAgICAgdm9pZCBzZXRTY29wZShKU1Nj
b3BlKiBzY29wZSkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0pTU3RhY2s6OlNjb3Bl
Q2hhaW5dID0gc2NvcGU7IH0KIAogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHZQQywgSlNTY29wZSogc2NvcGUsCkBAIC0y
NzQsOCArMjc1LDggQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICB2b2lkIHNldEFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKGludCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRo
aXMpW0pTU3RhY2s6OkFyZ3VtZW50Q291bnRdLnBheWxvYWQoKSA9IGNvdW50OyB9CiAgICAgICAg
IHZvaWQgc2V0Q2FsbGVlKEpTT2JqZWN0KiBjYWxsZWUpIHsgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
Pih0aGlzKVtKU1N0YWNrOjpDYWxsZWVdID0gUmVnaXN0ZXI6OndpdGhDYWxsZWUoY2FsbGVlKTsg
fQogICAgICAgICB2b2lkIHNldENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykgeyBzdGF0
aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0pTU3RhY2s6OkNvZGVCbG9ja10gPSBjb2RlQmxvY2s7
IH0KLSAgICAgICAgdm9pZCBzZXRSZXR1cm5QQyh2b2lkKiB2YWx1ZSkgeyBzdGF0aWNfY2FzdDxS
ZWdpc3Rlcio+KHRoaXMpW0pTU3RhY2s6OlJldHVyblBDXSA9IChJbnN0cnVjdGlvbiopdmFsdWU7
IH0KLSAgICAgICAgCisgICAgICAgIHZvaWQgc2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2Fs
bGVyRnJhbWVBbmRQQygpLnBjID0gcmVpbnRlcnByZXRfY2FzdDxJbnN0cnVjdGlvbio+KHZhbHVl
KTsgfQorCiAgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWVOb0ZsYWdzKCkgeyByZXR1cm4g
Y2FsbGVyRnJhbWUoKS0+cmVtb3ZlSG9zdENhbGxGcmFtZUZsYWcoKTsgfQogCiAgICAgICAgIC8v
IENhbGxGcmFtZTo6aXRlcmF0ZSgpIGV4cGVjdHMgYSBGdW5jdG9yIHRoYXQgaW1wbGVtZW50cyB0
aGUgZm9sbG93aW5nIG1ldGhvZDoKQEAgLTMyNCw2ICszMjUsOSBAQCBuYW1lc3BhY2UgSlNDICB7
CiAgICAgICAgICAgICByZXR1cm4gdGhpc1thcmd1bWVudE9mZnNldChhcmdJbmRleCldLmpzVmFs
dWUoKTsKICAgICAgICAgfQogCisgICAgICAgIENhbGxlckZyYW1lQW5kUEMmIGNhbGxlckZyYW1l
QW5kUEMoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxDYWxsZXJGcmFtZUFuZFBDKj4odGhp
cyk7IH0KKyAgICAgICAgY29uc3QgQ2FsbGVyRnJhbWVBbmRQQyYgY2FsbGVyRnJhbWVBbmRQQygp
IGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IENhbGxlckZyYW1lQW5kUEMq
Pih0aGlzKTsgfQorCiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU1N0YWNrOwogICAgICAgICBmcmll
bmQgY2xhc3MgVk1JbnNwZWN0b3I7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMTU4MjczKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
MTkgKzQ4LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFZNOwogICAgIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIAorICAgIHN0cnVjdCBJbnN0cnVjdGlvbjsKKyAgICB0eXBl
ZGVmIEV4ZWNTdGF0ZSBDYWxsRnJhbWU7CisKKyAgICBzdHJ1Y3QgQ2FsbGVyRnJhbWVBbmRQQyB7
CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWU7CisgICAgICAgIEluc3RydWN0aW9uKiBw
YzsKKyAgICB9OworCiAgICAgY2xhc3MgSlNTdGFjayB7CiAgICAgICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEpTU3RhY2spOwogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBDYWxsRnJhbWVIZWFk
ZXJFbnRyeSB7Ci0gICAgICAgICAgICBDYWxsRnJhbWVIZWFkZXJTaXplID0gNiwKLSAgICAgICAg
ICAgIEZpcnN0QXJndW1lbnQgPSA3LAotICAgICAgICAgICAgVGhpc0FyZ3VtZW50ID0gNiwKLSAg
ICAgICAgICAgIEFyZ3VtZW50Q291bnQgPSA1LAotICAgICAgICAgICAgQ2FsbGVyRnJhbWUgPSA0
LAotICAgICAgICAgICAgQ2FsbGVlID0gMywKLSAgICAgICAgICAgIFNjb3BlQ2hhaW4gPSAyLAot
ICAgICAgICAgICAgUmV0dXJuUEMgPSAxLCAvLyBUaGlzIGlzIGVpdGhlciBhbiBJbnN0cnVjdGlv
biogb3IgYSBwb2ludGVyIGludG8gSklUIGdlbmVyYXRlZCBjb2RlIHN0b3JlZCBhcyBhbiBJbnN0
cnVjdGlvbiouCi0gICAgICAgICAgICBDb2RlQmxvY2sgPSAwLAorICAgICAgICAgICAgSW52YWxp
ZCA9IDAsCisgICAgICAgICAgICBDb2RlQmxvY2sgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykg
LyBzaXplb2YoUmVnaXN0ZXIpLAorICAgICAgICAgICAgU2NvcGVDaGFpbiwKKyAgICAgICAgICAg
IENhbGxlZSwKKyAgICAgICAgICAgIEFyZ3VtZW50Q291bnQsCisgICAgICAgICAgICBUaGlzQXJn
dW1lbnQsCisgICAgICAgICAgICBGaXJzdEFyZ3VtZW50LAorICAgICAgICAgICAgQ2FsbEZyYW1l
SGVhZGVyU2l6ZSA9IFRoaXNBcmd1bWVudCwKICAgICAgICAgfTsKIAogICAgICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGRlZmF1bHRDYXBhY2l0eSA9IDUxMiAqIDEwMjQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAkocmV2aXNpb24gMTU4Mjcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDggKzQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvcjsKICAgICBjbGFzcyBKU1Njb3BlOwogCi0gICAgc3RydWN0IElu
c3RydWN0aW9uOwotCiAgICAgdHlwZWRlZiBFeGVjU3RhdGUgQ2FsbEZyYW1lOwogCiAgICAgY2xh
c3MgUmVnaXN0ZXIgewpAQCAtNTYsMTkgKzU0LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUoKSBjb25zdDsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEpTVmFsdWUoKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0o
Q2FsbEZyYW1lKik7CiAgICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ29kZUJsb2NrKik7CiAg
ICAgICAgIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNTY29wZSopOwotICAgICAgICBSZWdpc3RlciYg
b3BlcmF0b3I9KEluc3RydWN0aW9uKik7CiAKICAgICAgICAgaW50MzJfdCBpKCkgY29uc3Q7CiAg
ICAgICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbigpIGNvbnN0OwotICAgICAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSgpIGNvbnN0OwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNv
bnN0OwogICAgICAgICBKU09iamVjdCogZnVuY3Rpb24oKSBjb25zdDsKICAgICAgICAgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3IoKSBjb25zdDsKICAgICAgICAg
SlNTY29wZSogc2NvcGUoKSBjb25zdDsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIHZQQygpIGNvbnN0
OwogICAgICAgICBpbnQzMl90IHVuYm94ZWRJbnQzMigpIGNvbnN0OwogICAgICAgICBpbnQ2NF90
IHVuYm94ZWRJbnQ1MigpIGNvbnN0OwogICAgICAgICBpbnQ2NF90IHVuYm94ZWRTdHJpY3RJbnQ1
MigpIGNvbnN0OwpAQCAtOTEsOSArODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRl
OgogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1ZTsKLSAg
ICAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOwogICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2s7Ci0gICAgICAgICAgICBJbnN0cnVjdGlvbiogdlBDOwogICAgICAgICAgICAgRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciBlbmNvZGVkVmFsdWU7CiAgICAgICAgICAgICBkb3VibGUgbnVt
YmVyOwogICAgICAgICAgICAgaW50NjRfdCBpbnRlZ2VyOwpAQCAtMTMwLDQ0ICsxMjIsMjIgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAvLyBJbnRlcnByZXRlciBmdW5jdGlvbnMKIAotICAgIEFM
V0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCi0gICAgewotICAgICAgICB1LmNhbGxGcmFtZSA9IGNhbGxGcmFtZTsKLSAgICAgICAg
cmV0dXJuICp0aGlzOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lz
dGVyOjpvcGVyYXRvcj0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewogICAgICAgICB1LmNv
ZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSW5zdHJ1Y3Rpb24q
IHZQQykKLSAgICB7Ci0gICAgICAgIHUudlBDID0gdlBDOwotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotCiAgICAgQUxXQVlTX0lOTElORSBpbnQzMl90IFJlZ2lzdGVyOjppKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBqc1ZhbHVlKCkuYXNJbnQzMigpOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgQ2FsbEZyYW1lKiBSZWdpc3Rlcjo6Y2FsbEZyYW1lKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB1LmNhbGxGcmFtZTsKLSAgICB9Ci0gICAgCiAgICAgQUxXQVlT
X0lOTElORSBDb2RlQmxvY2sqIFJlZ2lzdGVyOjpjb2RlQmxvY2soKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIHUuY29kZUJsb2NrOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSW5z
dHJ1Y3Rpb24qIFJlZ2lzdGVyOjp2UEMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHUu
dlBDOwotICAgIH0KLQogICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCBSZWdpc3Rlcjo6dW5ib3hl
ZEludDMyKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBwYXlsb2FkKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE1
ODI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzMywxMSArMTMzLDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lk
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwgSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyRW50cnkgZW50cnkpCiAgICAgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHN0
b3JlNjQoZnJvbSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7Ci0jZWxzZQotICAgICAgICBzdG9yZTMyKGZyb20sIEFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwot
I2VuZGlmCisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAogICAgIHZvaWQg
ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKQEAgLTE0NSw2ICsxNDEsMjggQEAgcHVibGljOgog
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgfQogCisg
ICAgdm9pZCBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVy
SUQgdG8pCisgICAgeworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSksIHRvKTsKKyAgICB9Cisg
ICAgdm9pZCBlbWl0UHV0Q2FsbGVyRnJhbWVUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZy
b20pCisgICAgeworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKKyAgICB9CisK
KyAgICB2b2lkIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJJ
RCB0bykKKyAgICB7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgdG8pOworICAgIH0KKyAgICB2
b2lkIGVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSkKKyAg
ICB7CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOworICAgIH0KKyAgICB2b2lkIGVt
aXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKFRydXN0ZWRJbW1QdHIgZnJvbSkKKyAgICB7
CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSkpOworICAgIH0KKwogICAgIEp1bXAgYnJh
bmNoSWZOb3RDZWxsKEdQUlJlZyByZWcpCiAgICAgewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0x
NTQsNiArMTcyLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKKyAgICBzdGF0aWMg
QWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9mZnNldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBieXRl
T2Zmc2V0KTsKKyAgICB9CiAgICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdp
c3Rlci5pc1ZhbGlkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMTU4MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEpJVDo6SklUKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAsIG1fanVtcFRhcmdldEluZGV4KDAp
CiAgICAgLCBtX21hcHBlZEJ5dGVjb2RlT2Zmc2V0KCh1bnNpZ25lZCktMSkKLSAgICAsIG1fbWFw
cGVkVmlydHVhbFJlZ2lzdGVySW5kZXgoSlNTdGFjazo6UmV0dXJuUEMpCisgICAgLCBtX21hcHBl
ZFZpcnR1YWxSZWdpc3RlckluZGV4KEpTU3RhY2s6OkludmFsaWQpCiAgICAgLCBtX21hcHBlZFRh
ZygoUmVnaXN0ZXJJRCktMSkKICAgICAsIG1fbWFwcGVkUGF5bG9hZCgoUmVnaXN0ZXJJRCktMSkK
ICNlbHNlCkBAIC01NDcsNyArNTQ3LDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRl
Q29tcGlsZShKSQogICAgICAgICBub3AoKTsKIAogICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0Fm
dGVyQ2FsbChyZWdUMik7Ci0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QyLCBKU1N0
YWNrOjpSZXR1cm5QQyk7CisgICAgZW1pdFB1dFJldHVyblBDVG9DYWxsRnJhbWVIZWFkZXIocmVn
VDIpOwogICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywg
SlNTdGFjazo6Q29kZUJsb2NrKTsKIAogICAgIExhYmVsIGJlZ2luTGFiZWwodGhpcyk7CkBAIC02
MTIsNyArNjEyLDcgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpwcml2YXRlQ29tcGlsZShKSQog
ICAgICAgICBhcml0eUNoZWNrID0gbGFiZWwoKTsKICAgICAgICAgc3RvcmU4KFRydXN0ZWRJbW0z
MigwKSwgJm1fY29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCk7CiAgICAgICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMik7Ci0gICAgICAgIGVtaXRQdXRUb0Nh
bGxGcmFtZUhlYWRlcihyZWdUMiwgSlNTdGFjazo6UmV0dXJuUEMpOworICAgICAgICBlbWl0UHV0
UmV0dXJuUENUb0NhbGxGcmFtZUhlYWRlcihyZWdUMik7CiAgICAgICAgIGVtaXRQdXRJbW1lZGlh
dGVUb0NhbGxGcmFtZUhlYWRlcihtX2NvZGVCbG9jaywgSlNTdGFjazo6Q29kZUJsb2NrKTsKIAog
ICAgICAgICBsb2FkMzIocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgcmVnVDEp
OwpAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXIKICAgICBpZiAoIW1fZXhjZXB0aW9uQ2hlY2tzV2l0aENhbGxGcmFtZVJvbGxiYWNrLmVt
cHR5KCkpIHsKICAgICAgICAgLy8gUmVtb3ZlIGhvc3RDYWxsRmxhZyBmcm9tIGNhbGxlcgogICAg
ICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxsRnJhbWVSb2xsYmFjay5saW5rKHRoaXMpOwot
ICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFt
ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgZW1pdEdldENhbGxlckZyYW1lRnJv
bUNhbGxGcmFtZUhlYWRlclB0cihHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBhbmRQ
dHIoVHJ1c3RlZEltbTMyKHNhZmVDYXN0PGludDMyX3Q+KH5DYWxsRnJhbWU6Omhvc3RDYWxsRnJh
bWVGbGFnKCkpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICAgICAgZG9Mb29rdXAgPSBq
dW1wKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMy
XzY0LmNwcAkocmV2aXNpb24gMTU4MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIHZvaWQgSklU
OjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmUKICAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCiAgICAgZW1pdExvYWQoZHN0LCByZWdUMSwg
cmVnVDApOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlJldHVy
blBDLCByZWdUMik7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBlbWl0R2V0UmV0dXJuUENGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QyKTsKKyAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIHJlc3RvcmVSZXR1cm5B
ZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QyKTsKICAgICByZXQoKTsKQEAgLTc4LDggKzc4LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKElucwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QyKTsKICAgICBKdW1w
IG5vdE9iamVjdCA9IGVtaXRKdW1wSWZOb3RPYmplY3QocmVnVDIpOwogCi0gICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6UmV0dXJuUEMsIHJlZ1QyKTsKLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIocmVn
VDIpOworICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIpOwogCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVn
VDIpOwogICAgIHJldCgpOwpAQCAtODgsOCArODgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXRf
b2JqZWN0X29yX3RoaXMoSW5zCiAgICAgbm90T2JqZWN0LmxpbmsodGhpcyk7CiAgICAgZW1pdExv
YWQodGhpc1JlZywgcmVnVDEsIHJlZ1QwKTsKIAotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKEpTU3RhY2s6OlJldHVyblBDLCByZWdUMik7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICBlbWl0R2V0UmV0dXJuUENGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QyKTsKKyAgICBlbWl0
R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKGNhbGxGcmFtZVJlZ2lzdGVyKTsK
IAogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKHJlZ1QyKTsKICAgICByZXQo
KTsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0
aW9uKiBpCiB7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKG9wZXJhdGlvbkNhbGxFdmFsKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihj
YWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwog
ICAgIApAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlE
IG9wY29kZUkKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0YWdGb3Io
SlNTdGFjazo6QXJndW1lbnRDb3VudCwgY2FsbEZyYW1lUmVnaXN0ZXIpKTsKICAgICBlbWl0TG9h
ZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCiAK
LSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMywgSlNTdGFjazo6
Q2FsbGVyRnJhbWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAg
c3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDMsIENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogICAgIGVtaXRTdG9yZShKU1N0YWNrOjpDYWxs
ZWUsIHJlZ1QxLCByZWdUMCwgcmVnVDMpOwogICAgIG1vdmUocmVnVDMsIGNhbGxGcmFtZVJlZ2lz
dGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lv
biAxNTgyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJ
bnN0cnVjdGlvbiogaQogewogICAgIGNhbGxPcGVyYXRpb25XaXRoQ2FsbEZyYW1lUm9sbGJhY2tP
bkV4Y2VwdGlvbihvcGVyYXRpb25DYWxsRXZhbCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKSk7
Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUs
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKGNhbGxGcmFtZVJlZ2lzdGVyKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2Nv
ZGVCbG9jayk7CiAgICAgCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENh
bGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjYWxsZWUsIHJlZ1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgogCi0gICAgc3RvcmU2
NChjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2FsbGVyRnJhbWUg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisgICAgc3RvcmU2NChjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CiAgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNTdGFjazo6Q2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpOwogICAgIG1vdmUocmVnVDEs
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgJKHJldmlzaW9uIDE1ODI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OTIsNyArOTkyLDcgQEAgaW5saW5lIHZv
aWQgSklUOjp1bm1hcChSZWdpc3RlcklEIHJlZ2lzdAogaW5saW5lIHZvaWQgSklUOjp1bm1hcCgp
CiB7CiAgICAgbV9tYXBwZWRCeXRlY29kZU9mZnNldCA9ICh1bnNpZ25lZCktMTsKLSAgICBtX21h
cHBlZFZpcnR1YWxSZWdpc3RlckluZGV4ID0gSlNTdGFjazo6UmV0dXJuUEM7CisgICAgbV9tYXBw
ZWRWaXJ0dWFsUmVnaXN0ZXJJbmRleCA9IEpTU3RhY2s6OkludmFsaWQ7CiAgICAgbV9tYXBwZWRU
YWcgPSAoUmVnaXN0ZXJJRCktMTsKICAgICBtX21hcHBlZFBheWxvYWQgPSAoUmVnaXN0ZXJJRCkt
MTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDE1ODI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDEyIEBAIEpJVDo6
Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICNpZiBDUFUoWDg2KQogICAgIC8v
IExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0
aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4K
LSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwg
cmVnVDApOworICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIocmVn
VDApOwogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hh
aW4sIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdU
MSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CiAKICAgICBwZWVrKHJlZ1QxKTsKLSAgICBlbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0
UmV0dXJuUENUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSk7CiAKICAgICAvLyBDYWxsaW5nIGNvbnZl
bnRpb246ICAgICAgZihlY3gsIGVkeCwgLi4uKTsKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25h
dHVyZTogZihFeGVjU3RhdGUqKTsKQEAgLTc3LDEyICs3NywxMiBAQCBKSVQ6OkNvZGVSZWYgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAjZWxpZiBDUFUoQVJNKQogICAgIC8vIExvYWQgY2Fs
bGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRl
dmVyIHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0
R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgcmVnVDIpOwor
ICAgIGVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIocmVnVDIpOwogICAg
IGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1Qx
LCByZWdUMik7CiAgICAgZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFj
azo6U2NvcGVDaGFpbik7CiAKICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVn
VDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCi0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJl
Z1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7CisgICAgZW1pdFB1dFJldHVyblBDVG9DYWxsRnJhbWVI
ZWFkZXIocmVnVDMpOwogCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYocjAgPT0g
cmVnVDAsIHIxID09IHJlZ1QxLCAuLi4pOwogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJl
OiBmKEV4ZWNTdGF0ZSopOwpAQCAtMTAwLDEyICsxMDAsMTIgQEAgSklUOjpDb2RlUmVmIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogI2VsaWYgQ1BVKE1JUFMpCiAgICAgLy8gTG9hZCBjYWxs
ZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2
ZXIgd2UgY2FsbCBjYW4KICAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCByZWdUMCk7Cisg
ICAgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihyZWdUMCk7CiAgICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDEs
IHJlZ1QwKTsKICAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNr
OjpTY29wZUNoYWluKTsKIAogICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdU
Myk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIocmVn
VDMsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBlbWl0UHV0UmV0dXJuUENUb0NhbGxGcmFtZUhl
YWRlcihyZWdUMyk7CiAKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihhMCwgYTEs
IGEyLCBhMyk7CiAgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7
CkBAIC0xMzIsMTIgKzEzMiwxMiBAQCBKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNU
SU5hdGl2CiAjZWxpZiBDUFUoU0g0KQogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUg
Y2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAg
ICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgcmVnVDIpOworICAgIGVtaXRHZXRDYWxsZXJG
cmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIocmVnVDIpOwogICAgIGVtaXRHZXRGcm9tQ2FsbEZy
YW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJlZ1QxLCByZWdUMik7CiAgICAgZW1p
dFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CiAK
ICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwocmVnVDMpOyAvLyBDYWxsZWUgcHJl
c2VydmVkCi0gICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QzLCBKU1N0YWNrOjpSZXR1
cm5QQyk7CisgICAgZW1pdFB1dFJldHVyblBDVG9DYWxsRnJhbWVIZWFkZXIocmVnVDMpOwogCiAg
ICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiBmKHIwID09IHJlZ1Q0LCByMSA9PSByZWdUNSwgLi4u
KTsKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKQEAgLTIx
Miw3ICsyMTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB7
CiAgICAgQVNTRVJUKHJldHVyblZhbHVlUmVnaXN0ZXIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwog
ICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVzcyhjYWxsRnJh
bWVSZWdpc3RlciwgSlNTdGFjazo6UmV0dXJuUEMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpKSk7CisgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSk7CiAgICAg
cmV0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMTU4MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuVmFs
dWVSZWdpc3RlciAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5WYWx1ZVJlZ2lzdGVy
KTsKLSAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzKGNhbGxGcmFt
ZVJlZ2lzdGVyLCBKU1N0YWNrOjpSZXR1cm5QQyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKTsKKyAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpKTsKICAgICBy
ZXQoKTsKIH0KIApAQCAtMjc1LDEwICsyNzUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KElu
c3RydWN0aW9uKiBjdXJyZQogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7CiAKICAgICAvLyBHcmFi
IHRoZSByZXR1cm4gYWRkcmVzcy4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpSZXR1cm5QQywgcmVnVDEpOworICAgIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJh
bWVIZWFkZXJQdHIocmVnVDEpOwogCiAgICAgLy8gUmVzdG9yZSBvdXIgY2FsbGVyJ3MgInIiLgot
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhl
YWRlclB0cihjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICAvLyBSZXR1cm4uCiAgICAgcmVzdG9y
ZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDEpOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKElucwogICAgIEp1bXAgbm90T2Jq
ZWN0ID0gZW1pdEp1bXBJZk5vdE9iamVjdChyZWdUMik7CiAKICAgICAvLyBHcmFiIHRoZSByZXR1
cm4gYWRkcmVzcy4KLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpS
ZXR1cm5QQywgcmVnVDEpOworICAgIGVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQ
dHIocmVnVDEpOwogCiAgICAgLy8gUmVzdG9yZSBvdXIgY2FsbGVyJ3MgInIiLgotICAgIGVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihj
YWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICAvLyBSZXR1cm4uCiAgICAgcmVzdG9yZVJldHVybkFk
ZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDEpOwpAQCAtMzEzLDEwICszMTMsMTAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmV0X29iamVjdF9vcl90aGlzKElucwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmV0dXJuVmFsdWVSZWdpc3Rlcik7
CiAKICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRkcmVzcy4KLSAgICBlbWl0R2V0RnJvbUNhbGxG
cmFtZUhlYWRlclB0cihKU1N0YWNrOjpSZXR1cm5QQywgcmVnVDEpOworICAgIGVtaXRHZXRSZXR1
cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIocmVnVDEpOwogCiAgICAgLy8gUmVzdG9yZSBvdXIg
Y2FsbGVyJ3MgInIiLgotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6
OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgZW1pdEdldENhbGxlckZyYW1l
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICAvLyBSZXR1
cm4uCiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVnVDEpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
NTgyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzE3LDcgKzE3MTcsNyBAQCBhc20gKAogIi5nbG9ibCAiIFNZTUJP
TF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIlxuIgogSElERV9TWU1CT0woZ2V0SG9z
dENhbGxSZXR1cm5WYWx1ZSkgIlxuIgogU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZh
bHVlKSAiOiIgIlxuIgotICAgICJtb3YgMzIoJXIxMyksICVyMTNcbiIKKyAgICAibW92IDAoJXIx
MyksICVyMTNcbiIgLy8gQ2FsbGVyRnJhbWVBbmRQQzo6Y2FsbGVyRnJhbWUKICAgICAibW92ICVy
MTMsICVyZGlcbiIKICAgICAiam1wICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCiApOwpAQCAtMTcyOCw3ICsxNzI4LDcgQEAgYXNtICgK
ICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIEhJ
REVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIFNZTUJPTF9TVFJJTkcoZ2V0
SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKLSAgICAibW92IDMyKCVlZGkpLCAlZWRpXG4i
CisgICAgIm1vdiAwKCVlZGkpLCAlZWRpXG4iIC8vIENhbGxlckZyYW1lQW5kUEM6OmNhbGxlckZy
YW1lCiAgICAgIm1vdiAlZWRpLCA0KCVlc3ApXG4iCiAgICAgImptcCAiIExPQ0FMX1JFRkVSRU5D
RShnZXRIb3N0Q2FsbFJldHVyblZhbHVlV2l0aEV4ZWNTdGF0ZSkgIlxuIgogKTsKQEAgLTE3NDIs
NyArMTc0Miw3IEBAIEhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKICIu
dGh1bWIiICJcbiIKICIudGh1bWJfZnVuYyAiIFRIVU1CX0ZVTkNfUEFSQU0oZ2V0SG9zdENhbGxS
ZXR1cm5WYWx1ZSkgIlxuIgogU1lNQk9MX1NUUklORyhnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAi
OiIgIlxuIgotICAgICJsZHIgcjUsIFtyNSwgIzMyXSIgIlxuIgorICAgICJsZHIgcjUsIFtyNSwg
IzBdIiAiXG4iIC8vIENhbGxlckZyYW1lQW5kUEM6OmNhbGxlckZyYW1lCiAgICAgIm1vdiByMCwg
cjUiICJcbiIKICAgICAiYiAiIExPQ0FMX1JFRkVSRU5DRShnZXRIb3N0Q2FsbFJldHVyblZhbHVl
V2l0aEV4ZWNTdGF0ZSkgIlxuIgogKTsKQEAgLTE3NTQsNyArMTc1NCw3IEBAIGFzbSAoCiBISURF
X1NZTUJPTChnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSAiXG4iCiBJTkxJTkVfQVJNX0ZVTkNUSU9O
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpCiBTWU1CT0xfU1RSSU5HKGdldEhvc3RDYWxsUmV0dXJu
VmFsdWUpICI6IiAiXG4iCi0gICAgImxkciByNSwgW3I1LCAjMzJdIiAiXG4iCisgICAgImxkciBy
NSwgW3I1LCAjMF0iICJcbiIgLy8gQ2FsbGVyRnJhbWVBbmRQQzo6Y2FsbGVyRnJhbWUKICAgICAi
bW92IHIwLCByNSIgIlxuIgogICAgICJiICIgTE9DQUxfUkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0
dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCiApOwpAQCAtMTc3OCw3ICsxNzc4LDcgQEAgYXNt
ICgKIEhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIFNZTUJPTF9TVFJJ
TkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIKICAgICBMT0FEX0ZVTkNUSU9OX1RP
X1Q5KGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKQotICAgICJsdyAkczAsIDMy
KCRzMCkiICJcbiIKKyAgICAibHcgJHMwLCAwKCRzMCkiICJcbiIgLy8gQ2FsbGVyRnJhbWVBbmRQ
Qzo6Y2FsbGVyRnJhbWUKICAgICAibW92ZSAkYTAsICRzMCIgIlxuIgogICAgICJiICIgTE9DQUxf
UkVGRVJFTkNFKGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlKSAiXG4iCiApOwpA
QCAtMTc4OSw4ICsxNzg5LDcgQEAgYXNtICgKICIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGdldEhv
c3RDYWxsUmV0dXJuVmFsdWUpICJcbiIKIEhJREVfU1lNQk9MKGdldEhvc3RDYWxsUmV0dXJuVmFs
dWUpICJcbiIKIFNZTUJPTF9TVFJJTkcoZ2V0SG9zdENhbGxSZXR1cm5WYWx1ZSkgIjoiICJcbiIK
LSAgICAiYWRkICMzMiwgcjE0IiAiXG4iCi0gICAgIm1vdi5sIEByMTQsIHIxNCIgIlxuIgorICAg
ICJtb3YubCBAcjE0LCByMTQiICJcbiIgLy8gQ2FsbGVyRnJhbWVBbmRQQzo6Y2FsbGVyRnJhbWUK
ICAgICAibW92IHIxNCwgcjQiICJcbiIKICAgICAibW92LmwgMmYsICIgU0g0X1NDUkFUQ0hfUkVH
SVNURVIgIlxuIgogICAgICJicmFmICIgU0g0X1NDUkFUQ0hfUkVHSVNURVIgIlxuIgpAQCAtMTgw
NCw3ICsxODAzLDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgX19kZWNsc3BlYyhuYWtlZCkgRW5jb2Rl
ZEpTVmFsdWUgSE9TVF9DQUxMX1JFVFVSTl9WQUxVRV9PUFRJT04gZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSgpCiAgICAgewogICAgICAgICBfX2FzbSB7Ci0gICAgICAgICAgICBtb3YgZWRpLCBbZWRp
ICsgMzJdOworICAgICAgICAgICAgbW92IGVkaSwgW2VkaSArIDBdOyAvLyBDYWxsZXJGcmFtZUFu
ZFBDOjpjYWxsZXJGcmFtZQogICAgICAgICAgICAgbW92IFtlc3AgKyA0XSwgZWRpOwogICAgICAg
ICAgICAgam1wIGdldEhvc3RDYWxsUmV0dXJuVmFsdWVXaXRoRXhlY1N0YXRlCiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oCShyZXZpc2lvbiAxNTgyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNp
YWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHNyYyAhPSByZWdUMCkKICAgICAg
ICAgICAgICAgICBtb3ZlKHNyYywgcmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihwYXlsb2Fk
Rm9yKEpTU3RhY2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3RlciksIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAg
ICAgICAgICAgcmV0KCk7CiAgICAgICAgIH0KICNlbHNlCkBAIC0xMDUsNyArMTA1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocGF5bG9h
ZCwgcGF5bG9hZCA9PSByZWdUMCk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRhZywgdGFn
ID09IHJlZ1QxKTsKLSAgICAgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcihKU1N0YWNrOjpDYWxs
ZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6Y2FsbGVy
RnJhbWVPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgICAgIHJldCgpOwog
ICAgICAgICB9CiAjZW5kaWYKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIGxvd05vblplcm8ubGluayh0aGlzKTsKICAgICAgICAgICAgIGhpZ2hOb25aZXJv
LmxpbmsodGhpcyk7CiAjZW5kaWYKLSAgICAgICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcihKU1N0
YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpLCBjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgICAg
IHJldCgpOwogICAgICAgICB9CiAKQEAgLTE0MCw3ICsxNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIGlmIChzcmMgIT0gcmVnVDApCiAgICAgICAgICAgICAgICAgbW92ZShzcmMs
IHJlZ1QwKTsKICAgICAgICAgICAgIHRhZ1JldHVybkFzSW50MzIoKTsKLSAgICAgICAgICAgIGxv
YWRQdHIocGF5bG9hZEZvcihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIp
LCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSksIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAKQEAgLTE0OSw3ICsxNDks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmIChzcmMgIT0gcmVnVDApCiAgICAg
ICAgICAgICAgICAgbW92ZShzcmMsIHJlZ1QwKTsKICAgICAgICAgICAgIHRhZ1JldHVybkFzSlND
ZWxsKCk7Ci0gICAgICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IoSlNTdGFjazo6Q2FsbGVyRnJh
bWUsIGNhbGxGcmFtZVJlZ2lzdGVyKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICAgICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgICAgICAgICByZXQoKTsKICAgICAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE1ODI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTEgKzY3LDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogICAgIGppdC5wcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKIAogICAgIC8vIFRoZSBDYWxsRnJhbWUgcmVnaXN0ZXIgcG9pbnRzIHRvIHRoZSAoZmFp
bGVkKSBjYWxsZWUgZnJhbWUsIHNvIHdlIG5lZWQgdG8gcG9wIGJhY2sgb25lIGZyYW1lLgotICAg
IGppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAg
ICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpDYWxsZXJGcmFtZSksCi0gICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBqaXQuZW1pdEdldENhbGxlckZy
YW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAK
ICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25I
YW5kbGVyKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwpAQCAtODgsMTEgKzg0LDcgQEAgc3RhdGlj
IHZvaWQgc2xvd1BhdGhGb3IoCiB7CiAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChHUFJJbmZvOjpub25BcmdHUFIyKTsKICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0
LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKLSAgICBqaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUklu
Zm86Om5vbkFyZ0dQUjIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAgICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7CisgICAg
aml0LmVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86Om5vbkFyZ0dQUjIp
OwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BD
YWxsRnJhbWUpOwogICAgIGppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQ
YXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CkBAIC0xMDMsMTYgKzk1LDggQEAg
c3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgLy8gMSkgRXhjZXB0aW9uIHRocm93aW5nIHRo
dW5rLgogICAgIC8vIDIpIEhvc3QgY2FsbCByZXR1cm4gdmFsdWUgcmV0dXJuZXIgdGhpbmd5Lgog
ICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgotICAgIGppdC5sb2FkUHRyKAotICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKiBKU1N0YWNrOjpSZXR1cm5QQyksCi0gICAgICAgIEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUik7Ci0gICAgaml0LnN0b3JlUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoMCksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygKLSAgICAg
ICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlJldHVyblBDKSk7Cisg
ICAgaml0LmVtaXRHZXRSZXR1cm5QQ0Zyb21DYWxsRnJhbWVIZWFkZXJQdHIoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuZW1pdFB1dFJldHVyblBDVG9DYWxsRnJh
bWVIZWFkZXIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKICAgICBlbWl0UG9pbnRl
clZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwogICAg
IGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIpOwogICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKQEAgLTI3MiwxMiArMjU2LDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICNpZiBDUFUoWDg2KQogICAgIC8vIExvYWQgY2FsbGVy
IGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVy
IHdlIGNhbGwgY2FuCiAgICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBqaXQuZW1p
dEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEpTSW50ZXJm
YWNlSklUOjpyZWdUMCk7CisgICAgaml0LmVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKICAgICBqaXQuZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qx
LCBKU0ludGVyZmFjZUpJVDo6cmVnVDApOwogICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1l
SGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CiAKICAg
ICBqaXQucGVlayhKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5lbWl0UHV0VG9DYWxs
RnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpSZXR1cm5QQyk7Cisg
ICAgaml0LmVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpy
ZWdUMSk7CiAKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gsIGVkeCwgLi4u
KTsKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKQEAgLTI5
NiwxMiArMjgwLDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UK
ICNlbGlmIENQVShYODZfNjQpCiAgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFp
biBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KICAgICAv
LyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAg
ICBqaXQuZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU0ludGVyZmFj
ZUpJVDo6cmVnVDApOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0
YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMCk7CiAgICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKIAogICAgIGppdC5wZWVrKEpTSW50ZXJm
YWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVy
ZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAgICBqaXQuZW1pdFB1dFJldHVy
blBDVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKIAogI2lmICFPUyhX
SU5ET1dTKQogICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKGVkaSwgZXNpLCBlZHgs
IGVjeCwgLi4uKTsKQEAgLTM0MSwxMiArMzI1LDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbmF0aXZlRm9yR2UKIAogICAgIC8vIExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hh
aW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCiAgICAg
Ly8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIEFSTTY0UmVnaXN0ZXJzOjp4Myk7CisgICAg
aml0LmVtaXRHZXRDYWxsZXJGcmFtZUZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQVJNNjRSZWdpc3Rl
cnM6OngzKTsKICAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6
U2NvcGVDaGFpbiwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBBUk02NFJlZ2lzdGVyczo6eDMpOwog
ICAgIGppdC5lbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdU
MSwgSlNTdGFjazo6U2NvcGVDaGFpbik7CiAKICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7IC8vIENhbGxlZSBwcmVzZXJ2ZWQKLSAg
ICBqaXQuZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEFSTTY0UmVnaXN0ZXJzOjpsciwgSlNTdGFj
azo6UmV0dXJuUEMpOworICAgIGppdC5lbWl0UHV0UmV0dXJuUENUb0NhbGxGcmFtZUhlYWRlcihB
Uk02NFJlZ2lzdGVyczo6bHIpOwogCiAgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYo
RXhlY1N0YXRlKik7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lz
dGVyLCBBUk02NFJlZ2lzdGVyczo6eDApOwpAQCAtMzYxLDEyICszNDUsMTIgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2VsaWYgQ1BVKEFSTSkKICAgICAvLyBM
b2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhh
dCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgogICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0g
ICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlckZyYW1l
LCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOworICAgIGppdC5lbWl0R2V0Q2FsbGVyRnJhbWVGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LmVtaXRH
ZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIEpTSW50ZXJmYWNl
SklUOjpyZWdUMSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAgICBqaXQuZW1pdFB1dENlbGxU
b0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pOwogCiAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChKU0ludGVyZmFj
ZUpJVDo6cmVnVDMpOyAvLyBDYWxsZWUgcHJlc2VydmVkCi0gICAgaml0LmVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDMsIEpTU3RhY2s6OlJldHVyblBDKTsKKyAg
ICBqaXQuZW1pdFB1dFJldHVyblBDVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QzKTsKIAogICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKHIwID09IHJlZ1QwLCBy
MSA9PSByZWdUMSwgLi4uKTsKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVj
U3RhdGUqKTsKQEAgLTM4MiwxMiArMzY2LDEyIEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlRm9yR2UKICNlbGlmIENQVShTSDQpCiAgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUn
cyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2Fs
bCBjYW4KICAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBkYXRhLgotICAgIGppdC5lbWl0R2V0RnJv
bUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QyKTsKKyAgICBqaXQuZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0
cihKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTSW50
ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIo
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKIAogICAgIGppdC5w
cmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsgLy8g
Q2FsbGVlIHByZXNlcnZlZAotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRl
cmZhY2VKSVQ6OnJlZ1QzLCBKU1N0YWNrOjpSZXR1cm5QQyk7CisgICAgaml0LmVtaXRQdXRSZXR1
cm5QQ1RvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CiAKICAgICAvLyBD
YWxsaW5nIGNvbnZlbnRpb246IGYocjAgPT0gcmVnVDQsIHIxID09IHJlZ1Q1LCAuLi4pOwogICAg
IC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwpAQCAtNDAzLDEyICsz
ODcsMTIgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogI2VsaWYg
Q1BVKE1JUFMpCiAgICAgLy8gTG9hZCBjYWxsZXIgZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRo
aXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KICAgICAvLyBnZXQgdG8g
aXRzIGdsb2JhbCBkYXRhLgotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihK
U1N0YWNrOjpDYWxsZXJGcmFtZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKKyAgICBqaXQuZW1p
dEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU0ludGVyZmFjZUpJVDo6cmVn
VDApOwogICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29w
ZUNoYWluLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7CiAg
ICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qx
LCBKU1N0YWNrOjpTY29wZUNoYWluKTsKIAogICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NB
ZnRlckNhbGwoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsgLy8gQ2FsbGVlIHByZXNlcnZlZAotICAg
IGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBKU1N0
YWNrOjpSZXR1cm5QQyk7CisgICAgaml0LmVtaXRQdXRSZXR1cm5QQ1RvQ2FsbEZyYW1lSGVhZGVy
KEpTSW50ZXJmYWNlSklUOjpyZWdUMyk7CiAKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAg
ICAgZihhMCwgYTEsIGEyLCBhMyk7CiAgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYo
RXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRh
LmNwcAkocmV2aXNpb24gMTU4MjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDE0ICs3MCwzMyBAQCB2b2lkIERhdGE6
OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICAKICAgICAvLyBBc3NlcnRpb25zIHRvIG1h
dGNoIExvd0xldmVsSW50ZXJwcmV0ZXIuYXNtLiAgSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhpcyBj
b2RlLCBiZQogICAgIC8vIHByZXBhcmVkIHRvIGNoYW5nZSBMb3dMZXZlbEludGVycHJldGVyLmFz
bSBhcyB3ZWxsISEKLSAgICBBU1NFUlQoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIDgg
PT0gNDgpOwotICAgIEFTU0VSVChKU1N0YWNrOjpBcmd1bWVudENvdW50ICogOCA9PSA0MCk7Ci0g
ICAgQVNTRVJUKEpTU3RhY2s6OkNhbGxlckZyYW1lICogOCA9PSAzMik7Ci0gICAgQVNTRVJUKEpT
U3RhY2s6OkNhbGxlZSAqIDggPT0gMjQpOwotICAgIEFTU0VSVChKU1N0YWNrOjpTY29wZUNoYWlu
ICogOCA9PSAxNik7Ci0gICAgQVNTRVJUKEpTU3RhY2s6OlJldHVyblBDICogOCA9PSA4KTsKLSAg
ICBBU1NFUlQoSlNTdGFjazo6Q29kZUJsb2NrICogOCA9PSAwKTsKKworI2lmbmRlZiBOREVCVUcK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGNvbnN0IHB0cmRpZmZfdCBQdHJTaXplID0gODsKKyAg
ICBjb25zdCBwdHJkaWZmX3QgQ2FsbEZyYW1lSGVhZGVyU2xvdHMgPSA2OworI2Vsc2UgLy8gVVNF
KEpTVkFMVUU2NCkgLy8gaS5lLiAzMi1iaXQgdmVyc2lvbgorICAgIGNvbnN0IHB0cmRpZmZfdCBQ
dHJTaXplID0gNDsKKyAgICBjb25zdCBwdHJkaWZmX3QgQ2FsbEZyYW1lSGVhZGVyU2xvdHMgPSA1
OworI2VuZGlmCisgICAgY29uc3QgcHRyZGlmZl90IFNsb3RTaXplID0gODsKKyNlbmRpZgorCisg
ICAgQVNTRVJUKHNpemVvZih2b2lkKikgPT0gUHRyU2l6ZSk7CisgICAgQVNTRVJUKHNpemVvZihS
ZWdpc3RlcikgPT0gU2xvdFNpemUpOworICAgIEFTU0VSVChKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplID09IENhbGxGcmFtZUhlYWRlclNsb3RzKTsKKworICAgIEFTU0VSVCghQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKTsKKyAgICBBU1NFUlQoQ2FsbEZyYW1lOjpyZXR1cm5QQ09m
ZnNldCgpID09IENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSArIFB0clNpemUpOworICAg
IEFTU0VSVChKU1N0YWNrOjpDb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpID09IENhbGxGcmFt
ZTo6cmV0dXJuUENPZmZzZXQoKSArIFB0clNpemUpOworICAgIEFTU0VSVChKU1N0YWNrOjpTY29w
ZUNoYWluICogc2l6ZW9mKFJlZ2lzdGVyKSA9PSBKU1N0YWNrOjpDb2RlQmxvY2sgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgU2xvdFNpemUpOworICAgIEFTU0VSVChKU1N0YWNrOjpDYWxsZWUgKiBzaXpl
b2YoUmVnaXN0ZXIpID09IEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2YoUmVnaXN0ZXIpICsg
U2xvdFNpemUpOworICAgIEFTU0VSVChKU1N0YWNrOjpBcmd1bWVudENvdW50ICogc2l6ZW9mKFJl
Z2lzdGVyKSA9PSBKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpICsgU2xvdFNpemUp
OworICAgIEFTU0VSVChKU1N0YWNrOjpUaGlzQXJndW1lbnQgKiBzaXplb2YoUmVnaXN0ZXIpID09
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsgU2xvdFNpemUpOwor
ICAgIEFTU0VSVChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplID09IEpTU3RhY2s6OlRoaXNB
cmd1bWVudCk7CisKICAgICBBU1NFUlQoQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGlu
Z1RoaXMoMCkgPT0gSlNTdGFjazo6VGhpc0FyZ3VtZW50KTsKKwogI2lmIENQVShCSUdfRU5ESUFO
KQogICAgIEFTU0VSVChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnRhZykgPT0gMCk7CiAgICAgQVNTRVJUKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkgPT0gNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAx
NTgyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwyNCBAQCBpZiBBUk12N3MKIGVuZAog
CiAjIFRoZXNlIGRlY2xhcmF0aW9ucyBtdXN0IG1hdGNoIGludGVycHJldGVyL0pTU3RhY2suaC4K
LWNvbnN0IENhbGxGcmFtZUhlYWRlclNpemUgPSA0OAorCitpZiBKU1ZBTFVFNjQKK2NvbnN0IFB0
clNpemUgPSA4CiBjb25zdCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDYKLWNvbnN0IEFyZ3VtZW50
Q291bnQgPSA0MAotY29uc3QgQ2FsbGVyRnJhbWUgPSAzMgotY29uc3QgQ2FsbGVlID0gMjQKLWNv
bnN0IFNjb3BlQ2hhaW4gPSAxNgotY29uc3QgUmV0dXJuUEMgPSA4Ci1jb25zdCBDb2RlQmxvY2sg
PSAwCitlbHNlCitjb25zdCBQdHJTaXplID0gNAorY29uc3QgQ2FsbEZyYW1lSGVhZGVyU2xvdHMg
PSA1CitlbmQKK2NvbnN0IFNsb3RTaXplID0gOAogCi1jb25zdCBUaGlzQXJndW1lbnRPZmZzZXQg
PSBBcmd1bWVudENvdW50ICsgOAorY29uc3QgQ2FsbGVyRnJhbWUgPSAwCitjb25zdCBSZXR1cm5Q
QyA9IENhbGxlckZyYW1lICsgUHRyU2l6ZQorY29uc3QgQ29kZUJsb2NrID0gUmV0dXJuUEMgKyBQ
dHJTaXplCitjb25zdCBTY29wZUNoYWluID0gQ29kZUJsb2NrICsgU2xvdFNpemUKK2NvbnN0IENh
bGxlZSA9IFNjb3BlQ2hhaW4gKyBTbG90U2l6ZQorY29uc3QgQXJndW1lbnRDb3VudCA9IENhbGxl
ZSArIFNsb3RTaXplCitjb25zdCBUaGlzQXJndW1lbnRPZmZzZXQgPSBBcmd1bWVudENvdW50ICsg
U2xvdFNpemUKK2NvbnN0IENhbGxGcmFtZUhlYWRlclNpemUgPSBUaGlzQXJndW1lbnRPZmZzZXQK
IAogIyBTb21lIHZhbHVlIHJlcHJlc2VudGF0aW9uIGNvbnN0YW50cy4KIGlmIEpTVkFMVUU2NAo=
</data>
<flag name="review"
          id="238307"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>