<?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>117375</bug_id>
          
          <creation_ts>2013-06-08 15:46:50 -0700</creation_ts>
          <short_desc>Re-worked non-local variable resolution</short_desc>
          <delta_ts>2013-07-25 19:58:43 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>dino</cc>
    
    <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>898419</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-08 15:46:50 -0700</bug_when>
    <thetext>Re-worked non-local variable resolution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898429</commentid>
    <comment_count>1</comment_count>
      <attachid>204104</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-08 17:40:03 -0700</bug_when>
    <thetext>Created attachment 204104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898430</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-08 17:48:04 -0700</bug_when>
    <thetext>R-.  Patch is too small.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898431</commentid>
    <comment_count>3</comment_count>
      <attachid>204104</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-08 18:01:47 -0700</bug_when>
    <thetext>Comment on attachment 204104
Patch

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

Looks great, but I&apos;m confused about how you handle the inferred immutable globals - previously we made these both sound and fairly efficient: the JIT would emit a store barrier, via PutGlobalVarCheck and friends.  How is this done now?

&gt; Source/JavaScriptCore/dfg/DFGNode.h:602
&gt; -        return op() == GlobalVarWatchpoint || op() == PutGlobalVarCheck;
&gt; +        return op() == GlobalVarWatchpoint;

What now does the work of PutGlobalVarCheck?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898490</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-09 10:28:08 -0700</bug_when>
    <thetext>&gt; Looks great, but I&apos;m confused about how you handle the inferred immutable globals - previously we made these both sound and fairly efficient: the JIT would emit a store barrier, via PutGlobalVarCheck and friends.  How is this done now?

The store barrier fires at compile time now, instead of runtime:

    if (JSGlobalObject* globalObject = jsDynamicCast&lt;JSGlobalObject*&gt;(scope)) {
        SymbolTableEntry entry = globalObject-&gt;symbolTable()-&gt;get(ident.impl());
        if (!entry.isNull()) {
            if (getOrPut == Put) {
                if (entry.isReadOnly()) {
                    // We know the property will be at global scope, but we don&apos;t know how to cache it.
                    op = ResolveOp(Dynamic, 0, 0, 0);
                    return true;
                }

                // It&apos;s likely that we&apos;ll write to this var, so notify now and avoid the overhead of doing so at runtime.
                entry.notifyWrite();
            }

(There&apos;s another case of this when linking init_global_const.)

I figured this was a reasonable tradeoff because this case would be rare:

function f() { return 42; }
if (false)
    f = 42;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898491</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-09 10:35:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Looks great, but I&apos;m confused about how you handle the inferred immutable globals - previously we made these both sound and fairly efficient: the JIT would emit a store barrier, via PutGlobalVarCheck and friends.  How is this done now?
&gt; 
&gt; The store barrier fires at compile time now, instead of runtime:
&gt; 
&gt;     if (JSGlobalObject* globalObject = jsDynamicCast&lt;JSGlobalObject*&gt;(scope)) {
&gt;         SymbolTableEntry entry = globalObject-&gt;symbolTable()-&gt;get(ident.impl());
&gt;         if (!entry.isNull()) {
&gt;             if (getOrPut == Put) {
&gt;                 if (entry.isReadOnly()) {
&gt;                     // We know the property will be at global scope, but we don&apos;t know how to cache it.
&gt;                     op = ResolveOp(Dynamic, 0, 0, 0);
&gt;                     return true;
&gt;                 }
&gt; 
&gt;                 // It&apos;s likely that we&apos;ll write to this var, so notify now and avoid the overhead of doing so at runtime.
&gt;                 entry.notifyWrite();
&gt;             }
&gt; 
&gt; (There&apos;s another case of this when linking init_global_const.)
&gt; 
&gt; I figured this was a reasonable tradeoff because this case would be rare:
&gt; 
&gt; function f() { return 42; }
&gt; if (false)
&gt;     f = 42;

Interesting. The reason why it was done the other way before was that I wanted to extend the immutability inference to all globals. They would all be treated as if they were immutable until the first time you overwrote them. 

But I guess that change would still be easy so it doesn&apos;t matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898493</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-09 11:16:52 -0700</bug_when>
    <thetext>&gt; Interesting. The reason why it was done the other way before was that I wanted to extend the immutability inference to all globals. They would all be treated as if they were immutable until the first time you overwrote them. 
&gt; 
&gt; But I guess that change would still be easy so it doesn&apos;t matter.

Yeah, this is totally doable (and a good idea, I think).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898549</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-09 22:45:17 -0700</bug_when>
    <thetext>Committed r151363: &lt;http://trac.webkit.org/changeset/151363&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898712</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-10 13:36:56 -0700</bug_when>
    <thetext>Looks like this caused some concurrent compilation crashes, such as:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000bbadbeef

VM Regions Near 0xbbadbeef:
--&gt; 
    __TEXT                 000000010281f000-00000001028bb000 [  624K] r-x/rwx SM=COW  /Volumes/VOLUME/*

Application Specific Information:
CRASHING TEST: inspector/report-protocol-errors.html

Thread 12 Crashed:: JSC Compilation Thread
0   com.apple.JavaScriptCore      	0x0000000102ab524f JSC::DFG::AbstractState::executeEffects(unsigned int, JSC::DFG::Node*) + 19599 (DFGAbstractState.cpp:1365)
1   com.apple.JavaScriptCore      	0x0000000102ab646b JSC::DFG::AbstractState::execute(unsigned int) + 107 (DFGAbstractState.cpp:1592)
2   com.apple.JavaScriptCore      	0x0000000102b046af JSC::DFG::CFAPhase::performBlockCFA(unsigned int) + 175 (DFGCFAPhase.cpp:104)
3   com.apple.JavaScriptCore      	0x0000000102b045e2 JSC::DFG::CFAPhase::performForwardCFA() + 98 (DFGCFAPhase.cpp:130)
4   com.apple.JavaScriptCore      	0x0000000102b0455e JSC::DFG::CFAPhase::run() + 318 (DFGCFAPhase.cpp:76)
5   com.apple.JavaScriptCore      	0x0000000102b04365 bool JSC::DFG::runAndLog&lt;JSC::DFG::CFAPhase&gt;(JSC::DFG::CFAPhase&amp;) + 21 (DFGPhase.h:75)
6   com.apple.JavaScriptCore      	0x0000000102b042ee bool JSC::DFG::runPhase&lt;JSC::DFG::CFAPhase&gt;(JSC::DFG::Graph&amp;) + 46 (DFGPhase.h:85)
7   com.apple.JavaScriptCore      	0x0000000102b042a8 JSC::DFG::performCFA(JSC::DFG::Graph&amp;) + 40 (DFGCFAPhase.cpp:144)
8   com.apple.JavaScriptCore      	0x0000000102c8c63c JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&amp;) + 572 (DFGPlan.cpp:163)
9   com.apple.JavaScriptCore      	0x0000000102c8c2b4 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&amp;) + 196 (DFGPlan.cpp:102)
10  com.apple.JavaScriptCore      	0x0000000102e1b09c JSC::DFG::Worklist::runThread() + 412 (DFGWorklist.cpp:241)
11  com.apple.JavaScriptCore      	0x0000000102e1a1c5 JSC::DFG::Worklist::threadFunction(void*) + 21 (DFGWorklist.cpp:264)
12  com.apple.JavaScriptCore      	0x0000000103950d80 WTF::threadEntryPoint(void*) + 144 (Threading.cpp:70)
13  com.apple.JavaScriptCore      	0x0000000103951778 WTF::wtfThreadEntryPoint(void*) + 104 (ThreadingPthreads.cpp:197)
14  libsystem_c.dylib             	0x00007fff926ff7a2 _pthread_start + 327
15  libsystem_c.dylib             	0x00007fff926ec1e1 thread_start + 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898720</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-10 14:16:08 -0700</bug_when>
    <thetext>Rolled out in r151401.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910229</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-07-19 10:39:05 -0700</bug_when>
    <thetext>Landed in r151481.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911842</commentid>
    <comment_count>11</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-07-25 19:32:01 -0700</bug_when>
    <thetext>This is causing crashes again.

   1                                0x000044de359e167f 0 + 75721172981375
&gt;  2 com.apple.JavaScriptCore       0x10b92cfe1 JSC::JITCode::execute(JSC::JSStack*, JSC::ExecState*, JSC::VM*) + 0x31
   3 com.apple.JavaScriptCore       0x10b91240a JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 0x28a
   4 com.apple.JavaScriptCore       0x10b7f8d45 JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) + 0x45
   5 com.apple.WebCore              0x10c2726ac WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) + 0x38c
   6 com.apple.WebCore              0x10bf3dbbc WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector&lt;WebCore::RegisteredEventListener, 1ul, WTF::CrashOnOverflow&gt;&amp;) + 0x16c
   7 com.apple.WebCore              0x10bf3d8d6 WebCore::EventTarget::fireEventListeners(WebCore::Event*) + 0x186
   8 com.apple.WebCore              0x10c537f53 WebCore::Node::handleLocalEvents(WebCore::Event*) + 0x43
   9 com.apple.WebCore              0x10bf25fb7 WebCore::EventContext::handleLocalEvents(WebCore::Event*) const + 0x57
  10 com.apple.WebCore              0x10bf26d61 WebCore::EventDispatcher::dispatch() + 0x291
  11 com.apple.WebCore              0x10c52519f WebCore::MouseEventDispatchMediator::dispatchEvent(WebCore::EventDispatcher*) const + 0x9f
  12 com.apple.WebCore              0x10bf261cc WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::EventDispatchMediator&gt;) + 0x7c
  13 com.apple.WebCore              0x10c538655 WebCore::Node::dispatchMouseEvent(WebCore::PlatformMouseEvent const&amp;, WTF::AtomicString const&amp;, int, WebCore::Node*) + 0x85
  14 com.apple.WebCore              0x10bf2d95b WebCore::EventHandler::dispatchMouseEvent(WTF::AtomicString const&amp;, WebCore::Node*, bool, int, WebCore::PlatformMouseEvent const&amp;, bool) + 0x6b

See &lt;rdar://problem/14550047&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911844</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-07-25 19:40:55 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; This is causing crashes again.
&gt; See &lt;rdar://problem/14550047&gt;

Phil says that it might be a subsequent commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911845</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-25 19:58:43 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; This is causing crashes again.
&gt; &gt; See &lt;rdar://problem/14550047&gt;
&gt; 
&gt; Phil says that it might be a subsequent commit.

Sorry, I mean that there&apos;s so many commits after that, that rolling out this particular commit would be rough.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204104</attachid>
            <date>2013-06-08 17:40:03 -0700</date>
            <delta_ts>2013-06-09 10:36:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117375-20130608173828.patch</filename>
            <type>text/plain</type>
            <size>481729</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2NSBA
QAorMjAxMy0wNi0wOCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFJlLXdvcmtlZCBub24tbG9jYWwgdmFyaWFibGUgcmVzb2x1dGlvbgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3Mzc1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBoYXMgdHdvIGdv
YWxzOgorCisgICAgICAgICgxKSBTaW1wbGljaXR5LgorCisgICAgICAgICAgICAqIE5ldCByZW1v
dmVzIDE1IG9wY29kZXMuCisgICAgICAgICAgICAqIE5ldCByZW1vdmVzIDIsMDAwIGxpbmVzIG9m
IGNvZGUuCisgICAgICAgICAgICAqIFJlbW92ZXMgc2V0UGFpcigpIGZyb20gdGhlIERGRzogQWxs
IERGRyBub2RlcyBoYXZlIDEgcmVzdWx0IHJlZ2lzdGVyIG5vdy4KKworICAgICAgICAoMikgUGVy
Zm9ybWFuY2UuCisKKyAgICAgICAgICAgICogMiUtMyUgc3BlZWR1cCBvbiBTdW5TcGlkZXIgKDIw
JSBpbiBMTEludCBhbmQgQmFzZWxpbmUgSklUKQorICAgICAgICAgICAgKiAyJSBzcGVlZHVwIG9u
IHY4LXNwaWRlcgorICAgICAgICAgICAgKiAxMCUgc3BlZWR1cCBvbiBqcy1yZWdyZXNzLWhhc2ht
YXAqCisgICAgICAgICAgICAqIEFtdXNpbmcgMlggc3BlZWR1cCBvbiBqcy1yZWdyZXNzLXBvbHkt
c3RyaWN0ZXEKKworICAgICAgICBUaGUgYnl0ZWNvZGUgbm93IHNlcGFyYXRlcyB0aGUgc2NvcGUg
Y2hhaW4gcmVzb2x1dGlvbiBvcGNvZGUgZnJvbSB0aGUKKyAgICAgICAgc2NvcGUgYWNjZXNzIG9w
Y29kZS4KKworICAgICAgICAgICAgT0xEOgorICAgICAgICAgICAgICAgIGdldF9zY29wZWRfdmFy
ICByMCwgMSwgMAorICAgICAgICAgICAgICAgIGluYyAgICAgICAgICAgICByMAorICAgICAgICAg
ICAgICAgIHB1dF9zY29wZWRfdmFyICAxLCAwLCByMAorCisgICAgICAgICAgICBORVc6CisgICAg
ICAgICAgICAgICAgcmVzb2x2ZV9zY29wZSAgIHIwLCB4KEBpZDApCisgICAgICAgICAgICAgICAg
Z2V0X2Zyb21fc2NvcGUgIHIxLCByMCwgeChAaWQwKQorICAgICAgICAgICAgICAgIGluYyAgICAg
ICAgICAgICByMQorICAgICAgICAgICAgICAgIHB1dF90b19zY29wZSAgICByMCwgeChAaWQwKSwg
cjEKKworICAgICAgICBBbHNvLCB3ZSBsaW5rIG5vbi1sb2NhbCB2YXJpYWJsZSByZXNvbHV0aW9u
IG9wY29kZXMgYXQgQ29kZUJsb2NrIGxpbmsKKyAgICAgICAgdGltZSBpbnN0ZWFkIG9mIHRpbWUg
b2YgZmlyc3Qgb3Bjb2RlIGV4ZWN1dGlvbi4KKworICAgICAgICBUaGlzIG1lYW5zIHRoYXQgd2Ug
Y2FuIHJlcHJlc2VudCBhbGwgcG9zc2libGUgbm9uLWxvY2FsIHZhcmlhYmxlCisgICAgICAgIHJl
c29sdXRpb25zIHVzaW5nIGp1c3QgdGhyZWUgb3Bjb2RlcywgYW5kIGFueSBvcHRpbWl6YXRpb25z
IGluIHRoZXNlCisgICAgICAgIG9wY29kZXMgbmF0dXJhbGx5IGFwcGx5IGFjcm9zcy10aGUtYm9h
cmQuCisKKyAgICAgICAgKiBBUEkvSlNDVGVzdFJ1bm5lclV0aWxzLmNwcDoKKyAgICAgICAgKEpT
Qzo6bnVtYmVyT2ZERkdDb21waWxlcyk6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lm9yZGVyOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaTogQnVpbGQh
CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZSk6IFVwZGF0ZWQgZm9yIHJlbW92ZWQgdGhpbmdzLgorCisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKTogQWx3YXlzIHByb3ZpZGUgdGhlIGZ1bGwg
c2NvcGUgY2hhaW4gd2hlbgorICAgICAgICBjcmVhdGluZyBhIENvZGVCbG9jaywgc28gd2UgY2Fu
IHBlcmZvcm0gbm9uLWxvY2FsIHZhcmlhYmxlIHJlc29sdXRpb24uCisKKyAgICAgICAgQWRkZWQg
Y29kZSB0byBwZXJmb3JtIGxpbmtpbmcgZm9yIHRoZXNlIG9wY29kZXMuIFRoaXMgaXMgd2hlcmUg
d2UgZmlndXJlCisgICAgICAgIG91dCB3aGljaCBub24tbG9jYWwgdmFyaWFibGUgcmVzb2x1dGlv
bnMgYXJlIG9wdGltaXphYmxlLCBhbmQgaG93LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5vdGlj
ZUluY29taW5nQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlcldh
cm1VcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6b3B0aW1pemVBZnRlckxvbmdXYXJtVXAp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9wdGltaXplU29vbik6IFVwZGF0ZWQgZm9yIHJl
bW92ZWQgdGhpbmdzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bmVlZHNBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6R2xvYmFs
Q29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJs
b2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZh
bENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNv
ZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oOgorICAgICAgICAo
SlNDOjpFdmFsQ29kZUNhY2hlOjpnZXRTbG93KTogVXBkYXRlZCBmb3IgaW50ZXJmYWNlIGNoYW5n
ZXMuCisKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6IFRyZWF0IGdsb2JhbCBvYmplY3QgYWNjZXNz
IGFzCisgICAgICAgIG9wdGltaXphYmxlIGV2ZW4gdGhvdWdoIHRoZSBnbG9iYWwgb2JqZWN0IGhh
cyBhIGN1c3RvbSBwcm9wZXJ0eSBhY2Nlc3MKKyAgICAgICAgY2FsbGJhY2suIFRoaXMgaXMgd2hh
dCB3ZSd2ZSBhbHdheXMgZG9uZSBzaW5jZSwgb3RoZXJ3aXNlLCB3ZSBjYW4ndAorICAgICAgICBv
cHRpbWl6ZSBnbG9iYWxzLiAoSW4gZnV0dXJlLCB3ZSBwcm9iYWJseSB3YW50IHRvIGZpZ3VyZSBv
dXQgYSBtb3JlCisgICAgICAgIHRhcmdldGVkIHBvbGljeSB0aGFuICJhbnkgcHJvcGVydHkgYWNj
ZXNzIGNhbGxiYWNrIG1lYW5zIG5vIAorICAgICAgICBvcHRpbWl6YXRpb24iLikKKworICAgICAg
ICAqIGJ5dGVjb2RlL0dsb2JhbFJlc29sdmVJbmZvLmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAg
ICAgKEpTQzo6cGFkT3Bjb2RlTmFtZSk6CisKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6IExpa2Ug
R2V0QnlJZFN0YXR1cy4KKworICAgICAgICAqIGJ5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9SZXNvbHZlT3BlcmF0aW9uLmg6IFJlbW92ZWQu
CisKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OmdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OlVubGlua2VkQ29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oOiBEb24ndCBwcm92aWRlIGEgc2NvcGUgY2hhaW4gdG8gdW5saW5rZWQKKyAg
ICAgICAgY29kZSBibG9ja3MuIEdpdmluZyBhIHNjb3BlIHRvIGFuIHVuc2NvcGVkIGNvbXBpbGF0
aW9uIHVuaXQgaW52aXRlcworICAgICAgICBwcm9ncmFtbWluZyBlcnJvcnMuCisKKyAgICAgICAg
KiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmFk
ZHJlc3NPZklzSW52YWxpZGF0ZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2FsbGVl
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmxvY2FsKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0TG9jYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6cmVzb2x2ZVR5cGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFJlc29sdmVTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0R2V0RnJvbVNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQ
dXRUb1Njb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0YW5j
ZU9mKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoV2l0aFNjb3Bl
KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BTY29wZSk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRleHQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbXBsZXhQb3BTY29wZXMpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5kRW1pdENhdGNoKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoTmFtZVNjb3BlKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmlzQXJndW1lbnROdW1iZXIpOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpMb2NhbDo6TG9jYWwp
OgorICAgICAgICAoSlNDOjpMb2NhbDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6Okxv
Y2FsOjpnZXQpOgorICAgICAgICAoSlNDOjpMb2NhbDo6aXNSZWFkT25seSk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpzY29wZURlcHRoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OnNob3VsZE9wdGltaXplTG9jYWxzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmNhbk9wdGltaXplTm9uTG9jYWxzKTogUmVmYWN0b3JlZCB0aGUgYnl0ZWNv
ZGUKKyAgICAgICAgZ2VuZXJhdG9yIHRvIHJlc29sdmUgYWxsIHZhcmlhYmxlcyB3aXRoaW4gbG9j
YWwgc2NvcGUsIGFzIGlmIHRoZXJlCisgICAgICAgIHdlcmUgbm8gbm9uLWxvY2FsIHNjb3BlLiBU
aGlzIGhlbHBzIHByb3ZpZGUgYSBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zOgorICAgICAgICB1bmxp
bmtlZCBieXRlY29kZSBpcyBhbHdheXMgc2NvcGUtZnJlZSwgYW5kIHRoZSBsaW5raW5nIHN0YWdl
IGxpbmtzCisgICAgICAgIGluIHRoZSBwcm92aWRlZCBzY29wZS4KKworICAgICAgICAqIGJ5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6aXNQ
dXJlKToKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAg
IChKU0M6OkV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6RGVsZXRlUmVzb2x2ZU5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OlR5cGVPZlJlc29sdmVOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVzb2x2ZSk6CisgICAg
ICAgIChKU0M6OlJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNv
bnN0RGVjbE5vZGU6OmVtaXRDb2RlU2luZ2xlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUpOiBBIGJ1bmNoIG9mIHRoaXMgY29kZWdlbiBpcyBubyBsb25nZXIKKyAgICAg
ICAgbmVjZXNzYXJ5LCBzaW5jZSBpdCdzIHJlZHVuZGFudCB3aXRoIHRoZSBsaW5raW5nIHN0YWdl
LgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRl
Q29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2spOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlcy4KKyAgICAgICAgTm90YWJs
eSwgd2UgY2FuIHJldXNlIGV4aXN0aW5nIERGRyBub2RlcyAtLSBidXQgdGhlIG1hcHBpbmcgYmV0
d2VlbgorICAgICAgICBieXRlY29kZSBhbmQgREZHIG5vZGVzIGhhcyBjaGFuZ2VkLCBhbmQgc29t
ZSBub2RlcyBhbmQgY29ybmVyIGNhc2VzIGhhdmUKKyAgICAgICAgYmVlbiByZW1vdmVkLgorCisg
ICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6c2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6dmFySW5qZWN0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OnNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OnNldExvY2FsU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKTogQWRkZWQgQ1NFIGZvciB2YXIgaW5qZWN0aW9u
CisgICAgICAgIHdhdGNocG9pbnRzLiBFdmVuIHRob3VnaCB3YXRjaHBvaW50cyBhcmUgImZyZWUi
LCB0aGV5J3JlIHF1aXRlIGNvbW1vbgorICAgICAgICBpbnNpZGUgY29kZSB0aGF0J3Mgc3ViamVj
dCB0byB2YXIgaW5qZWN0aW9uLCBzbyBJIGZpZ3VyZWQgd2UnZCBzYXZlIGEKKyAgICAgICAgbGl0
dGxlIG1lbW9yeS4KKworICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxp
dGllcy5oOiBSZW1vdmVkIGRldGVjdGlvbiBmb3Igb2xkIGZvcm1zLgorCisgICAgICAgICogZGZn
L0RGR0RyaXZlci5oOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAo
SlNDOjpERkc6OnRyeUNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRv
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc1Zhck51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSWRlbnRpZmllck51
bWJlckZvckNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNSZWdpc3RlclBvaW50
ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmg6
CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZH
OjpkZmdSZXNldFB1dEJ5SUQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKTogUmVtb3Zl
ZCBzb21lIHVubmVlZGVkIHRoaW5ncywKKyAgICAgICAgYW5kIHVwZGF0ZWQgZm9yIHJlbmFtZXMu
CisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6IFRoZSB0d28gcHJpbWFyeSBjaGFuZ2VzIGhlcmUgYXJlOgorCisgICAgICAgICgxKSBV
c2UgYSB3YXRjaHBvaW50IGZvciB2YXIgaW5qZWN0aW9uIGluc3RlYWQgb2YgbG9vcGluZyBvdmVy
IHRoZSBzY29wZQorICAgICAgICBjaGFpbiBhbmQgY2hlY2tpbmcuIFRoaXMgaXMgbW9yZSBlZmZp
Y2llbnQgYW5kIG11Y2ggZWFzaWVyIHRvIG1vZGVsIGluCisgICAgICAgIGNvZGUgZ2VuZXJhdGlv
bi4KKworICAgICAgICAoMikgSSd2ZSBlbGltaW5hdGVkIHRoZSBub3Rpb24gb2YgYW4gb3B0aW1p
emVkIGdsb2JhbCBhc3NpZ25tZW50IHRoYXQKKyAgICAgICAgbmVlZHMgdG8gY2hlY2sgZm9yIHdo
ZXRoZXIgaXQgc2hvdWxkIGZpcmUgYSB3YXRjaHBpb250LiBJbnN0ZWFkLCB3ZQorICAgICAgICBm
aXJlIHByZS1lbXB0aXZlbHkgYXQgdGhlIHBvaW50IG9mIG9wdGltaXphdGlvbi4gVGhpcyByZW1v
dmVzIGEgYnVuY2gKKyAgICAgICAgb2YgZWRnZSBjYXNlcywgYW5kIGl0IHNlZW1zIGxpa2UgYSBt
b3JlIGhvbmVzdCByZXByZXNlbnRhdGlvbiBvZgorICAgICAgICB0aGUgZmFjdCB0aGF0IG91ciBu
ZXcgb3B0aW1pemF0aW9uIGNvbnRyYWRpY3RzIG91ciBvbGQgb25lLgorCisgICAgICAgICogZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFu
dEFycmF5Q2hlY2tzKToKKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwOgorICAgICAg
ICAoSlNDOjpERkdDb2RlQmxvY2tzOjpqZXR0aXNvbik6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dHJ1ZUNhbGxGcmFtZSk6IFJl
bW92ZWQgc3R1ZmYgdGhhdCdzIHVudXNlZCBub3csIGFuZAorICAgICAgICBmaXhlZCB0aGUgYnVp
bGQuCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0M6OmV2YWwpOgorICAgICAgICAoSlNDOjpnZXRCeXRlY29kZU9mZnNldEZvckNhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OmdldENhbGxlckluZm8pOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6dGhyb3dFeGNlcHRpb24pOiBVcGRhdGVkIGV4Y2VwdGlvbiBzY29wZSB0cmFja2luZworICAg
ICAgICB0byBtYXRjaCB0aGUgcmVzdCBvZiBvdXIgbGlua2luZyBzdHJhdGVneTogVGhlIHVubGlu
a2VkIGJ5dGVjb2RlIGNvbXBpbGVzCisgICAgICAgIGV4Y2VwdGlvbiBzY29wZSBhcyBpZiBub24t
bG9jYWwgc2NvcGUgZGlkIG5vdCBleGlzdCwgYW5kIHdlIGFkZCBpbgorICAgICAgICBub24tbG9j
YWwgc2NvcGUgYXQgbGluayB0aW1lLiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIHJlc3RvcmUgdGhl
IHJpZ2h0CisgICAgICAgIHNjb3BlIGRlcHRoIGJhc2VkIG9uIGEgc2ltcGxlIG51bWJlciwgd2l0
aG91dCBjaGVja2luZyB0aGUgY29udGVudHMgb2YKKyAgICAgICAgdGhlIHNjb3BlIGNoYWluLgor
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlKTogTWFrZSBzdXJlIHRvIGVzdGFi
bGlzaCB0aGUgZnVsbCBzY29wZSBjaGFpbgorICAgICAgICBiZWZvcmUgbGlua2luZyBldmFsIGNv
ZGUuIFdlIG5vdyByZXF1aXJlIHRoZSBmdWxsIHNjb3BlIGNoYWluIGF0IGxpbmsKKyAgICAgICAg
dGltZSwgaW4gb3JkZXIgdG8gbGluayBub24tbG9jYWwgdmFyaWFibGUgcmVzb2x1dGlvbiBvcGNv
ZGVzLgorCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6SklUKToK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgor
ICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2FkZCk6CisgICAgICAgICogaml0L0pJVENvZGUuY3BwOgorICAgICAgICAqIGppdC9KSVRP
cGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9iaXR4b3IpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2JpdG9yKToKKyAgICAgICAgKiBqaXQvSklUT3Bj
b2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90b19wcmltaXRp
dmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3RyY2F0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfdG9fdGhpcyk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNv
bHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9yZXNvbHZlX3Njb3Bl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdEdldEdsb2JhbFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0R2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0Q2xvc3VyZVZh
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEds
b2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5p
dF9nbG9iYWxfY29uc3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9yZXNvbHZl
X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEdsb2JhbFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0R2V0R2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0Q2xv
c3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaW5pdF9nbG9iYWxfY29uc3QpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAg
ICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMu
aDogUmUtd3JvdGUgYmFzZWxpbmUgSklUIGNvZGVnZW4gZm9yIG91ciBuZXcgdmFyaWFibGUKKyAg
ICAgICAgcmVzb2x1dGlvbiBtb2RlbC4KKworICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyk6CisgICAgICAg
ICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmg6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkNMb29wOjpl
eGVjdXRlKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206IERpdHRvIGZvciBMTElu
dC4KKworICAgICAgICAqIG9mZmxpbmVhc20veDg2LnJiOiBGaXhlZCBhIHByZS1leGlzdGluZyBl
bmNvZGluZyBidWcgZm9yIGEgc3ludGFjdGljCisgICAgICAgIGZvcm0gdGhhdCB3ZSBuZXZlciB1
c2VkIGJlZm9yZS4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9p
bik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jQ29uY2F0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU29ydCk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jU3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNGaWx0ZXIpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY01hcCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY0ZvckVhY2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3Rv
RnVuY1NvbWUpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JlZHVjZSk6CisgICAgICAg
IChKU0M6OmFycmF5UHJvdG9GdW5jUmVkdWNlUmlnaHQpOgorICAgICAgICAoSlNDOjphcnJheVBy
b3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KTogRml4ZWQgc29tZSBwcmUtZXhpc3RpbmcgYnVncyBpbgorICAgICAgICAndGhpcycgdmFsdWUg
Y29udmVyc2lvbiwgd2hpY2ggSSBtYWRlIG11Y2ggbW9yZSBjb21tb24gYnkgcmVtb3ZpbmcKKyAg
ICAgICAgc3BlY2lhbCBjYXNlcyBpbiBieXRlY29kZSBnZW5lcmF0aW9uLgorCisgICAgICAgIFRo
ZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGludm9rZSB0b1RoaXMoKSBiZWNhdXNlIHRoZXkgb2JzZXJ2
ZSB0aGUgJ3RoaXMnCisgICAgICAgIHZhbHVlLiBBbHNvLCB0b0xvY2FsZVN0cmluZygpIGlzIHNw
ZWNpZmllZCB0byBhY2NlcHQgbm9uLWFycmF5ICd0aGlzJworICAgICAgICB2YWx1ZXMuCisKKyAg
ICAgICAgKE1vc3Qgb3RoZXIgaG9zdCBmdW5jdGlvbnMgZG9uJ3QgbmVlZCB0aGlzIGZpeCBiZWNh
dXNlIHRoZXkgcGVyZm9ybQorICAgICAgICBzdHJpY3QgJ3RoaXMnIGNoZWNraW5nLCB3aGljaCBu
ZXZlciBjb2VyY2VzIHVuZXhwZWN0ZWQgdHlwZXMuKQorCisgICAgICAgICogcnVudGltZS9Db2Rl
Q2FjaGUuY3BwOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldENvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkNvZGVDYWNoZTo6Z2V0UHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkNvZGVDYWNoZTo6Z2V0RXZhbENvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9Db2RlQ2Fj
aGUuaDogRG9uJ3Qgc3VwcGx5IGEgc2NvcGUgdG8gdGhlIHVubGlua2VkIGNvZGUgY2FjaGUuCisg
ICAgICAgIFVubGlua2VkIGNvZGUgaXMgc3VwcG9zZWQgdG8gYmUgc2NvcGUtZnJlZSwgc28gbGV0
J3MgaGF2ZSB0aGUgY29tcGlsZXIKKyAgICAgICAgaGVscCB2ZXJpZnkgdGhhdC4KKworICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAg
ICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJu
YWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6bnVtVmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6
Om51bWJlck9mRnVuY3Rpb25EZWNscyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRpb25IYXJu
ZXNzLmg6CisgICAgICAgIChKU0M6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAg
KEpTQzo6cHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgIChKU0M6Omlu
c3RhbGxPcHRpbWl6ZWRDb2RlKTogRmlkZGxlZCB3aXRoIGV4ZWN1dGFibGUgaW5pdGlhbGl6YXRp
b24gc28KKyAgICAgICAgdGhhdCB3ZSBjYW4gYWx3YXlzIGdlbmVyYXRlIGEgZnVsbCBzY29wZSBj
aGFpbiBiZWZvcmUgd2UgZ28gdG8gbGluayBhCisgICAgICAgIGNvZGUgYmxvY2suIFdlIG5lZWQg
dGhpcyBiZWNhdXNlIGNvZGUgYmxvY2sgbGlua2luZyBub3cgZGVwZW5kcyBvbiB0aGUKKyAgICAg
ICAgc2NvcGUgY2hhaW4gdG8gbGluayBub24tbG9jYWwgdmFyaWFibGUgcmVzb2x1dGlvbiBvcGNv
ZGVzLgorCisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpT
R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZUV2YWxD
b2RlQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZhckluamVjdGlvbldhdGNocG9pbnQpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9i
YWxGdW5jRXZhbCk6CisgICAgICAgICogcnVudGltZS9KU05hbWVTY29wZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0QWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6SlNTY29wZTo6b2JqZWN0QXRTY29wZSk6CisgICAgICAgIChKU0M6OkpTU2Nv
cGU6OmRlcHRoKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZSk6CisgICAgICAgIChK
U0M6OkpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZSk6IFVwZGF0ZWQgdG8gbWF0Y2ggY2hhbmdlcyBl
eHBsYWluZWQgYWJvdmUuCisKKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuaDoKKyAgICAgICAg
KEpTQzo6bWFrZVR5cGUpOgorICAgICAgICAoSlNDOjpuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk6
CisgICAgICAgIChKU0M6OlJlc29sdmVPcDo6UmVzb2x2ZU9wKToKKyAgICAgICAgKEpTQzo6UmVz
b2x2ZU1vZGVBbmRUeXBlOjpSZXNvbHZlTW9kZUFuZFR5cGUpOgorICAgICAgICAoSlNDOjpSZXNv
bHZlTW9kZUFuZFR5cGU6Om1vZGUpOgorICAgICAgICAoSlNDOjpSZXNvbHZlTW9kZUFuZFR5cGU6
OnR5cGUpOgorICAgICAgICAoSlNDOjpSZXNvbHZlTW9kZUFuZFR5cGU6Om9wZXJhbmQpOiBSZW1v
dmVkIHRoZSBvbGQgdmFyaWFibGUgcmVzb2x1dGlvbgorICAgICAgICBzdGF0ZSBtYWNoaW5lLCBz
aW5jZSBpdCdzIHVudXNlZCBub3cuIEFkZGVkIGxvZ2ljIGZvciBwZXJmb3JtaW5nIGFic3RyYWN0
CisgICAgICAgIHZhcmlhYmxlIHJlc29sdXRpb24gYXQgbGluayB0aW1lLiBUaGlzIGlzIHVzZWQg
YnkgY29kZWJsb2NrIGxpbmtpbmcuCisKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAo
SlNDOjpvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6Om9iamVj
dFByb3RvRnVuY0lzUHJvdG90eXBlT2YpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNE
ZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIp
OgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIpOgorICAgICAgICAo
SlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQ
cm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSk6CisgICAgICAgIChKU0M6Om9iamVjdFByb3Rv
RnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcpOiBGaXhlZCBzb21lIHByZS1leGlzdGluZyBidWdzIGluCisgICAgICAgICd0aGlzJyB2YWx1
ZSBjb252ZXJzaW9uLCB3aGljaCBJIG1hZGUgbXVjaCBtb3JlIGNvbW1vbiBieSByZW1vdmluZwor
ICAgICAgICBzcGVjaWFsIGNhc2VzIGluIGJ5dGVjb2RlIGdlbmVyYXRpb24uCisKKyAgICAgICAg
VGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gaW52b2tlIHRvVGhpcygpIGJlY2F1c2UgdGhleSBvYnNl
cnZlIHRoZSAndGhpcycKKyAgICAgICAgdmFsdWUuCisKKyAgICAgICAgKiBydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNoZWNrT2JqZWN0Q29lcmNpYmxlKToKKyAg
ICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFjZSk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0NoYXJBdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0NoYXJDb2Rl
QXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNDb25jYXQpOgorICAgICAgICAoSlND
OjpzdHJpbmdQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
TGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNNYXRjaCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NlYXJjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJzdHIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdWJzdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb0xvd2Vy
Q2FzZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKToKKyAgICAg
ICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY0JpZyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1NtYWxsKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQmxpbmspOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNCb2xkKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRml4ZWQpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJdGFsaWNzKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nUHJvdG9GdW5jU3RyaWtlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3ViKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3VwKToKKyAgICAgICAgKEpTQzo6c3RyaW5n
UHJvdG9GdW5jRm9udGNvbG9yKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRm9udHNp
emUpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNBbmNob3IpOgorICAgICAgICAoSlND
OjpzdHJpbmdQcm90b0Z1bmNMaW5rKToKKyAgICAgICAgKEpTQzo6dHJpbVN0cmluZyk6IEZpeGVk
IHNvbWUgcHJlLWV4aXN0aW5nIGJ1Z3MgaW4KKyAgICAgICAgJ3RoaXMnIHZhbHVlIGNvbnZlcnNp
b24sIHdoaWNoIEkgbWFkZSBtdWNoIG1vcmUgY29tbW9uIGJ5IHJlbW92aW5nCisgICAgICAgIHNw
ZWNpYWwgY2FzZXMgaW4gYnl0ZWNvZGUgZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGVzZSBmdW5j
dGlvbnMgbmVlZCB0byBpbnZva2UgdG9UaGlzKCkgYmVjYXVzZSB0aGV5IG9ic2VydmUgdGhlICd0
aGlzJworICAgICAgICB2YWx1ZS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURh
dGEuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6flZN
KToKKworICAgICAgICAqIHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg6CisgICAgICAgIChKU0M6Oldy
aXRlQmFycmllckJhc2U6OnNsb3QpOiBNb2RpZmllZCB0byByZWR1Y2UgY2FzdGluZyBpbiBjbGll
bnQgY29kZS4KKwogMjAxMy0wNi0wOCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlZCBib2d1cyBhc3NlcnRpb24gaW4gQ2FsbEZyYW1lOjpzZXRMb2NhdGlv
bkFzQnl0ZWNvZGVPZmZzZXQoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDkgKzE0NCw2IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRLaW5kLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0
ZXNwYWNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRl
c3BhY2UuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxT
dGF0dXMuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2Jh
bFN0YXR1cy5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZU9wZXJh
dGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuY3BwIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiAxNTEz
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQkod29ya2lu
ZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw2IEBACiAgICAgICAgICAgICAnYnl0ZWNvZGUvRXhwcmVz
c2lvblJhbmdlSW5mby5oJywKICAgICAgICAgICAgICdieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNw
cCcsCiAgICAgICAgICAgICAnYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oJywKLSAgICAgICAgICAg
ICdieXRlY29kZS9HbG9iYWxSZXNvbHZlSW5mby5oJywKICAgICAgICAgICAgICdieXRlY29kZS9I
YW5kbGVySW5mby5oJywKICAgICAgICAgICAgICdieXRlY29kZS9JbnN0cnVjdGlvbi5oJywKICAg
ICAgICAgICAgICdieXRlY29kZS9KdW1wVGFibGUuY3BwJywKQEAgLTE2Nyw5ICsxNjYsNiBAQAog
ICAgICAgICAgICAgJ2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAnLAogICAgICAgICAg
ICAgJ2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwJywKICAgICAgICAgICAgICdieXRlY29k
ZS9SZWR1Y2VXaGl0ZXNwYWNlLmgnLAotICAgICAgICAgICAgJ2J5dGVjb2RlL1Jlc29sdmVHbG9i
YWxTdGF0dXMuY3BwJywKLSAgICAgICAgICAgICdieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVz
LmgnLAotICAgICAgICAgICAgJ2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRpb24uaCcsCiAgICAgICAg
ICAgICAnYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcCcsCiAgICAgICAgICAgICAnYnl0ZWNvZGUv
U2FtcGxpbmdUb29sLmgnLAogICAgICAgICAgICAgJ2J5dGVjb2RlL1NwZWNpYWxQb2ludGVyLmNw
cCcsCkBAIC0zMDAsOCArMjk2LDYgQEAKICAgICAgICAgICAgICdkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwJywKICAgICAgICAgICAgICdkZmcvREZHU3BlY3VsYXRpdmVKSVQuaCcsCiAgICAgICAg
ICAgICAnZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCcsCi0gICAgICAgICAgICAnZGZn
L0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAnLAotICAgICAgICAgICAgJ2RmZy9E
RkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuaCcsCiAgICAgICAgICAgICAnZGZnL0RGR1Ro
dW5rcy5jcHAnLAogICAgICAgICAgICAgJ2RmZy9ERkdUaHVua3MuaCcsCiAgICAgICAgICAgICAn
ZGZnL0RGR1ZhbGlkYXRlLmNwcCcsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLm9yZGVyCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUub3JkZXIJKHdvcmtpbmcgY29weSkKQEAgLTUzMiwyNSArNTMyLDIx
IEBAIF9fWk4zSlNDMTFSZXNvbHZlTm9kZTEyZW1pdEJ5dGVjb2RlRVJOU18KIF9fWk4zSlNDMTdC
eXRlY29kZUdlbmVyYXRvcjExcmVnaXN0ZXJGb3JFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pT
QzE3Qnl0ZWNvZGVHZW5lcmF0b3IxMWVtaXRSZXNvbHZlRVBOU18xMFJlZ2lzdGVySURFUktOU18x
MElkZW50aWZpZXJFCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3IxOGZpbmRTY29wZWRQcm9w
ZXJ0eUVSS05TXzEwSWRlbnRpZmllckVSaVJtYlJiUlBOU184SlNPYmplY3RFCi1fX1pOM1dURjZW
ZWN0b3JJTjNKU0MxN0dsb2JhbFJlc29sdmVJbmZvRUxtMEVFMTRleHBhbmRDYXBhY2l0eUVtCiBf
X1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3IxMWFkZENvbnN0YW50RVJLTlNfMTBJZGVudGlmaWVy
RQogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTBJZGVudGlmaWVyRUxtMEVFMTRleHBhbmRDYXBhY2l0
eUVtUEtTMl8KIF9fWk4zV1RGNlZlY3RvcklOM0pTQzEwSWRlbnRpZmllckVMbTBFRTE1cmVzZXJ2
ZUNhcGFjaXR5RW0KIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjExZW1pdEdldEJ5SWRFUE5T
XzEwUmVnaXN0ZXJJREVTMl9SS05TXzEwSWRlbnRpZmllckUKIF9fWk4zV1RGNlZlY3RvcklOM0pT
QzE3U3RydWN0dXJlU3R1YkluZm9FTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KLV9fWk4zSlNDM0pJ
VDIyZW1pdF9vcF9yZXNvbHZlX2dsb2JhbEVQTlNfMTFJbnN0cnVjdGlvbkViCiBfX1pOM1dURjZW
ZWN0b3JJTjNKU0MxM1Nsb3dDYXNlRW50cnlFTG0wRUUxNGV4cGFuZENhcGFjaXR5RW1QS1MyXwog
X19aTjNXVEY2VmVjdG9ySU4zSlNDMTNTbG93Q2FzZUVudHJ5RUxtMEVFMTRleHBhbmRDYXBhY2l0
eUVtCiBfX1pOM0pTQzNKSVQxN2VtaXRfb3BfZ2V0X2J5X2lkRVBOU18xMUluc3RydWN0aW9uRQog
X19aTjNKU0MzSklUMjFjb21waWxlR2V0QnlJZEhvdFBhdGhFaWlQTlNfMTBJZGVudGlmaWVyRWoK
LV9fWk4zSlNDM0pJVDI2ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWxFUE5TXzExSW5zdHJ1Y3Rp
b25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCiBfX1pOM0pTQzIwTWFjcm9Bc3NlbWJsZXJYODZfNjQ4
c3RvcmVQdHJFTlNfMjJBYnN0cmFjdE1hY3JvQXNzZW1ibGVySU5TXzEyWDg2QXNzZW1ibGVyRUUx
M1RydXN0ZWRJbW1QdHJFTlMzXzE1SW1wbGljaXRBZGRyZXNzRQogX19aTjNKU0MxMUpJVFN0dWJD
YWxsNGNhbGxFagogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTBDYWxsUmVjb3JkRUxtMEVFMTVyZXNl
cnZlQ2FwYWNpdHlFbQogX19aTjNKU0MzSklUMjFlbWl0U2xvd19vcF9nZXRfYnlfaWRFUE5TXzEx
SW5zdHJ1Y3Rpb25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCiBfX1pOM0pTQzNKSVQyMmNvbXBpbGVH
ZXRCeUlkU2xvd0Nhc2VFaWlQTlNfMTBJZGVudGlmaWVyRVJQTlNfMTNTbG93Q2FzZUVudHJ5RWIK
IF9fWk4zSlNDMTFKSVRTdHViQ2FsbDRjYWxsRXYKLV9jdGlfb3BfcmVzb2x2ZV9nbG9iYWwKIF9f
Wk4zSlNDMTVPYmplY3RQcm90b3R5cGUxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0
ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzEwSWRlbnRp
Zmllcjh0b1VJbnQzMkVSS05TXzdVU3RyaW5nRVJiCiBfX1pOM1dURjEyQXRvbWljU3RyaW5nNGZp
bmRFUEt0amoKQEAgLTc5Niw3ICs3OTIsNiBAQCBfX1pOSzNKU0MxMVJlc29sdmVOb2RlMTNpc1Jl
c29sdmVOb2RlRXYKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjEyYWRkUGFyYW1ldGVyRVJL
TlNfMTBJZGVudGlmaWVyRWkKIF9fWk4zSlNDMjNGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTEyZW1p
dEJ5dGVjb2RlRVJOU18xN0J5dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCiBfX1pO
SzNKU0MxNkpTVmFyaWFibGVPYmplY3QxNmlzVmFyaWFibGVPYmplY3RFdgotX19aTjNKU0MxN0J5
dGVjb2RlR2VuZXJhdG9yMTZlbWl0R2V0U2NvcGVkVmFyRVBOU18xMFJlZ2lzdGVySURFbWlOU183
SlNWYWx1ZUUKIF9fWk4zSlNDM0pJVDIyZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhckVQTlNfMTFJbnN0
cnVjdGlvbkUKIF9fWk4zSlNDOEpTUGFyc2VyMTlwYXJzZVZhckRlY2xhcmF0aW9uSU5TXzEwQVNU
QnVpbGRlckVFRU5UXzlTdGF0ZW1lbnRFUlMzXwogX19aTjNXVEY2VmVjdG9ySVN0NHBhaXJJUEtO
M0pTQzEwSWRlbnRpZmllckVqRUxtMEVFMTVyZXNlcnZlQ2FwYWNpdHlFbQpAQCAtOTQwLDggKzkz
NSw2IEBAIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjllbWl0Q2F0Y2hFUE4KIF9fWk4zV1RG
NlZlY3RvcklOM0pTQzExSGFuZGxlckluZm9FTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk4z
SlNDMTdCeXRlY29kZUdlbmVyYXRvcjE2ZW1pdFB1c2hOZXdTY29wZUVQTlNfMTBSZWdpc3RlcklE
RVJLTlNfMTBJZGVudGlmaWVyRVMyXwogX19aTjNXVEY2VmVjdG9ySU4zSlNDMThDb250cm9sRmxv
d0NvbnRleHRFTG0wRUUxNGV4cGFuZENhcGFjaXR5RW0KLV9fWk4zSlNDMTdCeXRlY29kZUdlbmVy
YXRvcjIxZW1pdFJlc29sdmVCYXNlRm9yUHV0RVBOU18xMFJlZ2lzdGVySURFUktOU18xMElkZW50
aWZpZXJFCi1fX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0b3IxNWVtaXRSZXNvbHZlQmFzZUVQTlNf
MTBSZWdpc3RlcklERVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJh
dG9yMTJlbWl0UG9wU2NvcGVFdgogX19aTjNKU0M5RXF1YWxOb2RlMTJlbWl0Qnl0ZWNvZGVFUk5T
XzE3Qnl0ZWNvZGVHZW5lcmF0b3JFUE5TXzEwUmVnaXN0ZXJJREUKIF9fWk4zSlNDMTdCeXRlY29k
ZUdlbmVyYXRvcjE0ZW1pdEVxdWFsaXR5T3BFTlNfOE9wY29kZUlERVBOU18xMFJlZ2lzdGVySURF
UzNfUzNfCkBAIC05NTEsMTMgKzk0NCwxMCBAQCBfX1pOM0pTQzIwTWFjcm9Bc3NlbWJsZXJYODZf
NjQxM2JyYW5jaFRlCiBfX1pOM0pTQzNKSVQxMWVtaXRfb3BfbmVxRVBOU18xMUluc3RydWN0aW9u
RQogX19aTjNKU0MxMlg4NkFzc2VtYmxlcjZvcmxfaXJFaU5TXzEyWDg2UmVnaXN0ZXJzMTBSZWdp
c3RlcklERQogX19aTjNKU0MzSklUMTNlbWl0X29wX2p0cnVlRVBOU18xMUluc3RydWN0aW9uRQot
X19aTjNKU0MzSklUMjVlbWl0X29wX3Jlc29sdmVfd2l0aF9iYXNlRVBOU18xMUluc3RydWN0aW9u
RQogX19aTjNKU0MzSklUMTdlbWl0X29wX2NhbGxfZXZhbEVQTlNfMTFJbnN0cnVjdGlvbkUKIF9f
Wk4zSlNDM0pJVDEzZW1pdF9vcF9jYXRjaEVQTlNfMTFJbnN0cnVjdGlvbkUKIF9fWk4zSlNDMjBN
YWNyb0Fzc2VtYmxlclg4Nl82NDdsb2FkUHRyRU5TXzIyQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcklO
U18xMlg4NkFzc2VtYmxlckVFMTVJbXBsaWNpdEFkZHJlc3NFTlNfMTJYODZSZWdpc3RlcnMxMFJl
Z2lzdGVySURFCiBfX1pOM0pTQzNKSVQyMmVtaXRfb3BfcHVzaF9uZXdfc2NvcGVFUE5TXzExSW5z
dHJ1Y3Rpb25FCi1fX1pOM0pTQzNKSVQyMGVtaXRfb3BfcmVzb2x2ZV9iYXNlRVBOU18xMUluc3Ry
dWN0aW9uRQotX19aTjNKU0MzSklUMTVlbWl0X29wX3Jlc29sdmVFUE5TXzExSW5zdHJ1Y3Rpb25F
CiBfX1pOM0pTQzNKSVQxN2VtaXRfb3BfcG9wX3Njb3BlRVBOU18xMUluc3RydWN0aW9uRQogX19a
TjNKU0MzSklUMTBlbWl0X29wX2VxRVBOU18xMUluc3RydWN0aW9uRQogX19aTjNKU0MzSklUMjdl
bWl0X29wX3RlYXJfb2ZmX2FjdGl2YXRpb25FUE5TXzExSW5zdHJ1Y3Rpb25FCkBAIC05NzAsNyAr
OTYwLDYgQEAgX19aTjNKU0MxMkpTQWN0aXZhdGlvbkMxRVBOU185RXhlY1N0YXRlRQogX2N0aV9v
cF90eXBlb2YKIF9fWk4zSlNDMjBqc1R5cGVTdHJpbmdGb3JWYWx1ZUVQTlNfOUV4ZWNTdGF0ZUVO
U183SlNWYWx1ZUUKIF9jdGlfb3BfZXEKLV9jdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UKIF9fWk4z
SlNDMTJKU0FjdGl2YXRpb24xOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCiBfY3RpX29wX2NhbGxfZXZhbAogX19a
TjNKU0MxMUludGVycHJldGVyOGNhbGxFdmFsRVBOU185RXhlY1N0YXRlRVBOU18xMkpTU3RhY2tF
UE5TXzhSZWdpc3RlckVpaQpAQCAtOTg3LDcgKzk3Niw2IEBAIF9fWk4zSlNDOEV2YWxOb2RlRDBF
dgogX19aTjNXVEY3SGFzaE1hcElOU182UmVmUHRySU5TXzEwU3RyaW5nSW1wbEVFRU4zSlNDMTJX
cml0ZUJhcnJpZXJJTlM0XzE0RXZhbEV4ZWN1dGFibGVFRUVOU18xMFN0cmluZ0hhc2hFTlNfMTBI
YXNoVHJhaXRzSVMzX0VFTlM5X0lTN19FRUUzc2V0RVBTMl9SS1M3XwogX19aTjNXVEY5SGFzaFRh
YmxlSU5TXzZSZWZQdHJJTlNfMTBTdHJpbmdJbXBsRUVFU3Q0cGFpcklTM19OM0pTQzEyV3JpdGVC
YXJyaWVySU5TNV8xNEV2YWxFeGVjdXRhYmxlRUVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM5
X0VFTlNfMTBTdHJpbmdIYXNoRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMz
X0VFTlNFX0lTOF9FRUVFU0ZfRTZleHBhbmRFdgogX19aTjNKU0MxMUludGVycHJldGVyN2V4ZWN1
dGVFUE5TXzE0RXZhbEV4ZWN1dGFibGVFUE5TXzlFeGVjU3RhdGVFUE5TXzhKU09iamVjdEVpUE5T
XzE0U2NvcGVDaGFpbk5vZGVFCi1fY3RpX29wX3Jlc29sdmUKIF9KU1ZhbHVlTWFrZUJvb2xlYW4K
IF9fWk4zSlNDOEpTUGFyc2VyMjBwYXJzZVJldHVyblN0YXRlbWVudElOU18xMEFTVEJ1aWxkZXJF
RUVOVF85U3RhdGVtZW50RVJTM18KIF9fWk4zSlNDMTBBU1RCdWlsZGVyMTFtYWtlRGl2Tm9kZUVQ
TlNfMTRFeHByZXNzaW9uTm9kZUVTMl9iCkBAIC0xMTI2LDcgKzExMTQsNiBAQCBfX1pOM1dURkw3
bXVsdGFkZEVSTlNfNkJpZ0ludEVpaQogX19aTjNXVEZMNG11bHRFUk5TXzZCaWdJbnRFUktTMF8K
IF9fWk4zV1RGNlZlY3RvcklqTG0xNkVFYVNFUktTMV8KIF9fWk4zV1RGNlN0cmluZzZudW1iZXJF
ZAotX19aTjNKU0MxN0J5dGVjb2RlR2VuZXJhdG9yMTZlbWl0UHV0U2NvcGVkVmFyRW1pUE5TXzEw
UmVnaXN0ZXJJREVOU183SlNWYWx1ZUUKIF9fWk4zSlNDM0pJVDIyZW1pdF9vcF9wdXRfZ2xvYmFs
X3ZhckVQTlNfMTFJbnN0cnVjdGlvbkUKIF9fWk4zSlNDM0pJVDExZW1pdF9vcF9zdWJFUE5TXzEx
SW5zdHJ1Y3Rpb25FCiBfX1pOM0pTQzNKSVQxNWVtaXRTbG93X29wX3N1YkVQTlNfMTFJbnN0cnVj
dGlvbkVSUE5TXzEzU2xvd0Nhc2VFbnRyeUUKQEAgLTExOTAsNyArMTE3Nyw2IEBAIF9jdGlfb3Bf
Y2FsbF9hcml0eUNoZWNrCiBfY3RpX29wX2luCiBfX1pOM0pTQzEySlNBY3RpdmF0aW9uMTN2aXNp
dENoaWxkcmVuRVJOU185TWFya1N0YWNrRQogX19aTkszSlNDMTJKU0FjdGl2YXRpb24xNGlzRHlu
YW1pY1Njb3BlRVJiCi1fX1pOM0pTQzNKSVQyMmVtaXRfb3BfZ2V0X3Njb3BlZF92YXJFUE5TXzEx
SW5zdHJ1Y3Rpb25FCiBfX1pOM0pTQzhKU1BhcnNlcjE5cGFyc2VCcmVha1N0YXRlbWVudElOU18x
MEFTVEJ1aWxkZXJFRUVOVF85U3RhdGVtZW50RVJTM18KIF9fWk4zSlNDMTVDb25kaXRpb25hbE5v
ZGUxMmVtaXRCeXRlY29kZUVSTlNfMTdCeXRlY29kZUdlbmVyYXRvckVQTlNfMTBSZWdpc3RlcklE
RQogX19aTjNKU0M5QnJlYWtOb2RlMTJlbWl0Qnl0ZWNvZGVFUk5TXzE3Qnl0ZWNvZGVHZW5lcmF0
b3JFUE5TXzEwUmVnaXN0ZXJJREUKQEAgLTEyMDgsNyArMTE5NCw2IEBAIF9fWk4zSlNDN1VTdHJp
bmc2bnVtYmVyRWQKIF9fWk4zSlNDOUNvZGVCbG9jazE0dmlzaXRBZ2dyZWdhdGVFUk5TXzlNYXJr
U3RhY2tFCiBfX1pOM0pTQzEzRXZhbENvZGVDYWNoZTE0dmlzaXRBZ2dyZWdhdGVFUk5TXzlNYXJr
U3RhY2tFCiBfX1pOM0pTQzE3U3RydWN0dXJlU3R1YkluZm8xNHZpc2l0QWdncmVnYXRlRVJOU185
TWFya1N0YWNrRQotX2N0aV9vcF9yZXNvbHZlX2Jhc2UKIF9fWk4zSlNDMTdPYmplY3RMaXRlcmFs
Tm9kZTEyZW1pdEJ5dGVjb2RlRVJOU18xN0J5dGVjb2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVy
SURFCiBfX1pOM0pTQzE2UHJvcGVydHlMaXN0Tm9kZTEyZW1pdEJ5dGVjb2RlRVJOU18xN0J5dGVj
b2RlR2VuZXJhdG9yRVBOU18xMFJlZ2lzdGVySURFCiBfX1pOM0pTQzE3Qnl0ZWNvZGVHZW5lcmF0
b3IxM2VtaXROZXdPYmplY3RFUE5TXzEwUmVnaXN0ZXJJREUKQEAgLTE0MDQsOCArMTM4OSw2IEBA
IF9fWk4zSlNDMTVSZWdFeHBQcm90b3R5cGUxOGdldE93blByb3BlcnQKIF9fWk4zSlNDTDE5cmVn
RXhwUHJvdG9GdW5jVGVzdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTJSZWdFeHBPYmplY3Q0
dGVzdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk4zSlNDMTJSZWdFeHBPYmplY3Q1bWF0Y2hFUE5TXzlF
eGVjU3RhdGVFCi1fX1pOM0pTQzNKSVQyMGVtaXRfb3BfcmVzb2x2ZV9za2lwRVBOU18xMUluc3Ry
dWN0aW9uRQotX2N0aV9vcF9yZXNvbHZlX3NraXAKIF9fWk4zV1RGZXFFUktOU18xMkF0b21pY1N0
cmluZ0VSS05TXzZWZWN0b3JJdExtMEVFRQogX19aTjNXVEYxMU9TQWxsb2NhdG9yMThyZWxlYXNl
RGVjb21taXR0ZWRFUHZtCiBfX1pOM1dURjEyQXRvbWljU3RyaW5nMTZmcm9tVVRGOEludGVybmFs
RVBLY1MyXwpAQCAtMTYxOSw4ICsxNjAyLDYgQEAgX19aTjNXVEY2VmVjdG9ySVBOM0pTQzE0RXhw
cmVzc2lvbk5vZGVFTAogX19aTjNXVEY2VmVjdG9ySU5TXzZSZWZQdHJJTjNKU0MxMFJlZ2lzdGVy
SURFRUVMbTE2RUUxNGV4cGFuZENhcGFjaXR5RW0KIF9fWk4zV1RGMTRGYXN0TWFsbG9jWm9uZTlm
b3JjZUxvY2tFUDE0X21hbGxvY196b25lX3QKIF9fWk4zV1RGMTRGYXN0TWFsbG9jWm9uZTExZm9y
Y2VVbmxvY2tFUDE0X21hbGxvY196b25lX3QKLV9fWk4zSlNDM0pJVDMwZW1pdF9vcF9yZXNvbHZl
X2dsb2JhbF9keW5hbWljRVBOU18xMUluc3RydWN0aW9uRQotX19aTjNKU0MzSklUMzRlbWl0U2xv
d19vcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljRVBOU18xMUluc3RydWN0aW9uRVJQTlNfMTNTbG93
Q2FzZUVudHJ5RQogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTFTdHJpbmdSYW5nZUVMbTE2RUUxNGV4
cGFuZENhcGFjaXR5RW1QS1MyXwogX19aTjNXVEY2VmVjdG9ySU4zSlNDMTFTdHJpbmdSYW5nZUVM
bTE2RUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pOM1dURjZWZWN0b3JJTjNKU0M3VVN0cmluZ0VM
bTE2RUUxNGV4cGFuZENhcGFjaXR5RW1QS1MyXwpAQCAtMjI3MSw3ICsyMjUyLDYgQEAgX19aTjNK
U0MyN1N0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjExZwogX19aTjNKU0MyN1N0cmljdE1vZGVU
eXBlRXJyb3JGdW5jdGlvbjE4Y2FsbFRocm93VHlwZUVycm9yRVBOU185RXhlY1N0YXRlRQogX19a
TjNKU0MxNHRocm93VHlwZUVycm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCiBfX1pO
M0pTQzlBcmd1bWVudHMzM2NyZWF0ZVN0cmljdE1vZGVDYWxsZXJJZk5lY2Vzc2FyeUVQTlNfOUV4
ZWNTdGF0ZUUKLV9jdGlfb3BfcmVzb2x2ZV9iYXNlX3N0cmljdF9wdXQKIF9fWk4zSlNDMzdjcmVh
dGVFcnJvckZvckludmFsaWRHbG9iYWxBc3NpZ25tZW50RVBOU185RXhlY1N0YXRlRVJLTlNfN1VT
dHJpbmdFCiBfX1pOM0pTQzE5SlNTdGF0aWNTY29wZU9iamVjdDNwdXRFUE5TXzlFeGVjU3RhdGVF
UktOU18xMElkZW50aWZpZXJFTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19a
TjNKU0MyMFN0cmljdEV2YWxBY3RpdmF0aW9uQzFFUE5TXzlFeGVjU3RhdGVFCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDYgQEAgU09VUkNF
UyArPSBcCiAgICAgYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBcCiAgICAgYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAgXAogICAgIGJ5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3Bw
IFwKLSAgICBieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcCBcCiAgICAgYnl0ZWNvZGUv
U2FtcGxpbmdUb29sLmNwcCBcCiAgICAgYnl0ZWNvZGUvU3BlY2lhbFBvaW50ZXIuY3BwIFwKICAg
ICBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NUZXN0UnVubmVyVXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDVGVzdFJ1bm5lclV0aWxzLmNwcAkocmV2aXNpb24gMTUxMzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NUZXN0UnVubmVyVXRpbHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw4ICs1MywxMiBAQCBKU1ZhbHVlUmVmIG51bWJlck9mREZHQ29tcGls
ZXMoSlNDb250ZXh0CiAgICAgICAgIAogICAgICAgICBpZiAoIWJhc2VsaW5lQ29kZUJsb2NrKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIDApOwotICAgICAg
ICAKKworI2lmIEVOQUJMRShERkdfSklUKSAgICAgICAgCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZU51bWJlcihjb250ZXh0LCBiYXNlbGluZUNvZGVCbG9jay0+bnVtYmVyT2ZERkdDb21waWxl
cygpKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCAx
MDAwMDAwLjApOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTg0MiwxMCArMTg0Miw2IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5
dGVjb2RlXEdsb2JhbFJlc29sdmVJbmZvLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXEhhbmRsZXJJbmZvLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShy
ZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTksNyAr
NDU5LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4aXRLaW5kLmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVzc2lvblJhbmdl
SW5mby5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRT
dGF0dXMuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxHbG9iYWxS
ZXNvbHZlSW5mby5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEhh
bmRsZXJJbmZvLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5z
dHJ1Y3Rpb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxKdW1w
VGFibGUuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJ
KHdvcmtpbmcgY29weSkKQEAgLTkyOSw5ICs5MjksNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFN0YXR1cy5oIj4NCiAgICAgICA8RmlsdGVyPmJ5dGVjb2Rl
PC9GaWx0ZXI+DQogICAgIDwvQ2xJbmNsdWRlPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXEdsb2JhbFJlc29sdmVJbmZvLmgiPg0KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8
L0ZpbHRlcj4NCi0gICAgPC9DbEluY2x1ZGU+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcSGFuZGxlckluZm8uaCI+DQogICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVy
Pg0KICAgICA8L0NsSW5jbHVkZT4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEs
NiBAQAogCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkUxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyog
REZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5j
cHAgKi87IH07CiAJCTBGNjM5NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNjM5
NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDNDMTVDNzVG
MTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEY2
Mzk0NTQxNUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0Mg
LyogQXJyYXlQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8q
IEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2Mzk0NTIxNUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjM5NDc4MTVEQ0Uz
NEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0Mg
LyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MDEsOCArNDAwLDYgQEAKIAkJMEZGNDI3NTcxNTkx
NEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3NTYxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZm
ZXIuY3BwICovOyB9OwogCQkwRkY0Mjc2NDE1OTFBMUNDMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RjQyNzYxMTU5MUExQzkwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkw
RkY0Mjc2NTE1OTFBMUNFMDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY0Mjc2MjE1OTFBMUM5MDA0Q0I5
RkYgLyogREZHRGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEZGNDI3NzExNTkyNzVENTAwNENCOUZGIC8qIFJlc29sdmVHbG9i
YWxTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwICov
OyB9OwotCQkwRkY0Mjc3MjE1OTI3NUQ4MDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNDI3NkYx
NTkyNzVEMjAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3
NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3Bh
Y2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY2MEFCRjE2NzQwRjgxMDAw
Mjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgKi87IH07CiAJCTBGRjcxNjhDMTVBM0IyMzUw
MDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGNzE2OEExNUEzQjIzMTAwOEY1REFBIC8qIFByb3BlcnR5T2Zm
c2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTU2OSw2ICs1NjYsNyBAQAogCQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjBCM0E5
MDlCQjREQzAwMDY4RkNFMyAvKiBQYXJzZXIuY3BwICovOyB9OwogCQkxNDk1NTlFRTBERENEREY3
MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5NTU5RUQwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVn
Z2VyQ2FsbEZyYW1lLmNwcCAqLzsgfTsKIAkJMTQ5NzIwOTExNEVCODMxNTAwRkVCMUI3IC8qIFBh
c3NXZWFrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDk3MjA5MDE0RUI4MzE1MDBGRUIxQjcgLyogUGFzc1dlYWsuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDk3QzQ3RDE3NjE5NzMyMDA5NURFRDQg
LyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTE0QTE1NjMyMTA5NjYzNjUwMDZGQTI2
MCAvKiBEYXRlSW5zdGFuY2VDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRBMTU2MzAxMDk2NjM2NTAwNkZBMjYwIC8qIERhdGVJbnN0YW5jZUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTRBMjNENzUwRjRFMUFCQjAwMjNDREFEIC8qIEpJVFN0dWJzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTIzRDZDMEY0RTE5Q0UwMDIzQ0RBRCAv
KiBKSVRTdHVicy5jcHAgKi87IH07CiAJCTE0QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBKU0Nh
bGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0QUJERjVFMEE0MzdGRUYwMEVDQ0EwMSAvKiBKU0NhbGxiYWNrT2JqZWN0LmNwcCAq
LzsgfTsKQEAgLTc4Miw3ICs3ODAsNiBAQAogCQlBNzdGMTgyNTE2NDE5MkM3MDA2NDBBNDcgLyog
UGFyc2VyTW9kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3N0YxODI0MTY0MTkyNTQwMDY0MEE0NyAvKiBQYXJzZXJNb2Rlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODRBMjYxMTFEMTY2MjIw
MDU3NzZBQyAvKiBBU1RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0E3RUU3NDExQjk4QjhEMDA2NUExNEYgLyogQVNUQnVpbGRlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3ODRBMjY0
MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3lu
dGF4Q2hlY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUE3QUZDMTc5MTVGN0VGRTMwMDQ4RjU3QiAvKiBSZXNvbHZlT3BlcmF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0FGQzE3NzE1RjdF
RkUzMDA0OEY1N0IgLyogUmVzb2x2ZU9wZXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QjQ4RjQ5MEVFODkzNkYwMERDQkRCNiAvKiBF
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcCAqLzsgfTsKIAkJQTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFj
cm9zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0I0
QUNBRTE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0I2MDE4MjE2MzlGRDJBMDAzNzJC
QTMgLyogVW5saW5rZWRDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVC
bG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0xNDExLDggKzE0MDgsNiBAQAogCQkwRkY0Mjc1NjE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1
ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rQnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNDI3NjExNTkxQTFDOTAwNENC
OUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdEaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGZnL0RGR0Rpc2Fzc2VtYmxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkZmcvREZHRGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRjQyNzZFMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZl
R2xvYmFsU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
c29sdmVHbG9iYWxTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkY0
Mjc2RjE1OTI3NUQyMDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvbHZlR2xvYmFsU3RhdHVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0
ZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZHVjZVdo
aXRlc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY2MEFDMDE2NzQw
RjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRjcxNjhBMTVBM0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9wZXJ0eU9mZnNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTgwMiw3ICsxNzk3LDYgQEAKIAkJQTc5RURCMDgxMTUzMUNENjAw
MTlFOTEyIC8qIEpTT2JqZWN0UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU09iamVjdFJlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdBN0VFNzQxMUI5OEI4RDAwNjVBMTRGIC8qIEFTVEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVNUQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBN0E3RUU3NzExQjk4QjhEMDA2NUExNEYgLyogU3ludGF4Q2hlY2tlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW50YXhDaGVja2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE3QUZDMTc3MTVGN0VGRTMwMDQ4RjU3QiAvKiBSZXNvbHZlT3Bl
cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc29sdmVPcGVyYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNDhEQjUwRUU3NENGQzAwRENC
REI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdCNEFDQUUxNDg0QzlDRTAwQjM4QTM2
IC8qIEpTRXhwb3J0TWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RXhwb3J0TWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjExLDkgKzMy
MDUsNiBAQAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJ
CQkJMEZGNjBBQkYxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovLAog
CQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8sCi0J
CQkJMEZGNDI3NkUxNTkyNzVEMjAwNENCOUZGIC8qIFJlc29sdmVHbG9iYWxTdGF0dXMuY3BwICov
LAotCQkJCTBGRjQyNzZGMTU5Mjc1RDIwMDRDQjlGRiAvKiBSZXNvbHZlR2xvYmFsU3RhdHVzLmgg
Ki8sCi0JCQkJQTdBRkMxNzcxNUY3RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24uaCAq
LywKIAkJCQkxNDI5RDg4MzBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNwcCAqLywK
IAkJCQkxNDI5RDg4NDBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmggKi8sCiAJCQkJ
MEY1NTQxQUYxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmNwcCAqLywKQEAgLTM2
ODQsOCArMzY3NSw2IEBACiAJCQkJOTY5QTA3MkIwRUQxQ0U2OTAwRjFGNjgxIC8qIFJlZ2lzdGVy
SUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWpl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCM0M0MTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBh
dGNoQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkY0Mjc3MjE1OTI3NUQ4MDA0Q0I5RkYg
LyogUmVzb2x2ZUdsb2JhbFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdBRkMxNzkxNUY3
RUZFMzAwNDhGNTdCIC8qIFJlc29sdmVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDI5RDg4NjBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmggaW4g
SGVhZGVycyAqLywKQEAgLTQyMjIsNiArNDIxMSw3IEBACiAJCQkJMEZDMDk3QTExNDZCMjhDQTAw
Q0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyQjE1NDc1
MDAwMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRD
NEYxNTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTE0OTdDNDdEMTc2MTk3MzIwMDk1REVENCAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRERCRkI1MTY2NkVFRDgwMEM1NUZFRiAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzUxMTUy
MjhGRkQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMkJEQzRBMTUyMjgwOUEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNDQxNyw3ICs0NDA3LDYgQEAKIAkJCQk4NjQyQzUxMjE1MUMwODNE
MDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjgwODQzMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4NDQxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cFByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRkY0Mjc3MTE1OTI3NUQ1MDA0Q0I5RkYgLyogUmVzb2x2ZUdsb2Jh
bFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEODg1MEVEMjFD
M0QwMEI4OTYxOSAvKiBTYW1wbGluZ1Rvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyNTQ5
NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMTEgKzE2Niw2IEBAIHN0YXRpYyBDU3RyaW5nIHJl
Z2V4cE5hbWUoaW50IHJlLCBSZWdFeHAKICAgICByZXR1cm4gdG9DU3RyaW5nKHJlZ2V4cFRvU291
cmNlU3RyaW5nKHJlZ2V4cCksICIoQHJlIiwgcmUsICIpIik7CiB9CiAKLXN0YXRpYyBDU3RyaW5n
IHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2b2lkKiBwKQotewotICAgIHJldHVybiB0b0NTdHJpbmco
UmF3UG9pbnRlcihwKSk7Ci19Ci0KIE5FVkVSX0lOTElORSBzdGF0aWMgY29uc3QgY2hhciogZGVi
dWdIb29rTmFtZShpbnQgZGVidWdIb29rSUQpCiB7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxE
ZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpKSB7CkBAIC00NTksNTAgKzQ1NCw2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcmludFB1dEJ5SWRPcChQcmludFN0cmUKICAgICBpdCArPSA1OwogfQogCi12b2lk
IENvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciog
bmFtZSwgY29uc3QgSW5zdHJ1Y3Rpb24qIHZQQywgaW50IG9wZXJhbmQpCi17Ci0gICAgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25PZmZzZXQgPSB2UEMgLSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAg
IG91dC5wcmludGYoIiAgWyU0ZF0gJXM6ICVzXG4iLCBpbnN0cnVjdGlvbk9mZnNldCwgbmFtZSwg
cG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1tvcGVyYW5kXS51LnN0cnVjdHVyZSkuZGF0YSgpKTsK
LX0KLQotdm9pZCBDb2RlQmxvY2s6OnByaW50U3RydWN0dXJlcyhQcmludFN0cmVhbSYgb3V0LCBj
b25zdCBJbnN0cnVjdGlvbiogdlBDKQotewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IG1fdm0tPmludGVycHJldGVyOwotICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gdlBD
IC0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLQotICAgIGlmICh2UENbMF0udS5vcGNvZGUgPT0g
aW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWQpKSB7Ci0gICAgICAgIHByaW50U3Ry
dWN0dXJlKG91dCwgImdldF9ieV9pZCIsIHZQQywgNCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dl
dF9ieV9pZF9zZWxmKSkgewotICAgICAgICBwcmludFN0cnVjdHVyZShvdXQsICJnZXRfYnlfaWRf
c2VsZiIsIHZQQywgNCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHZQQ1swXS51
Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9wcm90bykpIHsK
LSAgICAgICAgb3V0LnByaW50ZigiICBbJTRkXSAlczogJXMsICVzXG4iLCBpbnN0cnVjdGlvbk9m
ZnNldCwgImdldF9ieV9pZF9wcm90byIsIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2UENbNF0udS5z
dHJ1Y3R1cmUpLmRhdGEoKSwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s1XS51LnN0cnVjdHVy
ZSkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodlBDWzBdLnUub3Bj
b2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkX3RyYW5zaXRpb24pKSB7
Ci0gICAgICAgIG91dC5wcmludGYoIiAgWyU0ZF0gJXM6ICVzLCAlcywgJXNcbiIsIGluc3RydWN0
aW9uT2Zmc2V0LCAicHV0X2J5X2lkX3RyYW5zaXRpb24iLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmco
dlBDWzRdLnUuc3RydWN0dXJlKS5kYXRhKCksIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2UENbNV0u
dS5zdHJ1Y3R1cmUpLmRhdGEoKSwgcG9pbnRlclRvU291cmNlU3RyaW5nKHZQQ1s2XS51LnN0cnVj
dHVyZUNoYWluKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh2UENb
MF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWRfY2hhaW4p
KSB7Ci0gICAgICAgIG91dC5wcmludGYoIiAgWyU0ZF0gJXM6ICVzLCAlc1xuIiwgaW5zdHJ1Y3Rp
b25PZmZzZXQsICJnZXRfYnlfaWRfY2hhaW4iLCBwb2ludGVyVG9Tb3VyY2VTdHJpbmcodlBDWzRd
LnUuc3RydWN0dXJlKS5kYXRhKCksIHBvaW50ZXJUb1NvdXJjZVN0cmluZyh2UENbNV0udS5zdHJ1
Y3R1cmVDaGFpbikuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodlBD
WzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkKSkgewot
ICAgICAgICBwcmludFN0cnVjdHVyZShvdXQsICJwdXRfYnlfaWQiLCB2UEMsIDQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXIt
PmdldE9wY29kZShvcF9wdXRfYnlfaWRfcmVwbGFjZSkpIHsKLSAgICAgICAgcHJpbnRTdHJ1Y3R1
cmUob3V0LCAicHV0X2J5X2lkX3JlcGxhY2UiLCB2UEMsIDQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVGhlc2UgbV9pbnN0cnVjdGlvbnMgZG9lc24ndCByZWYgU3RydWN0dXJl
cy4KLSAgICBBU1NFUlQodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUo
b3BfZ2V0X2J5X2lkX2dlbmVyaWMpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50
ZXJwcmV0ZXItPmdldE9wY29kZShvcF9jYWxsKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZShvcF9jYWxsX2V2YWwpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBpbnRl
cnByZXRlci0+Z2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkpOwotfQotCiB2b2lkIENvZGVCbG9jazo6
ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgLy8gV2Ugb25seSB1c2UgdGhl
IEV4ZWNTdGF0ZSogZm9yIHRoaW5ncyB0aGF0IGRvbid0IGFjdHVhbGx5IGxlYWQgdG8gSlMgZXhl
Y3V0aW9uLApAQCAtNzE3LDcgKzY2OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUo
UHJpbnRTdHJlYW0KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9jYWxsZWU6IHsKICAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiWyU0ZF0gb3BfZ2V0X2NhbGxlZSAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShy
MCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGdldF9jYWxsZWUgJXNc
biIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICArK2l0
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTk0MCw0MyArODkxLDYgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgcHJpbnRC
aW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImluIik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF90b19iYXNlX3ZhcmlhYmxlOgotICAg
ICAgICBjYXNlIG9wX3B1dF90b19iYXNlOiB7Ci0gICAgICAgICAgICBpbnQgYmFzZSA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHZhbHVlID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgcmVzb2x2ZUluZm8gPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmlu
dGYoIlslNGRdIHB1dF90b19iYXNlXHQgJXMsICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKGJhc2UpLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRh
KCksIHJlZ2lzdGVyTmFtZSh2YWx1ZSkuZGF0YSgpLCByZXNvbHZlSW5mbyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmU6Ci0gICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZV9nbG9iYWxfcHJvcGVydHk6Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9n
bG9iYWxfdmFyOgotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3ZhcjoKLSAgICAgICAg
Y2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92YXJfb25fdG9wX3Njb3BlOgotICAgICAgICBjYXNlIG9w
X3Jlc29sdmVfc2NvcGVkX3Zhcl93aXRoX3RvcF9zY29wZV9jaGVjazogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcmVzb2x2ZUluZm8gPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHJlc29sdmVcdFx0ICVzLCAlcywg
JWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRl
bnRpZmllcnNbaWQwXSkuZGF0YSgpLCByZXNvbHZlSW5mbyk7Ci0gICAgICAgICAgICBkdW1wVmFs
dWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9zY29wZWRfdmFyOiB7Ci0gICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbmRl
eCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNraXBMZXZlbHMgPSAoKytp
dCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGdldF9zY29wZWRf
dmFyXHQgJXMsICVkLCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaW5k
ZXgsIHNraXBMZXZlbHMpOwotICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91dCwgaXQs
IGhhc1ByaW50ZWRQcm9maWxpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9wdXRfc2NvcGVkX3ZhcjogewotICAgICAgICAgICAgaW50IGluZGV4ID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc2tpcExldmVscyA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBwdXRfc2NvcGVkX3Zhclx0ICVkLCAlZCwgJXMiLCBs
b2NhdGlvbiwgaW5kZXgsIHNraXBMZXZlbHMsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wOiB7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBpbml0X2dsb2JhbF9j
b25zdF9ub3BcdCIsIGxvY2F0aW9uKTsKICAgICAgICAgICAgIGl0Kys7CkBAIC05OTMsNTMgKzkw
NywxMiBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAg
ICAgICBpdCsrOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdF9jaGVjazogewotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiByZWdpc3RlclBvaW50ZXIgPSAoKytpdCktPnUucmVnaXN0ZXJQb2ludGVyOwotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJp
bnRmKCJbJTRkXSBpbml0X2dsb2JhbF9jb25zdF9jaGVja1x0IGclZCglcCksICVzIiwgbG9jYXRp
b24sIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpLCBy
ZWdpc3RlclBvaW50ZXIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGl0
Kys7Ci0gICAgICAgICAgICBpdCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFsOgotICAgICAgICBjYXNlIG9wX3Jl
c29sdmVfYmFzZV90b19nbG9iYWxfZHluYW1pYzoKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jh
c2VfdG9fc2NvcGU6Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlX3dpdGhf
dG9wX3Njb3BlX2NoZWNrOgotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZTogewotICAgICAg
ICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaWQwID0g
KCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaXNTdHJpY3QgPSAoKytpdCktPnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIGludCByZXNvbHZlSW5mbyA9ICgrK2l0KS0+dS5vcGVyYW5k
OwotICAgICAgICAgICAgaW50IHB1dFRvQmFzZUluZm8gPSAoKytpdCktPnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHJlc29sdmVfYmFzZSVzXHQgJXMsICVzLCAlZCwg
JWQiLCBsb2NhdGlvbiwgaXNTdHJpY3QgPyAiX3N0cmljdCIgOiAiIiwgcmVnaXN0ZXJOYW1lKHIw
KS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpLCByZXNvbHZl
SW5mbywgcHV0VG9CYXNlSW5mbyk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0
LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHM6IHsKICAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gZW5zdXJlX3Byb3Bl
cnR5X2V4aXN0c1x0ICVzLCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwg
aWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3dpdGhfYmFzZTogewotICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpZDAgPSAoKytpdCktPnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByZXNvbHZlSW5mbyA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgaW50IHB1dFRvQmFzZUluZm8gPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIG91dC5wcmludGYoIlslNGRdIHJlc29sdmVfd2l0aF9iYXNlICVzLCAlcywgJXMsICVk
LCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIx
KS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpLCByZXNvbHZl
SW5mbywgcHV0VG9CYXNlSW5mbyk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0
LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF90aGlzOiB7Ci0gICAgICAgICAgICBpbnQg
cjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwotICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgaW50IHJlc29sdmVJbmZvID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCJbJTRkXSByZXNvbHZlX3dpdGhfdGhpcyAlcywgJXMsICVzLCAlZCIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCksIGlk
TmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0YSgpLCByZXNvbHZlSW5mbyk7Ci0gICAg
ICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZDoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CiAgICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3NlbGY6CkBAIC0xNDIxLDYgKzEyOTQsMzUgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0g
ZW5kXHRcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsK
KyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50
IGlkMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgKytpdDsgLy8gUmVzb2x2ZVR5
cGUKKyAgICAgICAgICAgICsraXQ7IC8vIGRlcHRoCisgICAgICAgICAgICBvdXQucHJpbnRmKCJb
JTRkXSByZXNvbHZlX3Njb3BlXHQgJXMsICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50aWZpZXJzW2lkMF0pLmRhdGEoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGlkMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHJlc29sdmVNb2RlQW5kVHlwZSA9ICgrK2l0KS0+
dS5vcGVyYW5kOworICAgICAgICAgICAgKytpdDsgLy8gU3RydWN0dXJlCisgICAgICAgICAgICAr
K2l0OyAvLyBPcGVyYW5kCisgICAgICAgICAgICArK2l0OyAvLyBTa2lwIHZhbHVlIHByb2ZpbGUu
CisgICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBnZXRfZnJvbV9zY29wZVx0ICVzLCAlcywg
JXMsICVkIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUo
cjEpLmRhdGEoKSwgaWROYW1lKGlkMCwgbV9pZGVudGlmaWVyc1tpZDBdKS5kYXRhKCksIHJlc29s
dmVNb2RlQW5kVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX3B1dF90b19zY29wZTogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByZXNvbHZl
TW9kZUFuZFR5cGUgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgICsraXQ7IC8vIFN0
cnVjdHVyZQorICAgICAgICAgICAgKytpdDsgLy8gT3BlcmFuZAorICAgICAgICAgICAgb3V0LnBy
aW50ZigiWyU0ZF0gcHV0X3RvX3Njb3BlXHQgJXMsICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIG1faWRlbnRpZmllcnNbaWQwXSkuZGF0
YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSwgcmVzb2x2ZU1vZGVBbmRUeXBlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAjaWYgRU5BQkxFKExMSU5UX0NfTE9PUCkKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0xNDU5LDcgKzEzNjEsNiBAQCBzdGF0aWMgSGFzaFNldDxDb2RlQmxvY2sqPiBsaXZlQ29kZUJs
b2NrCiAKICNkZWZpbmUgRk9SX0VBQ0hfTUVNQkVSX1ZFQ1RPUihtYWNybykgXAogICAgIG1hY3Jv
KGluc3RydWN0aW9ucykgXAotICAgIG1hY3JvKGdsb2JhbFJlc29sdmVJbmZvcykgXAogICAgIG1h
Y3JvKHN0cnVjdHVyZVN0dWJJbmZvcykgXAogICAgIG1hY3JvKGNhbGxMaW5rSW5mb3MpIFwKICAg
ICBtYWNybyhsaW5rZWRDYWxsZXJMaXN0KSBcCkBAIC0xNjAzLDggKzE1MDQsNiBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgLCBtX29zckV4aXRDb3VudGVy
KDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQogICAgICwgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigwKQotICAgICwgbV9yZXNvbHZlT3BlcmF0aW9ucyhvdGhlci5t
X3Jlc29sdmVPcGVyYXRpb25zKQotICAgICwgbV9wdXRUb0Jhc2VPcGVyYXRpb25zKG90aGVyLm1f
cHV0VG9CYXNlT3BlcmF0aW9ucykKICNpZiBFTkFCTEUoSklUKQogICAgICwgbV9jYXBhYmlsaXR5
TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgpAQCAtMTYyNCwy
MSArMTUyMywyMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAg
ICAgfQogfQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgYmFzZVNjb3BlRGVwdGgsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpCi0g
ICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwg
Z2xvYmFsT2JqZWN0KQorQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2Nv
cGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5z
aWduZWQgc291cmNlT2Zmc2V0KQorICAgIDogbV9nbG9iYWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9i
amVjdCgpLT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHNjb3BlLT5nbG9iYWxPYmplY3QoKSkKICAg
ICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkKICAgICAsIG1fbnVtQ2FsbGVl
UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAs
IG1fbnVtVmFycyh1bmxpbmtlZENvZGVCbG9jay0+bV9udW1WYXJzKQogICAgICwgbV9pc0NvbnN0
cnVjdG9yKHVubGlua2VkQ29kZUJsb2NrLT5pc0NvbnN0cnVjdG9yKCkpCiAgICAgLCBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCh0cnVlKQotICAgICwgbV91bmxpbmtlZENvZGUoZ2xvYmFsT2JqZWN0
LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQotICAgICwgbV9vd25l
ckV4ZWN1dGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhl
Y3V0YWJsZSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25l
ckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUo
bV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3duZXJFeGVjdXRhYmxlKQog
ICAgICwgbV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIG1fdGhpc1JlZ2lzdGVy
KHVubGlua2VkQ29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkKICAgICAsIG1fYXJndW1lbnRzUmVn
aXN0ZXIodW5saW5rZWRDb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpCiAgICAgLCBtX2Fj
dGl2YXRpb25SZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkp
CiAgICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkp
Ci0gICAgLCBtX25lZWRzQWN0aXZhdGlvbih1bmxpbmtlZENvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbigpKQorICAgICwgbV9uZWVkc0FjdGl2YXRpb24odW5saW5rZWRDb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKSAmJiB1bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUpCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAsIG1fc291
cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fY29kZVR5cGUodW5saW5rZWRDb2RlQmxv
Y2stPmNvZGVUeXBlKCkpCkBAIC0xNjU3LDcgKzE1NTYsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgc2V0SWRlbnRpZmllcnModW5saW5rZWRDb2RlQmxv
Y2stPmlkZW50aWZpZXJzKCkpOwogICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycygpKTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2st
PnVzZXNHbG9iYWxPYmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtl
ZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKV0uc2V0KCptX3ZtLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5r
ZWRDb2RlQmxvY2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCldLnNldCgqbV92bSwgb3duZXJFeGVj
dXRhYmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRlY2xzLmdyb3co
dW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsKICAgICBmb3IgKHNp
emVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSwg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGkpOwpAQCAtMTY5MywxMiArMTU5MiwxMyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvCiAgICAgICAgIH0KICAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlu
a2VkQ29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKICAgICAgICAgICAg
IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuZ3Jvdyhjb3VudCk7CisgICAgICAgICAg
ICBzaXplX3Qgbm9uTG9jYWxTY29wZURlcHRoID0gc2NvcGUtPmRlcHRoKCk7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICBj
b25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyID0gdW5saW5rZWRDb2RlQmxvY2stPmV4
Y2VwdGlvbkhhbmRsZXIoaSk7CiAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVyc1tpXS5zdGFydCA9IGhhbmRsZXIuc3RhcnQ7CiAgICAgICAgICAgICAgICAgbV9y
YXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpXS5lbmQgPSBoYW5kbGVyLmVuZDsKICAgICAg
ICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2ldLnRhcmdldCA9IGhh
bmRsZXIudGFyZ2V0OwotICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFu
ZGxlcnNbaV0uc2NvcGVEZXB0aCA9IGhhbmRsZXIuc2NvcGVEZXB0aCArIGJhc2VTY29wZURlcHRo
OworICAgICAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnNbaV0uc2Nv
cGVEZXB0aCA9IG5vbkxvY2FsU2NvcGVEZXB0aCArIGhhbmRsZXIuc2NvcGVEZXB0aDsKICNpZiBF
TkFCTEUoSklUKSAmJiBFTkFCTEUoTExJTlQpCiAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVyc1tpXS5uYXRpdmVDb2RlID0gQ29kZUxvY2F0aW9uTGFiZWwoTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MoTExJbnQ6Omdl
dENvZGVQdHIobGxpbnRfb3BfY2F0Y2gpKSk7CiAjZW5kaWYKQEAgLTE3NTQsMTMgKzE2NTQsNiBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAjZW5kaWYKICAgICBp
ZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZXMoKSkKICAgICAgICAgbV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZXMuZ3Jvdyhz
aXplKTsKLSAgICBpZiAoc2l6ZV90IHNpemUgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZS
ZXNvbHZlT3BlcmF0aW9ucygpKQotICAgICAgICBtX3Jlc29sdmVPcGVyYXRpb25zLmdyb3coc2l6
ZSk7Ci0gICAgaWYgKHNpemVfdCBwdXRUb0Jhc2VDb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZlB1dFRvQmFzZU9wZXJhdGlvbnMoKSkgewotICAgICAgICBtX3B1dFRvQmFzZU9wZXJh
dGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwdXRUb0Jhc2VDb3VudCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHV0VG9CYXNlQ291bnQ7ICsraSkKLSAgICAgICAgICAgIG1f
cHV0VG9CYXNlT3BlcmF0aW9ucy51bmNoZWNrZWRBcHBlbmQoUHV0VG9CYXNlT3BlcmF0aW9uKGlz
U3RyaWN0TW9kZSgpKSk7Ci0gICAgfQogCiAgICAgLy8gQ29weSBhbmQgdHJhbnNsYXRlIHRoZSBV
bmxpbmtlZEluc3RydWN0aW9ucwogICAgIHNpemVfdCBpbnN0cnVjdGlvbkNvdW50ID0gdW5saW5r
ZWRDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKQEAgLTE4MDksNTkgKzE3MDIsNiBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgot
ICAgICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWw6Ci0gICAgICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9iYXNlX3RvX2dsb2JhbF9keW5hbWljOgotICAgICAgICBjYXNlIG9wX3Jlc29sdmVf
YmFzZV90b19zY29wZToKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGVfd2l0
aF90b3Bfc2NvcGVfY2hlY2s6IHsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5y
ZXNvbHZlT3BlcmF0aW9ucyA9ICZtX3Jlc29sdmVPcGVyYXRpb25zW3BjW2kgKyA0XS51Lm9wZXJh
bmRdOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnB1dFRvQmFzZU9wZXJhdGlv
biA9ICZtX3B1dFRvQmFzZU9wZXJhdGlvbnNbcGNbaSArIDVdLnUub3BlcmFuZF07Ci0jaWYgRU5B
QkxFKERGR19KSVQpCi0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1
ZVByb2ZpbGVzW3BjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBB
U1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0gICAgICAgICAgICBwcm9m
aWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gaTsKLSAgICAgICAgICAgIEFTU0VSVCgob3BMZW5ndGgg
LSAxKSA+IDUpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0g
cHJvZmlsZTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9yZXNvbHZlX2dsb2JhbF9wcm9wZXJ0eToKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZl
X2dsb2JhbF92YXI6Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZWRfdmFyOgotICAgICAg
ICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3Zhcl9vbl90b3Bfc2NvcGU6Ci0gICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV9zY29wZWRfdmFyX3dpdGhfdG9wX3Njb3BlX2NoZWNrOiB7Ci0gICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDNdLnUucmVzb2x2ZU9wZXJhdGlvbnMgPSAmbV9yZXNvbHZlT3Bl
cmF0aW9uc1twY1tpICsgM10udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3RvX2Jhc2U6Ci0gICAgICAgIGNhc2Ugb3BfcHV0X3Rv
X2Jhc2VfdmFyaWFibGU6IHsKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5wdXRU
b0Jhc2VPcGVyYXRpb24gPSAmbV9wdXRUb0Jhc2VPcGVyYXRpb25zW3BjW2kgKyA0XS51Lm9wZXJh
bmRdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNv
bHZlOiB7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZF07
Ci0gICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7Ci0g
ICAgICAgICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gaTsKLSAgICAgICAgICAgIEFT
U0VSVCgob3BMZW5ndGggLSAxKSA+IDMpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBv
cExlbmd0aCAtIDFdID0gcHJvZmlsZTsKLSNlbmRpZgotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyAzXS51LnJlc29sdmVPcGVyYXRpb25zID0gJm1fcmVzb2x2ZU9wZXJhdGlvbnNbcGNbaSAr
IDNdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3Jlc29sdmVfd2l0aF9iYXNlOgotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF90
aGlzOiB7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUucmVzb2x2ZU9wZXJhdGlv
bnMgPSAmbV9yZXNvbHZlT3BlcmF0aW9uc1twY1tpICsgNF0udS5vcGVyYW5kXTsKLSAgICAgICAg
ICAgIGlmIChwY1tpXS51Lm9wY29kZSAhPSBvcF9yZXNvbHZlX3dpdGhfdGhpcykKLSAgICAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUucHV0VG9CYXNlT3BlcmF0aW9uID0gJm1fcHV0
VG9CYXNlT3BlcmF0aW9uc1twY1tpICsgNV0udS5vcGVyYW5kXTsKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNb
cGNbaSArIG9wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9m
aWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKLSAgICAgICAgICAgIHByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQgPSBpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAt
IDFdID0gcHJvZmlsZTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OiB7CiAgICAgICAgICAgICBpbnQgb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9
ICZtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlc1tvYmplY3RBbGxvY2F0aW9uUHJvZmlsZUluZGV4
XTsKQEAgLTE4NzMsMTYgKzE3MTMsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ug
b3BfZ2V0X3Njb3BlZF92YXI6IHsKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgICAgIFZh
bHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbaSArIG9wTGVuZ3RoIC0g
MV0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0ID09IC0xKTsKLSAgICAgICAgICAgIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPSBpOwot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gcHJvZmlsZTsKLSNl
bmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQogICAgICAgICBjYXNlIG9wX2Nh
bGw6CiAgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCkBA
IC0xOTI5LDE5ICsxNzU5LDU4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG8KICAgICAgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6IHsKICAgICAgICAg
ICAgIEFTU0VSVChjb2RlVHlwZSgpID09IEdsb2JhbENvZGUpOwogICAgICAgICAgICAgSWRlbnRp
ZmllciBpZGVudCA9IGlkZW50aWZpZXIocGNbaSArIDRdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5n
ZXQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBt
X2dsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7CiAgICAgICAg
ICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgICAgIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyAwXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9n
bG9iYWxfY29uc3RfY2hlY2spOwotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMV0g
PSAmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOwotICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgM10gPSBlbnRyeS5hZGRyZXNzT2ZJc1dhdGNoZWQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEl0
J3MgbGlrZWx5IHRoYXQgd2UnbGwgd3JpdGUgdG8gdGhpcyB2YXIsIHNvIG5vdGlmeSBub3cgYW5k
IGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBkb2luZyBzbyBhdCBydW50aW1lLgorICAgICAgICAgICAg
ZW50cnkubm90aWZ5V3JpdGUoKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAwXSA9
IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUob3BfaW5pdF9nbG9iYWxfY29uc3QpOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAxXSA9ICZnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQo
ZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDFdID0gJm1f
Z2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKKyAg
ICAgICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1tpICsgMl0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIFJlc29sdmVUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZl
VHlwZT4ocGNbaSArIDNdLnUub3BlcmFuZCk7CisKKyAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9
IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBz
Y29wZSwgaWRlbnQsIEdldCwgdHlwZSk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDNd
LnUub3BlcmFuZCA9IG9wLnR5cGU7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUu
b3BlcmFuZCA9IG9wLmRlcHRoOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQorICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1tw
Y1tpICsgb3BMZW5ndGggLSAxXS51Lm9wZXJhbmRdOworICAgICAgICAgICAgQVNTRVJUKHByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAgICAgICAgcHJvZmlsZS0+bV9ieXRl
Y29kZU9mZnNldCA9IGk7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0g
MV0gPSBwcm9maWxlOworI2VuZGlmCisKKyAgICAgICAgICAgIC8vIGdldF9mcm9tX3Njb3BlIGRz
dCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3BlcmFuZAorICAg
ICAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKHBjW2kgKyAzXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0gUmVzb2x2
ZU1vZGVBbmRUeXBlKHBjW2kgKyA0XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgUmVzb2x2ZU9w
IG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIHNjb3BlLCBpZGVudCwgR2V0LCBtb2RlQW5kVHlwZS50eXBlKCkpOworCisgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZShtb2Rl
QW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9wZXJhbmQoKTsKKyAgICAgICAgICAgIGlmIChvcC5z
dHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVy
ZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
b3Aub3BlcmFuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2Ugb3BfcHV0X3RvX3Njb3BlOiB7CisgICAgICAgICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUs
IGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKKyAgICAg
ICAgICAgIElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihwY1tpICsgMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9IFJlc29sdmVN
b2RlQW5kVHlwZShwY1tpICsgNF0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIFJlc29sdmVPcCBv
cCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBzY29wZSwgaWRlbnQsIFB1dCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKKworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFu
ZFR5cGUubW9kZSgpLCBvcC50eXBlKS5vcGVyYW5kKCk7CisgICAgICAgICAgICBpZiAob3Auc3Ry
dWN0dXJlKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUu
c2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9w
Lm9wZXJhbmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjAyMiw1MCAr
MTg5MSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXROdW1QYXJhbWV0ZXJzKGludCBuZXcKICNlbmRp
ZgogfQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBJbnN0cnVjdGlvbiogdlBDKQotewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IG1fdm0tPmludGVycHJldGVyOwotCi0gICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZCkgJiYgdlBDWzRdLnUuc3RydWN0dXJlKSB7Ci0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ2UENbNF0udS5zdHJ1Y3R1cmUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlKG9wX2dldF9ieV9pZF9zZWxmKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0
ZXItPmdldE9wY29kZShvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGYpIHx8IHZQQ1swXS51Lm9wY29k
ZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZikpIHsK
LSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnZQQ1s0XS51LnN0cnVjdHVyZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlKG9wX2dldF9ieV9pZF9wcm90bykgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJl
dGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bykgfHwgdlBDWzBdLnUub3Bj
b2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90bykp
IHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnZQQ1s0XS51LnN0cnVjdHVyZSk7Ci0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZ2UENbNV0udS5zdHJ1Y3R1cmUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShv
cF9nZXRfYnlfaWRfY2hhaW4pIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlKG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW4pIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW4pKSB7Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZ2UENbNF0udS5zdHJ1Y3R1cmUpOwotICAgICAgICBpZiAodlBD
WzVdLnUuc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdlBDWzVd
LnUuc3RydWN0dXJlQ2hhaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh2UENb
MF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWRfdHJhbnNp
dGlvbikpIHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnZQQ1s0XS51LnN0cnVjdHVyZSk7Ci0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ2UENbNV0udS5zdHJ1Y3R1cmUpOwotICAgICAgICBpZiAo
dlBDWzZdLnUuc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdlBD
WzZdLnUuc3RydWN0dXJlQ2hhaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh2
UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRfYnlfaWQpICYm
IHZQQ1s0XS51LnN0cnVjdHVyZSkgewotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdlBDWzRdLnUu
c3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodlBDWzBdLnUub3Bj
b2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcHV0X2J5X2lkX3JlcGxhY2UpKSB7Ci0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ2UENbNF0udS5zdHJ1Y3R1cmUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gVGhlc2UgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlZiB0aGVpciBT
dHJ1Y3R1cmVzLgotICAgIEFTU0VSVCh2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdl
dE9wY29kZShvcF9nZXRfYnlfaWQpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZCkgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVy
LT5nZXRPcGNvZGUob3BfZ2V0X2J5X2lkX2dlbmVyaWMpIHx8IHZQQ1swXS51Lm9wY29kZSA9PSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX3B1dF9ieV9pZF9nZW5lcmljKSB8fCB2UENbMF0udS5v
cGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfYXJyYXlfbGVuZ3RoKSB8fCB2
UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9nZXRfc3RyaW5nX2xl
bmd0aCkpOwotfQotCiB2b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEV2YWxDYWNoZU1hcDo6aXRlcmF0b3IgZW5kID0gbV9jYWNo
ZU1hcC5lbmQoKTsKQEAgLTIzMzQsNiArMjE1OSwxNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9f
c2NvcGU6IHsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4mIHN0
cnVjdHVyZSA9IGN1ckluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlOworICAgICAgICAgICAgICAg
IGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVjdHVyZS5nZXQoKSkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBz
Y29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQpAQCAtMjM4MiwyOCArMjIx
Nyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9wdXRU
b0Jhc2VPcGVyYXRpb25zLnNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
aWYgKG1fcHV0VG9CYXNlT3BlcmF0aW9uc1tpXS5tX3N0cnVjdHVyZSAmJiAhSGVhcDo6aXNNYXJr
ZWQobV9wdXRUb0Jhc2VPcGVyYXRpb25zW2ldLm1fc3RydWN0dXJlLmdldCgpKSkgewotICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDbGVhcmluZyBwdXRUb0Jhc2UgaW5mbyBpbiAiLCAqdGhpcywgIlxuIik7Ci0gICAgICAgICAg
ICBtX3B1dFRvQmFzZU9wZXJhdGlvbnNbaV0ubV9zdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBmb3IgKHNpemVfdCBzaXplID0gbV9yZXNvbHZlT3BlcmF0aW9ucy5zaXpl
KCksIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3Jlc29sdmVPcGVyYXRp
b25zW2ldLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgZm9yIChzaXplX3QgaW5zblNpemUgPSBtX3Jlc29sdmVPcGVyYXRpb25zW2ldLnNp
emUoKSAtIDEsIGsgPSAwOyBrIDwgaW5zblNpemU7ICsraykKLSAgICAgICAgICAgIEFTU0VSVCgh
bV9yZXNvbHZlT3BlcmF0aW9uc1tpXVtrXS5tX3N0cnVjdHVyZSk7Ci0jZW5kaWYKLSAgICAgICAg
bV9yZXNvbHZlT3BlcmF0aW9uc1tpXS5sYXN0KCkubV9zdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAg
ICAgaWYgKG1fcmVzb2x2ZU9wZXJhdGlvbnNbaV0ubGFzdCgpLm1fc3RydWN0dXJlICYmICFIZWFw
Ojppc01hcmtlZChtX3Jlc29sdmVPcGVyYXRpb25zW2ldLmxhc3QoKS5tX3N0cnVjdHVyZS5nZXQo
KSkpIHsKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAg
ICAgICAgZGF0YUxvZygiQ2xlYXJpbmcgcmVzb2x2ZSBpbmZvIGluICIsICp0aGlzLCAiXG4iKTsK
LSAgICAgICAgICAgIG1fcmVzb2x2ZU9wZXJhdGlvbnNbaV0ubGFzdCgpLm1fc3RydWN0dXJlLmNs
ZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICNpZiBFTkFCTEUoSklUKQogICAgIC8vIEhhbmRs
ZSBpbmxpbmUgY2FjaGVzLgogICAgIGlmICghIWppdENvZGUoKSkgewpAQCAtMjk5NCwxNiArMjgw
NywxNyBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTCiAgICAgCiAg
ICAgaWYgKCFtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgcmV0dXJuOwotICAgIAor
CisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygp
KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAoIURGRzo6bWlnaHRJbmxpbmVGdW5j
dGlvbih0aGlzKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYgKCFjYW5JbmxpbmUo
bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIGlm
IChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
KSB7CiAgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgc3RpbGwgaW4gdGhlIGludGVycHJldGVy
LCB0aGVuIHdlIGNhbid0IGV4cGVjdCBpbmxpbmluZyB0bwogICAgICAgICAvLyBoYXBwZW4gYW55
dGltZSBzb29uLiBBc3N1bWUgaXQncyBwcm9maXRhYmxlIHRvIG9wdGltaXplIGl0IHNlcGFyYXRl
bHkuIFRoaXMKQEAgLTMwNDcsOCArMjg2MSwxMCBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5j
b21pbmdDYWxsKEV4ZWNTCiAgICAgICAgIGRhdGFMb2coIiAgICBNYXJraW5nIFNBQkkgYmVjYXVz
ZSB0aGUgY2FsbGVyIGlzIG5vdCBhIERGRyBjYW5kaWRhdGUuXG4iKTsKICAgICAKICAgICBtX3No
b3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoREZH
X0pJVCkKIHVuc2lnbmVkIENvZGVCbG9jazo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBj
b25zdAogewogICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlv
bnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpOwpAQCAtMzE4OCw2ICszMDA0LDcg
QEAgaW50MzJfdCBDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaQogICAgICAgICBvcHRp
bWl6YXRpb25UaHJlc2hvbGRTY2FsaW5nRmFjdG9yKCkgKgogICAgICAgICAoMSA8PCByZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpKSk7CiB9CisjZW5kaWYKIAogYm9vbCBDb2RlQmxvY2s6OmNo
ZWNrSWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkKIHsKQEAgLTMyMjAsMjEgKzMwMzcs
MjcgQEAgdm9pZCBDb2RlQmxvY2s6Om9wdGltaXplQWZ0ZXJXYXJtVXAoKQogewogICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXpp
bmcgYWZ0ZXIgd2FybS11cC5cbiIpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1faml0RXhl
Y3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXAoKSwgdGhpcyk7CisjZW5kaWYKIH0KIAogdm9pZCBDb2RlQmxvY2s6Om9wdGltaXplQWZ0
ZXJMb25nV2FybVVwKCkKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAg
ICBkYXRhTG9nKCp0aGlzLCAiOiBPcHRpbWl6aW5nIGFmdGVyIGxvbmcgd2FybS11cC5cbiIpOwor
I2lmIEVOQUJMRShERkdfSklUKQogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNo
b2xkKGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCksIHRoaXMpOworI2Vu
ZGlmCiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpvcHRpbWl6ZVNvb24oKQogewogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgIGRhdGFMb2coKnRoaXMsICI6IE9wdGltaXppbmcg
c29vbi5cbiIpOworI2lmIEVOQUJMRShERkdfSklUKQogICAgIG1faml0RXhlY3V0ZUNvdW50ZXIu
c2V0TmV3VGhyZXNob2xkKGNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbigpLCB0aGlzKTsKKyNl
bmRpZgogfQogCiB2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1
cnJlbnRseSgpCkBAIC0zMjQ0LDYgKzMwNjcsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRp
bWl6YXRpb25TbG93UGF0CiAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5mb3JjZVNsb3dQYXRoQ29u
Y3VycmVudGx5KCk7CiB9CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKIHZvaWQgQ29kZUJsb2NrOjpz
ZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRD
b2RlOjpCYXNlbGluZUpJVCk7CkBAIC0zMjc1LDcgKzMwOTksNiBAQCB2b2lkIENvZGVCbG9jazo6
c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiAgICAgfQogfQogCi0jaWYgRU5BQkxFKEpJVCkKIHVp
bnQzMl90IENvZGVCbG9jazo6YWRqdXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVz
aXJlZFRocmVzaG9sZCkKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGpp
dFR5cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSAi
TGluZUluZm8uaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAi
UmVnRXhwT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVzb2x2ZU9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5o
IgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtOTksNyArOTgsNyBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBv
dGhlcik7CiAgICAgICAgIAotICAgIENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBi
YXNlU2NvcGVEZXB0aCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJj
ZU9mZnNldCk7CisgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRDb2RlQmxvY2sqLCBKU1Njb3BlKiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCk7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxP
YmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAgIEhlYXAqIG1faGVhcDsKQEAgLTM1Niw3ICszNTUs
NyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBuZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgY29kZVR5cGUo
KSAhPSBHbG9iYWxDb2RlOworICAgICAgICByZXR1cm4gbV9uZWVkc0FjdGl2YXRpb247CiAgICAg
fQogCiAgICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IDApIGNvbnN0CkBAIC05NzEsOCArOTcwLDYgQEAgcHJpdmF0ZToKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgdm9pZCBkdW1wUmFyZUNhc2VQcm9maWxlKFBy
aW50U3RyZWFtJiwgY29uc3QgY2hhciogbmFtZSwgUmFyZUNhc2VQcm9maWxlKiwgYm9vbCYgaGFz
UHJpbnRlZFByb2ZpbGluZyk7CiAjZW5kaWYKLQotICAgIHZvaWQgdmlzaXRTdHJ1Y3R1cmVzKFNs
b3RWaXNpdG9yJiwgSW5zdHJ1Y3Rpb24qIHZQQyk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGJvb2wgc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4o
KQpAQCAtMTA4Miw5ICsxMDc5LDYgQEAgcHJpdmF0ZToKICAgICB1aW50MTZfdCBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcjsKICAgICB1aW50MTZfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyOwogCi0gICAgVmVjdG9yPFJlc29sdmVPcGVyYXRpb25zPiBtX3Jlc29sdmVPcGVyYXRpb25z
OwotICAgIFZlY3RvcjxQdXRUb0Jhc2VPcGVyYXRpb24sIDE+IG1fcHV0VG9CYXNlT3BlcmF0aW9u
czsKLQogICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIHB1YmxpYzoKQEAgLTExMjcsOCArMTEyMSw4IEBAIHByb3RlY3RlZDoKICAgICB7
CiAgICAgfQogICAgICAgICAKLSAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGJhc2VTY29wZURlcHRoLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zm
c2V0KQotICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJs
b2NrLCBnbG9iYWxPYmplY3QsIGJhc2VTY29wZURlcHRoLCBzb3VyY2VQcm92aWRlciwgc291cmNl
T2Zmc2V0KQorICAgIEdsb2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2Nv
cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQpCisgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0KQogICAgIHsK
ICAgICB9CiB9OwpAQCAtMTE0MCw4ICsxMTM0LDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
LSAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3Zp
ZGVyKQotICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2Vk
Q29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIDAsIHNvdXJjZVByb3ZpZGVyLCAwKQorICAgIFByb2dy
YW1Db2RlQmxvY2soUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQorICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNl
UHJvdmlkZXIsIDApCiAgICAgewogICAgIH0KIApAQCAtMTE2Myw4ICsxMTU3LDggQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAgICAgICAgIAotICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVC
bG9jaywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIsIGludCBiYXNlU2NvcGVEZXB0aCkKLSAgICAgICAgOiBHbG9i
YWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBiYXNlU2NvcGVEZXB0aCwgc291cmNlUHJvdmlkZXIsIDApCisgICAgRXZhbENvZGVCbG9j
ayhFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sq
IHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92
aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCkKICAg
ICB7CiAgICAgfQogCkBAIC0xMTkyLDggKzExODYsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
IAotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRh
YmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNl
UHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCkKLSAgICAgICAgOiBDb2RlQmxvY2sob3du
ZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCAwLCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0KQorICAgIEZ1bmN0aW9uQ29kZUJsb2NrKEZ1bmN0aW9uRXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+
IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQpCisgICAgICAgIDogQ29kZUJs
b2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92
aWRlciwgc291cmNlT2Zmc2V0KQogICAgIHsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oCShyZXZpc2lvbiAx
NTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSwyOSArNDksMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgRXZhbEV4ZWN1
dGFibGUqIGdldFNsb3coRXhlY1N0YXRlKiBleGVjLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciwg
Ym9vbCBpblN0cmljdENvbnRleHQsIGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgSlNTY29wZSog
c2NvcGUsIEpTVmFsdWUmIGV4Y2VwdGlvblZhbHVlKQorICAgICAgICBFdmFsRXhlY3V0YWJsZSog
Z2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyLCBib29sIGlu
U3RyaWN0Q29udGV4dCwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBKU1Njb3BlKiBzY29wZSkK
ICAgICAgICAgewogICAgICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWxFeGVjdXRhYmxlID0g
RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBtYWtlU291cmNlKGV2YWxTb3VyY2UpLCBpblN0
cmljdENvbnRleHQpOwotICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBldmFsRXhlY3V0YWJs
ZS0+Y29tcGlsZShleGVjLCBzY29wZSk7Ci0gICAgICAgICAgICBpZiAoZXhjZXB0aW9uVmFsdWUp
CisgICAgICAgICAgICBpZiAoIWV2YWxFeGVjdXRhYmxlKQogICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICghaW5TdHJpY3RDb250ZXh0ICYm
IGV2YWxTb3VyY2UubGVuZ3RoKCkgPCBtYXhDYWNoZWFibGVTb3VyY2VMZW5ndGggJiYgc2NvcGUt
PmJlZ2luKCktPmlzVmFyaWFibGVPYmplY3QoKSAmJiBtX2NhY2hlTWFwLnNpemUoKSA8IG1heENh
Y2hlRW50cmllcykKICAgICAgICAgICAgICAgICBtX2NhY2hlTWFwLnNldChldmFsU291cmNlLmlt
cGwoKSwgV3JpdGVCYXJyaWVyPEV2YWxFeGVjdXRhYmxlPihleGVjLT52bSgpLCBvd25lciwgZXZh
bEV4ZWN1dGFibGUpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIGV2YWxFeGVj
dXRhYmxlOwogICAgICAgICB9CiAKLSAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGdldChFeGVjU3Rh
dGUqIGV4ZWMsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyLCBib29sIGluU3RyaWN0Q29udGV4dCwg
Y29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBKU1Njb3BlKiBzY29wZSwgSlNWYWx1ZSYgZXhjZXB0
aW9uVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBldmFsRXhl
Y3V0YWJsZSA9IHRyeUdldChpblN0cmljdENvbnRleHQsIGV2YWxTb3VyY2UsIHNjb3BlKTsKLQot
ICAgICAgICAgICAgaWYgKCFldmFsRXhlY3V0YWJsZSkKLSAgICAgICAgICAgICAgICBldmFsRXhl
Y3V0YWJsZSA9IGdldFNsb3coZXhlYywgb3duZXIsIGluU3RyaWN0Q29udGV4dCwgZXZhbFNvdXJj
ZSwgc2NvcGUsIGV4Y2VwdGlvblZhbHVlKTsKLQotICAgICAgICAgICAgcmV0dXJuIGV2YWxFeGVj
dXRhYmxlOwotICAgICAgICB9Ci0KICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZU1hcC5pc0VtcHR5KCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
MCwxMCArMjYwLDEzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxlIHRoZSBzdXBlciBzaW1wbGUgc2VsZiBhY2Nl
c3MgY2FzZS4gV2UgY291bGQgaGFuZGxlIHRoZQogICAgIC8vIHByb3RvdHlwZSBjYXNlIGluIHRo
ZSBmdXR1cmUuCiAgICAgCisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworCiAgICAgaWYgKHRvVUludDMyRnJvbVN0cmluZ0lt
cGwodWlkKSAhPSBQcm9wZXJ0eU5hbWU6Ok5vdEFuSW5kZXgpCiAgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCkpCisgICAgaWYgKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoKSAmJiBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkudHlwZSgpICE9IEdsb2JhbE9iamVjdFR5cGUpCiAgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAogICAgIGlmICghc3RydWN0dXJlLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvR2xvYmFsUmVzb2x2ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2xvYmFsUmVzb2x2ZUluZm8uaAkocmV2aXNpb24gMTUxMzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dsb2JhbFJlc29sdmVJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEdsb2JhbFJlc29sdmVJbmZvX2gKLSNkZWZpbmUg
R2xvYmFsUmVzb2x2ZUluZm9faAotCi0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1zdHJ1Y3QgR2xvYmFsUmVzb2x2ZUluZm8gewotICAgIEdsb2JhbFJlc29s
dmVJbmZvKCkgeyB9Ci0gICAgCi0gICAgR2xvYmFsUmVzb2x2ZUluZm8odW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgIDogb2Zmc2V0KDApCi0gICAgICAgICwgYnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiBzdHJ1Y3R1cmU7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0OyAvLyBPbmx5IHZhbGlkIGluIG9sZCBKSVQgY29kZS4gVGhpcyBt
ZWFucyBub3RoaW5nIGluIHRoZSBERkcuCi19OwotCi1pbmxpbmUgdW5zaWduZWQgZ2V0R2xvYmFs
UmVzb2x2ZUluZm9CeXRlY29kZU9mZnNldChHbG9iYWxSZXNvbHZlSW5mbyogZ2xvYmFsUmVzb2x2
ZUluZm8pCi17Ci0gICAgcmV0dXJuIGdsb2JhbFJlc29sdmVJbmZvLT5ieXRlY29kZU9mZnNldDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBHbG9iYWxSZXNvbHZlSW5mb19o
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5o
CShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIk1h
Y3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlT
bG90LmgiCi0jaW5jbHVkZSAiUmVzb2x2ZU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNwZWNpYWxQ
b2ludGVyLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hh
aW4uaCIKQEAgLTExNyw4ICsxMTYsNiBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24gewogICAgICAgICBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSogb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAg
IHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJvb2wqIHByZWRpY2F0ZVBvaW50ZXI7Ci0gICAgICAg
IFJlc29sdmVPcGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9uczsKLSAgICAgICAgUHV0VG9CYXNl
T3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb247CiAgICAgfSB1OwogICAgICAgICAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lv
biAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDM0ICs5NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNy
byhvcF9pc19mdW5jdGlvbiwgMykgXAogICAgIG1hY3JvKG9wX2luLCA0KSBcCiAgICAgXAotICAg
IG1hY3JvKG9wX2dldF9zY29wZWRfdmFyLCA1KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwK
LSAgICBtYWNybyhvcF9wdXRfc2NvcGVkX3ZhciwgNCkgXAotICAgIFwKLSAgICBtYWNybyhvcF9y
ZXNvbHZlLCA1KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovICBcCi0gICAgbWFjcm8ob3BfcmVz
b2x2ZV9nbG9iYWxfcHJvcGVydHksIDUpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gIFwKLSAg
ICBtYWNybyhvcF9yZXNvbHZlX2dsb2JhbF92YXIsIDUpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcg
Ki8gIFwKLSAgICBtYWNybyhvcF9yZXNvbHZlX3Njb3BlZF92YXIsIDUpIC8qIGhhcyB2YWx1ZSBw
cm9maWxpbmcgKi8gIFwKLSAgICBtYWNybyhvcF9yZXNvbHZlX3Njb3BlZF92YXJfb25fdG9wX3Nj
b3BlLCA1KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovICBcCi0gICAgbWFjcm8ob3BfcmVzb2x2
ZV9zY29wZWRfdmFyX3dpdGhfdG9wX3Njb3BlX2NoZWNrLCA1KSAvKiBoYXMgdmFsdWUgcHJvZmls
aW5nICovICBcCi0gICAgXAotICAgIG1hY3JvKG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWwsIDcp
IC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAotICAgIG1hY3JvKG9wX3Jlc29sdmVfYmFzZV90
b19nbG9iYWxfZHluYW1pYywgNykgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCi0gICAgbWFj
cm8ob3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlLCA3KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICov
IFwKLSAgICBtYWNybyhvcF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGVfd2l0aF90b3Bfc2NvcGVfY2hl
Y2ssIDcpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAotICAgIG1hY3JvKG9wX3Jlc29sdmVf
YmFzZSwgNykgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCi0gICAgXAogICAgIG1hY3JvKG9w
X2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMsIDMpIFwKICAgICBcCi0gICAgbWFjcm8ob3BfcmVzb2x2
ZV93aXRoX2Jhc2UsIDcpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAotICAgIFwKLSAgICBt
YWNybyhvcF9yZXNvbHZlX3dpdGhfdGhpcywgNikgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBc
Ci0gICAgXAotICAgIG1hY3JvKG9wX3B1dF90b19iYXNlLCA1KSBcCi0gICAgbWFjcm8ob3BfcHV0
X3RvX2Jhc2VfdmFyaWFibGUsIDUpIFwKLSAgICBcCiAgICAgbWFjcm8ob3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wLCA1KSBcCiAgICAgbWFjcm8ob3BfaW5pdF9nbG9iYWxfY29uc3QsIDUpIFwKLSAg
ICBtYWNybyhvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaywgNSkgXAogICAgIG1hY3JvKG9wX2dl
dF9ieV9pZCwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgbWFjcm8ob3BfZ2V0
X2J5X2lkX291dF9vZl9saW5lLCA5KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKICAgICBt
YWNybyhvcF9nZXRfYnlfaWRfc2VsZiwgOSkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCkBA
IC0xOTQsNiArMTcwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKG9wX2dldF9wbmFt
ZXMsIDYpIFwKICAgICBtYWNybyhvcF9uZXh0X3BuYW1lLCA3KSBcCiAgICAgXAorICAgIG1hY3Jv
KG9wX3Jlc29sdmVfc2NvcGUsIDUpIFwKKyAgICBtYWNybyhvcF9nZXRfZnJvbV9zY29wZSwgOCkg
LyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCisgICAgbWFjcm8ob3BfcHV0X3RvX3Njb3BlLCA3
KSBcCisgICAgXAogICAgIG1hY3JvKG9wX3B1c2hfd2l0aF9zY29wZSwgMikgXAogICAgIG1hY3Jv
KG9wX3BvcF9zY29wZSwgMSkgXAogICAgIG1hY3JvKG9wX3B1c2hfbmFtZV9zY29wZSwgNCkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsOCArMTUyLDExIEBAIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKIHsKICAgICBpZiAodG9VSW50
MzJGcm9tU3RyaW5nSW1wbCh1aWQpICE9IFByb3BlcnR5TmFtZTo6Tm90QW5JbmRleCkKICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICBpZiAoIXN0cnVj
dHVyZSkKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5vdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QoKSkKKyAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCgpICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gR2xvYmFsT2JqZWN0
VHlwZSkKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAKICAg
ICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFs
U3RhdHVzLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc29sdmVHbG9iYWxTdGF0dXMuaCIK
LQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKLSNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1zdGF0aWMgUmVzb2x2ZUdsb2JhbFN0YXR1cyBjb21wdXRlRm9yU3RydWN0dXJlKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlk
KQotewotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSgqY29kZUJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZp
Y1ZhbHVlKTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgc3Bl
Y2lmaWNWYWx1ZSA9IDA7Ci0gICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAg
IHJldHVybiBSZXNvbHZlR2xvYmFsU3RhdHVzKCk7Ci0gICAgCi0gICAgcmV0dXJuIFJlc29sdmVH
bG9iYWxTdGF0dXMoUmVzb2x2ZUdsb2JhbFN0YXR1czo6U2ltcGxlLCBzdHJ1Y3R1cmUsIG9mZnNl
dCwgc3BlY2lmaWNWYWx1ZSk7Ci19Ci0KLVJlc29sdmVHbG9iYWxTdGF0dXMgUmVzb2x2ZUdsb2Jh
bFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50LCBSZXNvbHZlT3Bl
cmF0aW9uKiBvcGVyYXRpb24sIFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgCi0gICAgQVNTRVJUKG9wZXJh
dGlvbi0+bV9vcGVyYXRpb24gPT0gUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFs
UHJvcGVydHkpOwotICAgIGlmICghb3BlcmF0aW9uLT5tX3N0cnVjdHVyZSkKLSAgICAgICAgcmV0
dXJuIFJlc29sdmVHbG9iYWxTdGF0dXMoKTsKLSAgICAKLSAgICByZXR1cm4gY29tcHV0ZUZvclN0
cnVjdHVyZShjb2RlQmxvY2ssIG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuZ2V0KCksIHVpZCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmgJKHJldmlzaW9uIDE1MTM0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFJlc29sdmVHbG9iYWxTdGF0dXNf
aAotI2RlZmluZSBSZXNvbHZlR2xvYmFsU3RhdHVzX2gKLQotI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKLSNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgotI2luY2x1ZGUgPHd0Zi9Ob3RGb3VuZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LWNsYXNzIENvZGVCbG9jazsKLXN0cnVjdCBSZXNvbHZlT3BlcmF0aW9uOwotY2xhc3MgU3RydWN0
dXJlOwotCi1jbGFzcyBSZXNvbHZlR2xvYmFsU3RhdHVzIHsKLXB1YmxpYzoKLSAgICBlbnVtIFN0
YXRlIHsKLSAgICAgICAgTm9JbmZvcm1hdGlvbiwKLSAgICAgICAgU2ltcGxlLAotICAgICAgICBU
YWtlc1Nsb3dQYXRoCi0gICAgfTsKLSAgICAKLSAgICBSZXNvbHZlR2xvYmFsU3RhdHVzKCkKLSAg
ICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgICAgICwgbV9zdHJ1Y3R1cmUoMCkK
LSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgUmVzb2x2ZUdsb2JhbFN0YXR1cygKLSAgICAgICAgU3RhdGUgc3RhdGUsIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gMCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKLSAg
ICAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpKQotICAgICAgICA6IG1fc3Rh
dGUoc3RhdGUpCi0gICAgICAgICwgbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX3NwZWNpZmljVmFsdWUoc3BlY2lmaWNWYWx1ZSkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBSZXNvbHZlR2xvYmFsU3RhdHVzIGNvbXB1
dGVGb3IoQ29kZUJsb2NrKiwgaW50IGJ5dGVjb2RlSW5kZXgsIFJlc29sdmVPcGVyYXRpb24qLCBT
dHJpbmdJbXBsKiB1aWQpOwotICAgIAotICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
ICE9IE5vSW5mb3JtYXRpb247IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFpc1NldCgpOyB9Ci0gICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
PT0gU2ltcGxlOyB9Ci0gICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZSA9PSBUYWtlc1Nsb3dQYXRoOyB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgU3Rh
dGUgbV9zdGF0ZTsKLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwotICAgIFByb3BlcnR5T2Zm
c2V0IG1fb2Zmc2V0OwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwotfTsgLy8gY2xhc3Mg
UmVzb2x2ZUdsb2JhbFN0YXR1cwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFJl
c29sdmVHbG9iYWxTdGF0dXNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUmVzb2x2ZU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXNvbHZlT3BlcmF0aW9uLmgJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFJlc29sdmVPcGVyYXRpb25faAotI2RlZmluZSBSZXNvbHZlT3Bl
cmF0aW9uX2gKLQotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCi0jaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci0KLXN0cnVjdCBSZXNvbHZlT3BlcmF0aW9uIHsKLSAgICB0eXBl
ZGVmIGVudW0gewotICAgICAgICBGYWlsLAotICAgICAgICBTZXRCYXNlVG9VbmRlZmluZWQsCi0g
ICAgICAgIFJldHVyblNjb3BlQXNCYXNlLAotICAgICAgICBTZXRCYXNlVG9TY29wZSwKLSAgICAg
ICAgU2V0QmFzZVRvR2xvYmFsLAotICAgICAgICBHZXRBbmRSZXR1cm5TY29wZWRWYXIsCi0gICAg
ICAgIEdldEFuZFJldHVybkdsb2JhbFZhciwKLSAgICAgICAgR2V0QW5kUmV0dXJuR2xvYmFsVmFy
V2F0Y2hhYmxlLAotICAgICAgICBTa2lwVG9wU2NvcGVOb2RlLAotICAgICAgICBTa2lwU2NvcGVz
LAotICAgICAgICBSZXR1cm5HbG9iYWxPYmplY3RBc0Jhc2UsCi0gICAgICAgIEdldEFuZFJldHVy
bkdsb2JhbFByb3BlcnR5LAotICAgICAgICBDaGVja0ZvckR5bmFtaWNFbnRyaWVzQmVmb3JlR2xv
YmFsU2NvcGUKLSAgICB9IFJlc29sdmVPcGVyYXRpb25UeXBlOwotCi0gICAgUmVzb2x2ZU9wZXJh
dGlvblR5cGUgbV9vcGVyYXRpb247Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1
Y3R1cmU7Ci0gICAgdW5pb24gewotICAgICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKLSAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBtX3JlZ2lzdGVyQWRkcmVzczsKLSAgICAgICAg
aW50IG1fc2NvcGVzVG9Ta2lwOwotICAgICAgICBpbnQgbV9hY3RpdmF0aW9uUmVnaXN0ZXI7Ci0g
ICAgfTsKLSAgICBzdGF0aWMgUmVzb2x2ZU9wZXJhdGlvbiBnZXRBbmRSZXR1cm5TY29wZWRWYXIo
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBv
cDsKLSAgICAgICAgb3AubV9vcGVyYXRpb24gPSBHZXRBbmRSZXR1cm5TY29wZWRWYXI7Ci0gICAg
ICAgIG9wLm1fb2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gb3A7Ci0gICAgfQotICAg
IHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9uIGNoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9i
YWxTY29wZSgpCi0gICAgewotICAgICAgICBSZXNvbHZlT3BlcmF0aW9uIG9wOwotICAgICAgICBv
cC5tX29wZXJhdGlvbiA9IENoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZTsK
LSAgICAgICAgcmV0dXJuIG9wOwotICAgIH0KLQotICAgIHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9u
IGdldEFuZFJldHVybkdsb2JhbFZhcihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyQWRk
cmVzcywgYm9vbCBjb3VsZEJlV2F0Y2hlZCkKLSAgICB7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRp
b24gb3A7Ci0gICAgICAgIG9wLm1fb3BlcmF0aW9uID0gY291bGRCZVdhdGNoZWQgPyBHZXRBbmRS
ZXR1cm5HbG9iYWxWYXJXYXRjaGFibGUgOiBHZXRBbmRSZXR1cm5HbG9iYWxWYXI7Ci0gICAgICAg
IG9wLm1fcmVnaXN0ZXJBZGRyZXNzID0gcmVnaXN0ZXJBZGRyZXNzOwotICAgICAgICByZXR1cm4g
b3A7Ci0gICAgfQotICAgIHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9uIGdldEFuZFJldHVybkdsb2Jh
bFByb3BlcnR5KCkKLSAgICB7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRpb24gb3A7Ci0gICAgICAg
IG9wLm1fb3BlcmF0aW9uID0gR2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHk7Ci0gICAgICAgIHJl
dHVybiBvcDsKLSAgICB9Ci0gICAgc3RhdGljIFJlc29sdmVPcGVyYXRpb24gcmVzb2x2ZUZhaWwo
KQotICAgIHsKLSAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBvcDsKLSAgICAgICAgb3AubV9vcGVy
YXRpb24gPSBGYWlsOwotICAgICAgICByZXR1cm4gb3A7Ci0gICAgfQotICAgIHN0YXRpYyBSZXNv
bHZlT3BlcmF0aW9uIHNraXBUb3BTY29wZU5vZGUoaW50IGFjdGl2YXRpb25SZWdpc3RlcikKLSAg
ICB7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRpb24gb3A7Ci0gICAgICAgIG9wLm1fb3BlcmF0aW9u
ID0gU2tpcFRvcFNjb3BlTm9kZTsKLSAgICAgICAgb3AubV9hY3RpdmF0aW9uUmVnaXN0ZXIgPSBh
Y3RpdmF0aW9uUmVnaXN0ZXI7Ci0gICAgICAgIHJldHVybiBvcDsKLSAgICB9Ci0gICAgc3RhdGlj
IFJlc29sdmVPcGVyYXRpb24gc2tpcFNjb3BlcyhpbnQgc2NvcGVzVG9Ta2lwKQotICAgIHsKLSAg
ICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBvcDsKLSAgICAgICAgb3AubV9vcGVyYXRpb24gPSBTa2lw
U2NvcGVzOwotICAgICAgICBvcC5tX3Njb3Blc1RvU2tpcCA9IHNjb3Blc1RvU2tpcDsKLSAgICAg
ICAgcmV0dXJuIG9wOwotICAgIH0KLSAgICBzdGF0aWMgUmVzb2x2ZU9wZXJhdGlvbiByZXR1cm5H
bG9iYWxPYmplY3RBc0Jhc2UoKQotICAgIHsKLSAgICAgICAgUmVzb2x2ZU9wZXJhdGlvbiBvcDsK
LSAgICAgICAgb3AubV9vcGVyYXRpb24gPSBSZXR1cm5HbG9iYWxPYmplY3RBc0Jhc2U7Ci0gICAg
ICAgIHJldHVybiBvcDsKLSAgICB9Ci0gICAgc3RhdGljIFJlc29sdmVPcGVyYXRpb24gc2V0QmFz
ZVRvR2xvYmFsKCkKLSAgICB7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRpb24gb3A7Ci0gICAgICAg
IG9wLm1fb3BlcmF0aW9uID0gU2V0QmFzZVRvR2xvYmFsOwotICAgICAgICByZXR1cm4gb3A7Ci0g
ICAgfQotICAgIHN0YXRpYyBSZXNvbHZlT3BlcmF0aW9uIHNldEJhc2VUb1VuZGVmaW5lZCgpCi0g
ICAgewotICAgICAgICBSZXNvbHZlT3BlcmF0aW9uIG9wOwotICAgICAgICBvcC5tX29wZXJhdGlv
biA9IFNldEJhc2VUb1VuZGVmaW5lZDsKLSAgICAgICAgcmV0dXJuIG9wOwotICAgIH0KLSAgICBz
dGF0aWMgUmVzb2x2ZU9wZXJhdGlvbiBzZXRCYXNlVG9TY29wZSgpCi0gICAgewotICAgICAgICBS
ZXNvbHZlT3BlcmF0aW9uIG9wOwotICAgICAgICBvcC5tX29wZXJhdGlvbiA9IFNldEJhc2VUb1Nj
b3BlOwotICAgICAgICByZXR1cm4gb3A7Ci0gICAgfQotICAgIHN0YXRpYyBSZXNvbHZlT3BlcmF0
aW9uIHJldHVyblNjb3BlQXNCYXNlKCkKLSAgICB7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRpb24g
b3A7Ci0gICAgICAgIG9wLm1fb3BlcmF0aW9uID0gUmV0dXJuU2NvcGVBc0Jhc2U7Ci0gICAgICAg
IHJldHVybiBvcDsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgUmVzb2x2ZU9wZXJhdGlvbnMgOiBWZWN0
b3I8UmVzb2x2ZU9wZXJhdGlvbj4gewotICAgIFJlc29sdmVPcGVyYXRpb25zKCkgOiBtX3JlYWR5
KGZhbHNlKSB7IH0KLSAgICAKLSAgICBib29sIG1fcmVhZHk7Ci19OwotCi1zdHJ1Y3QgUHV0VG9C
YXNlT3BlcmF0aW9uIHsKLSAgICBQdXRUb0Jhc2VPcGVyYXRpb24oYm9vbCBpc1N0cmljdCkKLSAg
ICAgICAgOiBtX2tpbmQoVW5pbml0aWFsaXNlZCkKLSAgICAgICAgLCBtX2lzRHluYW1pYyhmYWxz
ZSkKLSAgICAgICAgLCBtX2lzU3RyaWN0KGlzU3RyaWN0KQotICAgICAgICAsIG1fcHJlZGljYXRl
UG9pbnRlcigwKQotICAgICAgICAsIG1fcmVhZHkoZmFsc2UpCi0gICAgewotCi0gICAgfQotICAg
IGVudW0gS2luZCB7IFVuaW5pdGlhbGlzZWQsIEdlbmVyaWMsIFJlYWRvbmx5LCBHbG9iYWxWYXJp
YWJsZVB1dCwgR2xvYmFsVmFyaWFibGVQdXRDaGVja2VkLCBHbG9iYWxQcm9wZXJ0eVB1dCwgVmFy
aWFibGVQdXQgfTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIEtpbmQgbV9raW5kIDogODsKLSAgICAg
ICAgdWludDhfdCBtX2tpbmRBc1VpbnQ4OwotICAgIH07Ci0gICAgYm9vbCBtX2lzRHluYW1pYyA6
IDg7Ci0gICAgYm9vbCBtX2lzU3RyaWN0IDogODsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGJvb2wq
IG1fcHJlZGljYXRlUG9pbnRlcjsKLSAgICAgICAgdW5zaWduZWQgbV9zY29wZURlcHRoOwotICAg
IH07Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7Ci0gICAgdW5pb24g
ewotICAgICAgICAvLyBVc2VkIGZvciBHbG9iYWxWYXJpYWJsZVB1dAotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIG1fcmVnaXN0ZXJBZGRyZXNzOwotCi0gICAgICAgIC8vIFVzZWQgZm9y
IEdsb2JhbFByb3BlcnR5UHV0IGFuZCBWYXJpYWJsZVB1dAotICAgICAgICBzdHJ1Y3QgewotICAg
ICAgICAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Ci0gICAgICAgICAgICBpbnQzMl90IG1f
b2Zmc2V0SW5CdXR0ZXJmbHk7Ci0gICAgICAgIH07Ci0gICAgfTsKLSAgICBib29sIG1fcmVhZHk7
Ci19OwotfQotCi0jZW5kaWYgLy8gUmVzb2x2ZU9wZXJhdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY29uc3QgQ2xh
c3NJbmZvIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jawogY29uc3QgQ2xhc3NJbmZvIFVubGlua2Vk
RXZhbENvZGVCbG9jazo6c19pbmZvID0geyAiVW5saW5rZWRFdmFsQ29kZUJsb2NrIiwgJkJhc2U6
OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShVbmxpbmtlZEV2YWxDb2RlQmxvY2sp
IH07CiBjb25zdCBDbGFzc0luZm8gVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZvID0g
eyAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykgfTsKIAotc3RhdGljIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGdlbmVyYXRlRnVuY3Rpb25Db2RlQmxvY2soVk0mIHZt
LCBKU1Njb3BlKiBzY29wZSwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBE
ZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJz
ZXJFcnJvciYgZXJyb3IpCitzdGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJh
dGVGdW5jdGlvbkNvZGVCbG9jayhWTSYgdm0sIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVy
TW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yKQogewogICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2Rl
PiBib2R5ID0gcGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oJnZtLCBzb3VyY2UsIGV4ZWN1dGFibGUt
PnBhcmFtZXRlcnMoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBleGVjdXRhYmxlLT5pc0luU3RyaWN0
Q29udGV4dCgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEpTUGFyc2VGdW5jdGlv
bkNvZGUsIGVycm9yKTsKIApAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgVW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9jayogZ2VuZXJhCiAgICAgZXhlY3V0YWJsZS0+cmVjb3JkUGFyc2UoYm9keS0+ZmVh
dHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJv
ZHktPmxhc3RMaW5lKCkpOwogICAgIAogICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHJl
c3VsdCA9IFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSgmdm0sIEZ1bmN0aW9uQ29k
ZSwgRXhlY3V0YWJsZUluZm8oYm9keS0+bmVlZHNBY3RpdmF0aW9uKCksIGJvZHktPnVzZXNFdmFs
KCksIGJvZHktPmlzU3RyaWN0TW9kZSgpLCBraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpKTsKLSAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3Iodm0sIHNjb3BlLCBib2R5LmdldCgpLCByZXN1bHQsIGRlYnVnZ2VyTW9kZSwg
cHJvZmlsZXJNb2RlKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9y
KGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcih2bSwgYm9keS5nZXQoKSwgcmVzdWx0LCBk
ZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSkpKTsKICAgICBlcnJvciA9IGdlbmVyYXRvci0+Z2Vu
ZXJhdGUoKTsKICAgICBib2R5LT5kZXN0cm95RGF0YSgpOwogICAgIGlmIChlcnJvci5tX3R5cGUg
IT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkKQEAgLTEzOSw3ICsxMzksNyBAQCBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogVW5saW5rZWRGdW5jCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9
CiAKLVVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb2RlQmxvY2tGb3IoVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgRGVidWdn
ZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJy
b3ImIGVycm9yKQorVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvZGVCbG9ja0ZvcihWTSYgdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJv
cikKIHsKICAgICBzd2l0Y2ggKHNwZWNpYWxpemF0aW9uS2luZCkgewogICAgIGNhc2UgQ29kZUZv
ckNhbGw6CkBAIC0xNTIsNyArMTUyLDcgQEAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogVW5s
aW5rZWRGdW5jdAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKiByZXN1bHQgPSBnZW5lcmF0ZUZ1bmN0aW9uQ29kZUJsb2NrKHZtLCBzY29wZSwg
dGhpcywgc291cmNlLCBzcGVjaWFsaXphdGlvbktpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJN
b2RlLCBlcnJvcik7CisgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gZ2Vu
ZXJhdGVGdW5jdGlvbkNvZGVCbG9jayh2bSwgdGhpcywgc291cmNlLCBzcGVjaWFsaXphdGlvbktp
bmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiAgICAgCiAgICAgaWYgKGVy
cm9yLm1fdHlwZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTIwMCw4ICsyMDAsNiBAQCBVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2so
Vk0qCiAgICAgLCBtX2xpbmVDb3VudCgwKQogICAgICwgbV9mZWF0dXJlcygwKQogICAgICwgbV9j
b2RlVHlwZShjb2RlVHlwZSkKLSAgICAsIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50KDApCi0gICAg
LCBtX3B1dFRvQmFzZU9wZXJhdGlvbkNvdW50KDEpCiAgICAgLCBtX2FycmF5UHJvZmlsZUNvdW50
KDApCiAgICAgLCBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVDb3VudCgwKQogICAgICwgbV9vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZUNvdW50KDApCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTUxMzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgcGFy
YW1TdHJpbmcoKSBjb25zdDsKIAotICAgIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVC
bG9ja0ZvcihWTSYsIEpTU2NvcGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7CisgICAg
VW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrRm9yKFZNJiwgY29uc3QgU291cmNl
Q29kZSYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
LCBQYXJzZXJFcnJvciYpOwogCiAgICAgc3RhdGljIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVudGlmaWVyJiwgRXhlY1N0YXRlKiwgRGVidWdnZXIq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqKiBleGNlcHRpb24pOwogCkBAIC0zOTgsMTEg
KzM5OCw2IEBAIHB1YmxpYzoKIAogICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0K
IAotICAgIHVuc2lnbmVkIGFkZFJlc29sdmUoKSB7IHJldHVybiBtX3Jlc29sdmVPcGVyYXRpb25D
b3VudCsrOyB9Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZSZXNvbHZlT3BlcmF0aW9ucygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50OyB9Ci0gICAgdW5zaWduZWQgYWRkUHV0
VG9CYXNlKCkgeyByZXR1cm4gbV9wdXRUb0Jhc2VPcGVyYXRpb25Db3VudCsrOyB9Ci0gICAgdW5z
aWduZWQgbnVtYmVyT2ZQdXRUb0Jhc2VPcGVyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wdXRU
b0Jhc2VPcGVyYXRpb25Db3VudDsgfQotCiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYWRkQXJy
YXlQcm9maWxlKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudCsrOyB9CiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZBcnJheVByb2ZpbGVzKCkgeyByZXR1cm4gbV9hcnJheVByb2ZpbGVDb3VudDsg
fQogICAgIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSBhZGRBcnJheUFsbG9jYXRpb25Q
cm9maWxlKCkgeyByZXR1cm4gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxlQ291bnQrKzsgfQpAQCAt
NTMzLDggKzUyOCw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZWNvZGVDb21tZW50SXRl
cmF0b3I7CiAjZW5kaWYKIAotICAgIHVuc2lnbmVkIG1fcmVzb2x2ZU9wZXJhdGlvbkNvdW50Owot
ICAgIHVuc2lnbmVkIG1fcHV0VG9CYXNlT3BlcmF0aW9uQ291bnQ7CiAgICAgdW5zaWduZWQgbV9h
cnJheVByb2ZpbGVDb3VudDsKICAgICB1bnNpZ25lZCBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVD
b3VudDsKICAgICB1bnNpZ25lZCBtX29iamVjdEFsbG9jYXRpb25Qcm9maWxlQ291bnQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9u
IDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgZW51bSBJbml0aWFsV2F0Y2hwb2ludFNl
dE1vZGUgeyBJbml0aWFsaQogY2xhc3MgSW5saW5lV2F0Y2hwb2ludFNldDsKIAogY2xhc3MgV2F0
Y2hwb2ludFNldCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXYXRjaHBvaW50U2V0PiB7
CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKICAgICBX
YXRjaHBvaW50U2V0KEluaXRpYWxXYXRjaHBvaW50U2V0TW9kZSk7CiAgICAgfldhdGNocG9pbnRT
ZXQoKTsKQEAgLTg4LDYgKzg5LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBib29sKiBh
ZGRyZXNzT2ZJc1dhdGNoZWQoKSB7IHJldHVybiAmbV9pc1dhdGNoZWQ7IH0KKyAgICBib29sKiBh
ZGRyZXNzT2ZJc0ludmFsaWRhdGVkKCkgeyByZXR1cm4gJm1faXNJbnZhbGlkYXRlZDsgfQogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5V3JpdGVTbG93KCk7IC8vIENhbGwg
b25seSBpZiB5b3UndmUgY2hlY2tlZCBpc1dhdGNoZWQuCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgog
Ci0jaW5jbHVkZSAiQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKQEAgLTU2LDI3ICs1NSw2IEBAIHZvaWQgTGFiZWw6OnNldExvY2F0aW9uKHVuc2lnbmVk
IGxvY2F0aW8KICAgICAgICAgbV9nZW5lcmF0b3ItPm1faW5zdHJ1Y3Rpb25zW21fdW5yZXNvbHZl
ZEp1bXBzW2ldLnNlY29uZF0udS5vcGVyYW5kID0gbV9sb2NhdGlvbiAtIG1fdW5yZXNvbHZlZEp1
bXBzW2ldLmZpcnN0OwogfQogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBSZXNvbHZlUmVzdWx0Ojpj
aGVja1ZhbGlkaXR5KCkKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgUmVnaXN0
ZXI6Ci0gICAgY2FzZSBSZWFkT25seVJlZ2lzdGVyOgotICAgICAgICBBU1NFUlQobV9sb2NhbCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgIEFTU0VSVCghbV9s
b2NhbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIExleGljYWw6Ci0gICAgY2FzZSBSZWFk
T25seUxleGljYWw6Ci0gICAgICAgIEFTU0VSVCghbV9sb2NhbCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH0KLX0KLSNlbmRpZgotCiBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUo
KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJCeXRlY29kZSBHZW5lcmF0
aW9uIik7CkBAIC0xNTcsNyArMTM1LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlc2Vy
dmVMYXN0VmFyKAogICAgICAgICBtX2xhc3RWYXIgPSAmbV9jYWxsZWVSZWdpc3RlcnMubGFzdCgp
OwogfQogCi1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBKU1Nj
b3BlKiwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sq
IGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2Zp
bGVyTW9kZSkKK0J5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIFBy
b2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUp
CiAgICAgOiBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKGRlYnVnZ2VyTW9kZSA9PSBEZWJ1Z2dlck9u
KQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKHByb2ZpbGVyTW9kZSA9PSBQcm9maWxl
ck9uKQogICAgICwgbV9zeW1ib2xUYWJsZSgwKQpAQCAtMTY3LDcgKzE0NSw3IEBAIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lz
dGVyKDApCiAgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lzdGVyKDApCiAgICAgLCBtX2ZpbmFsbHlE
ZXB0aCgwKQotICAgICwgbV9keW5hbWljU2NvcGVEZXB0aCgwKQorICAgICwgbV9sb2NhbFNjb3Bl
RGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoR2xvYmFsQ29kZSkKICAgICAsIG1fbmV4dENvbnN0
YW50T2Zmc2V0KDApCiAgICAgLCBtX2dsb2JhbENvbnN0YW50SW5kZXgoMCkKQEAgLTIwNSwxOCAr
MTgzLDE3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKIAogfQog
Ci1CeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBKU1Njb3BlKiBz
Y29wZSwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb25Cb2R5LCBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9k
ZSBwcm9maWxlck1vZGUpCitCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
IHZtLCBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIFVubGlua2VkRnVuY3Rpb25Db2Rl
QmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
IHByb2ZpbGVyTW9kZSkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVnSG9va3MoZGVidWdnZXJNb2Rl
ID09IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MocHJvZmlsZXJN
b2RlID09IFByb2ZpbGVyT24pCiAgICAgLCBtX3N5bWJvbFRhYmxlKGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKSkKICAgICAsIG1fc2NvcGVOb2RlKGZ1bmN0aW9uQm9keSkKLSAgICAsIG1fc2NvcGUo
dm0sIHNjb3BlKQogICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9jaykKICAgICAsIG1fYWN0
aXZhdGlvblJlZ2lzdGVyKDApCiAgICAgLCBtX2VtcHR5VmFsdWVSZWdpc3RlcigwKQogICAgICwg
bV9nbG9iYWxPYmplY3RSZWdpc3RlcigwKQogICAgICwgbV9maW5hbGx5RGVwdGgoMCkKLSAgICAs
IG1fZHluYW1pY1Njb3BlRGVwdGgoMCkKKyAgICAsIG1fbG9jYWxTY29wZURlcHRoKDApCiAgICAg
LCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKICAgICAsIG1fbmV4dENvbnN0YW50T2Zmc2V0KDAp
CiAgICAgLCBtX2dsb2JhbENvbnN0YW50SW5kZXgoMCkKQEAgLTQwMiwxOCArMzc5LDE3IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICB9CiB9CiAKLUJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEpTU2NvcGUqIHNjb3BlLCBF
dmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBEZWJ1
Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlKQorQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgRXZhbE5vZGUqIGV2YWxOb2Rl
LCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaywgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSkKICAgICA6IG1fc2hvdWxkRW1pdERlYnVn
SG9va3MoZGVidWdnZXJNb2RlID09IERlYnVnZ2VyT24pCiAgICAgLCBtX3Nob3VsZEVtaXRQcm9m
aWxlSG9va3MocHJvZmlsZXJNb2RlID09IFByb2ZpbGVyT24pCiAgICAgLCBtX3N5bWJvbFRhYmxl
KGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkKICAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQot
ICAgICwgbV9zY29wZSh2bSwgc2NvcGUpCiAgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJsb2Nr
KQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkK
ICAgICAsIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyKDApCiAgICAgLCBtX2dsb2JhbE9iamVjdFJlZ2lz
dGVyKDApCiAgICAgLCBtX2ZpbmFsbHlEZXB0aCgwKQotICAgICwgbV9keW5hbWljU2NvcGVEZXB0
aCgwKQorICAgICwgbV9sb2NhbFNjb3BlRGVwdGgoMCkKICAgICAsIG1fY29kZVR5cGUoRXZhbENv
ZGUpCiAgICAgLCBtX25leHRDb25zdGFudE9mZnNldCgwKQogICAgICwgbV9nbG9iYWxDb25zdGFu
dEluZGV4KDApCkBAIC00NzAsMTMgKzQ0Niw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjpyZXNvbHZlQ2EKICAgICBtX2NhbGxlZVJlZ2lzdGVyLnNldEluZGV4KEpTU3RhY2s6OkNh
bGxlZSk7CiAKICAgICAvLyBJZiBub24tc3RyaWN0IGV2YWwgaXMgaW4gcGxheSwgd2UgdXNlIGEg
c2VwYXJhdGUgb2JqZWN0IGluIHRoZSBzY29wZSBjaGFpbiBmb3IgdGhlIGNhbGxlZSdzIG5hbWUu
Ci0gICAgaWYgKChtX2NvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhbV9jb2RlQmxvY2stPmlzU3Ry
aWN0TW9kZSgpKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7Ci0gICAgICAgIGVtaXRPcGNv
ZGUob3BfcHVzaF9uYW1lX3Njb3BlKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFk
ZENvbnN0YW50KGZ1bmN0aW9uQm9keU5vZGUtPmlkZW50KCkpKTsKLSAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKG1fY2FsbGVlUmVnaXN0ZXIuaW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9CisgICAgaWYgKChtX2NvZGVCbG9jay0+dXNlc0V2YWwoKSAmJiAhbV9jb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKQorICAgICAgICBlbWl0
UHVzaE5hbWVTY29wZShmdW5jdGlvbkJvZHlOb2RlLT5pZGVudCgpLCAmbV9jYWxsZWVSZWdpc3Rl
ciwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKIAogICAgIGlmICghZnVuY3Rpb25Cb2R5Tm9kZS0+
Y2FwdHVyZXMoZnVuY3Rpb25Cb2R5Tm9kZS0+aWRlbnQoKSkpCiAgICAgICAgIHJldHVybiAmbV9j
YWxsZWVSZWdpc3RlcjsKQEAgLTExNjAsNzYgKzExMzEsMzYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMb2FkRwogICAgIHJldHVybiBtX2dsb2JhbE9iamVjdFJlZ2lzdGVy
OwogfQogCi1SZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5KQorTG9jYWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmxvY2FsKGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5KQogewogICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5h
bWVzKCkudGhpc0lkZW50aWZpZXIpCi0gICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdp
c3RlclJlc29sdmUodGhpc1JlZ2lzdGVyKCksIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZyk7
CisgICAgICAgIHJldHVybiBMb2NhbCh0aGlzUmVnaXN0ZXIoKSwgUmVhZE9ubHkpOwogCi0gICAg
Ly8gQ2hlY2sgaWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBhbGxvY2F0ZWQgaW4gYSByZWdpc3Rl
ci4KLSAgICBpZiAobV9jb2RlVHlwZSAhPSBHbG9iYWxDb2RlICYmIHNob3VsZE9wdGltaXplTG9j
YWxzKCkgJiYgbV9zeW1ib2xUYWJsZSkgewotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKLSAgICAgICAgaWYgKCFlbnRy
eS5pc051bGwoKSkgewotICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMo
KS5hcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgY3JlYXRlQXJndW1lbnRzSWZOZWNlc3Nhcnko
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGZsYWdzID0gZW50cnkuaXNSZWFkT25seSgpID8gUmVz
b2x2ZVJlc3VsdDo6UmVhZE9ubHlGbGFnIDogMDsKLSAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxv
Y2FsID0gY3JlYXRlTGF6eVJlZ2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lzdGVyRm9yKGVudHJ5Lmdl
dEluZGV4KCkpKTsKLSAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclJl
c29sdmUobG9jYWwsIGZsYWdzKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBDYXNlcyB3aGVy
ZSB3ZSBjYW5ub3Qgc3RhdGljYWxseSBvcHRpbWl6ZSB0aGUgbG9va3VwLgotICAgIGlmIChwcm9w
ZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzIHx8ICFjYW5PcHRpbWl6ZU5vbkxvY2Fs
cygpKQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoKTsKLQot
ICAgIGlmICghbV9zY29wZSB8fCBtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSB8fCBtX3Nob3Vs
ZEVtaXREZWJ1Z0hvb2tzKQotICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jl
c29sdmUoKTsKLQotICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gbV9zY29wZS0+YmVnaW4o
KTsKLSAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gbV9zY29wZS0+ZW5kKCk7Ci0gICAgc2l6
ZV90IGRlcHRoID0gbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICB1bnNp
Z25lZCBmbGFncyA9IDA7Ci0gICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsrZGVwdGgp
IHsKLSAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRTY29wZSA9IGl0ZXIuZ2V0KCk7Ci0gICAgICAg
IGlmICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1
cm4gUmVzb2x2ZVJlc3VsdDo6ZHluYW1pY1Jlc29sdmUoKTsKLQotICAgICAgICBKU1N5bWJvbFRh
YmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9i
amVjdCo+KGN1cnJlbnRTY29wZSk7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBj
dXJyZW50VmFyaWFibGVPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChwcm9wZXJ0eS5pbXBsKCkp
OwotCi0gICAgICAgIC8vIEZvdW5kIHRoZSBwcm9wZXJ0eQotICAgICAgICBpZiAoIWVudHJ5Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKQotICAgICAgICAg
ICAgICAgIGZsYWdzIHw9IFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5RmxhZzsKLSAgICAgICAgICAg
IGlmICgrK2l0ZXIgPT0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBSZXNvbHZlUmVzdWx0
OjpkeW5hbWljUmVzb2x2ZSgpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgICAgIGlm
IChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlvbio+
KGN1cnJlbnRWYXJpYWJsZU9iamVjdCkpCi0gICAgICAgICAgICAgICAgQVNTRVJUKGFjdGl2YXRp
b24tPmlzVmFsaWQoZW50cnkpKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVS
ZXN1bHQ6OmxleGljYWxSZXNvbHZlKGVudHJ5LmdldEluZGV4KCksIGRlcHRoLCBmbGFncyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgYm9vbCBzY29wZVJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNl
OwotICAgICAgICBpZiAoY3VycmVudFZhcmlhYmxlT2JqZWN0LT5pc0R5bmFtaWNTY29wZShzY29w
ZVJlcXVpcmVzRHluYW1pY0NoZWNrcykpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYg
KHNjb3BlUmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2
ZVJlc3VsdDo6RHluYW1pY0ZsYWc7Ci0gICAgfQorICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0
eU5hbWVzKCkuYXJndW1lbnRzKQorICAgICAgICBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgp
OwogCi0gICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5bmFtaWNSZXNvbHZlKCk7CisgICAgaWYg
KCFzaG91bGRPcHRpbWl6ZUxvY2FscygpKQorICAgICAgICByZXR1cm4gTG9jYWwoKTsKKworICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBs
KCkpOworICAgIGlmIChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIExvY2FsKCk7CisK
KyAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KCZy
ZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7CisgICAgcmV0dXJuIExvY2FsKGxvY2FsLCBl
bnRyeS5nZXRBdHRyaWJ1dGVzKCkpOwogfQogCi1SZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJh
dG9yOjpyZXNvbHZlQ29uc3REZWNsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQorTG9jYWwg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkp
CiB7Ci0gICAgLy8gUmVnaXN0ZXItYWxsb2NhdGVkIGNvbnN0IGRlY2xhcmF0aW9ucy4KLSAgICBp
ZiAobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9zeW1ib2xUYWJsZSkgewotICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1w
bCgpKTsKLSAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgZmxhZ3MgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUZs
YWcgOiAwOwotICAgICAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0
ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgICAgICAg
ICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUmVzb2x2ZShsb2NhbCwgZmxhZ3MpOwot
ICAgICAgICB9Ci0gICAgfQorICAgIGlmIChtX2NvZGVUeXBlICE9IEZ1bmN0aW9uQ29kZSkKKyAg
ICAgICAgcmV0dXJuIExvY2FsKCk7CisKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3lt
Ym9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiBMb2NhbCgpOwogCi0gICAgcmV0dXJuIFJlc29sdmVSZXN1bHQ6OmR5
bmFtaWNSZXNvbHZlKCk7CisgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0
ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOworICAgIHJldHVy
biBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKIH0KIAogdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENoZWNrSGFzSW5zdGFuY2UoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZSwgTGFiZWwqIHRhcmdldCkKQEAgLTEyNDIsMTIz
ICsxMTczLDY4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVja0hhc0luc3QKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMo
KS5zaXplKCkpKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbnN0
YW5jZU9mKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJh
c2VQcm90b3R5cGUpCi17IAotICAgIGVtaXRPcGNvZGUob3BfaW5zdGFuY2VvZik7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHZhbHVlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZVByb3Rv
dHlwZS0+aW5kZXgoKSk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6c2hvdWxkQXZvaWRSZXNvbHZlR2xvYmFsKCkKKy8vIEluZGljYXRlcyB0aGUgbGVhc3Qg
dXBwZXIgYm91bmQgb2YgcmVzb2x2ZSB0eXBlIGJhc2VkIG9uIGxvY2FsIHNjb3BlLiBUaGUgYnl0
ZWNvZGUgbGlua2VyCisvLyB3aWxsIHN0YXJ0IHdpdGggdGhpcyBSZXNvbHZlVHlwZSBhbmQgY29t
cHV0ZSB0aGUgbGVhc3QgdXBwZXIgYm91bmQgaW5jbHVkaW5nIGludGVyY2VwdGluZyBzY29wZXMu
CitSZXNvbHZlVHlwZSBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZVR5cGUoKQogewotICAgIHJl
dHVybiAhbV9sYWJlbFNjb3Blcy5zaXplKCk7CisgICAgaWYgKG1fbG9jYWxTY29wZURlcHRoKQor
ICAgICAgICByZXR1cm4gRHluYW1pYzsKKyAgICBpZiAobV9zeW1ib2xUYWJsZSAmJiBtX3N5bWJv
bFRhYmxlLT51c2VzTm9uU3RyaWN0RXZhbCgpKQorICAgICAgICByZXR1cm4gR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOworICAgIHJldHVybiBHbG9iYWxQcm9wZXJ0eTsKIH0K
IAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHkpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVT
Y29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Cisg
ICAgQVNTRVJUKCFtX3N5bWJvbFRhYmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlucyhpZGVu
dGlmaWVyLmltcGwoKSkgfHwgcmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWljKTsKIAotICAgIGlmIChy
ZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkpCi0gICAgICAgIHJldHVybiBlbWl0R2V0U3RhdGljVmFy
KGRzdCwgcmVzb2x2ZVJlc3VsdCwgcHJvcGVydHkpOwotCi0gICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9yZXNvbHZlKTsKKyAgICAvLyByZXNv
bHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aAorICAgIGVtaXRPcGNvZGUob3Bf
cmVzb2x2ZV9zY29wZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0g
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7Ci0gICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGdldFJlc29sdmVPcGVyYXRpb25zKHByb3BlcnR5KSk7Ci0gICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJl
c29sdmVUeXBlKCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICByZXR1cm4g
ZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVCYXNl
KFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHkpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNjb3BlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZXNvbHZlTW9kZSByZXNvbHZlTW9kZSkKIHsKLSAg
ICBpZiAoIXJlc29sdmVSZXN1bHQuaXNEeW5hbWljKCkpIHsKLSAgICAgICAgLy8gR2xvYmFsIG9i
amVjdCBpcyB0aGUgYmFzZQotICAgICAgICByZXR1cm4gZW1pdExvYWRHbG9iYWxPYmplY3QoZHN0
KTsKLSAgICB9CisgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24o
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAotICAgIC8vIFdlIGNhbid0IG9wdGltaXNlIGF0IGFs
bCA6LSgKLSAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bj
b2RlKG9wX3Jlc29sdmVfYmFzZSk7CisgICAgLy8gZ2V0X2Zyb21fc2NvcGUgZHN0LCBzY29wZSwg
aWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCisgICAgVW5saW5rZWRW
YWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9zY29w
ZSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGZhbHNlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2V0UmVzb2x2ZUJhc2VP
cGVyYXRpb25zKHByb3BlcnR5KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5p
bmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmll
cikpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2
ZU1vZGUsIHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQocHJvZmlsZSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgTm9ubG9jYWxS
ZXNvbHZlSW5mbyYgdmVyaWZpZXIpCi17Ci0gICAgLy8gV2UgY2FuJ3Qgb3B0aW1pc2UgYXQgYWxs
IDotKAotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfcmVzb2x2ZV9iYXNlKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3Qp
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQocHJvcGVydHkpKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKLSAg
ICB1aW50MzJfdCBwdXRUb0Jhc2VJbmRleCA9IDA7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGdldFJlc29sdmVCYXNlRm9yUHV0T3BlcmF0aW9ucyhwcm9wZXJ0eSwgcHV0VG9CYXNlSW5kZXgp
KTsKLSAgICB2ZXJpZmllci5yZXNvbHZlZChwdXRUb0Jhc2VJbmRleCk7Ci0gICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHB1dFRvQmFzZUluZGV4KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoUmVnaXN0ZXJJRCogYmFzZURzdCwgUmVn
aXN0ZXJJRCogcHJvcERzdCwgY29uc3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHksIE5vbmxvY2FsUmVzb2x2ZUluZm8mIHZlcmlmaWVyKQor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUb1Njb3BlKFJlZ2lzdGVySUQq
IHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlUmVz
dWx0LCAhcmVzb2x2ZVJlc3VsdC5pc1N0YXRpYygpKTsKLSAgICBVbmxpbmtlZFZhbHVlUHJvZmls
ZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX3Jlc29sdmVfd2l0aF9iYXNlKTsKLSAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChiYXNlRHN0KSk7Ci0gICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb3BEc3QtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChh
ZGRDb25zdGFudChwcm9wZXJ0eSkpOwotICAgIHVpbnQzMl90IHB1dFRvQmFzZUluZGV4ID0gMDsK
LSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZ2V0UmVzb2x2ZVdpdGhCYXNlRm9yUHV0T3BlcmF0
aW9ucyhwcm9wZXJ0eSwgcHV0VG9CYXNlSW5kZXgpKTsKLSAgICB2ZXJpZmllci5yZXNvbHZlZChw
dXRUb0Jhc2VJbmRleCk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHB1dFRvQmFzZUluZGV4
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgcmV0dXJuIGJhc2VE
c3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVdpdGhU
aGlzKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IFJlc29s
dmVSZXN1bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQotewot
ICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkpIHsKLSAgICAgICAgZW1pdExvYWQoYmFz
ZURzdCwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIGVtaXRHZXRTdGF0aWNWYXIocHJvcERzdCwg
cmVzb2x2ZVJlc3VsdCwgcHJvcGVydHkpOwotICAgICAgICByZXR1cm4gYmFzZURzdDsKLSAgICB9
CisgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKIAotICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0
UHJvZmlsZWRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX3RoaXMpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChraWxsKGJhc2VEc3QpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcERz
dC0+aW5kZXgoKSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3Bl
cnR5KSk7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdldFJlc29sdmVXaXRoVGhpc09wZXJh
dGlvbnMocHJvcGVydHkpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0g
ICAgcmV0dXJuIGJhc2VEc3Q7CisgICAgLy8gcHV0X3RvX3Njb3BlIHNjb3BlLCBpZCwgdmFsdWUs
IFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kCisgICAgZW1pdE9wY29kZShv
cF9wdXRfdG9fc2NvcGUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgo
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsK
KyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2ZU1vZGUsIHJlc29sdmVUeXBl
KCkpLm9wZXJhbmQoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKFJlZ2lzdGVySUQqIGRzdCwgY29u
c3QgUmVzb2x2ZVJlc3VsdCYgcmVzb2x2ZVJlc3VsdCwgY29uc3QgSWRlbnRpZmllciYpCi17Ci0g
ICAgQVNTRVJUKG1fY29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKTsKLSAgICBzd2l0Y2ggKHJlc29s
dmVSZXN1bHQudHlwZSgpKSB7Ci0gICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpSZWdpc3RlcjoKLSAg
ICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5UmVnaXN0ZXI6Ci0gICAgICAgIGlmIChkc3Qg
PT0gaWdub3JlZFJlc3VsdCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBtb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzb2x2ZVJlc3VsdC5sb2NhbCgpKTsK
LQotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6TGV4aWNhbDoKLSAgICBjYXNlIFJlc29sdmVSZXN1
bHQ6OlJlYWRPbmx5TGV4aWNhbDogewotICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9m
aWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9zY29wZWRfdmFyKTsKLSAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChyZXNvbHZlUmVzdWx0LmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocmVzb2x2ZVJlc3VsdC5kZXB0aCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHByb2ZpbGUpOwotICAgICAgICByZXR1cm4gZHN0OwotICAgIH0KLQotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5zdGFuY2VPZihS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHZhbHVlLCBSZWdpc3RlcklEKiBiYXNlUHJvdG90
eXBlKQoreyAKKyAgICBlbWl0T3Bjb2RlKG9wX2luc3RhbmNlb2YpOworICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1
ZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGJhc2VQcm90b3R5cGUtPmlu
ZGV4KCkpOworICAgIHJldHVybiBkc3Q7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5pdEdsb2JhbENvbnN0KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFJl
Z2lzdGVySUQqIHZhbHVlKQpAQCAtMTM3MiwyOCArMTI0OCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0SW5pdEcKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0U3RhdGljVmFyKGNvbnN0IFJlc29sdmVSZXN1
bHQmIHJlc29sdmVSZXN1bHQsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSkK
LXsKLSAgICBBU1NFUlQobV9jb2RlVHlwZSA9PSBGdW5jdGlvbkNvZGUpOwotICAgIHN3aXRjaCAo
cmVzb2x2ZVJlc3VsdC50eXBlKCkpIHsKLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlZ2lzdGVy
OgotICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlSZWdpc3RlcjoKLSAgICAgICAgcmV0
dXJuIG1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQocmVzb2x2ZVJlc3VsdC5sb2NhbCgpLCB2YWx1
ZSk7Ci0KLSAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkxleGljYWw6Ci0gICAgY2FzZSBSZXNvbHZl
UmVzdWx0OjpSZWFkT25seUxleGljYWw6Ci0gICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X3Njb3Bl
ZF92YXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRl
eCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuZGVwdGgo
KSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeUlkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7CiAgICAgbV9jb2RlQmxv
Y2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsK
QEAgLTE0NDAsMTYgKzEyOTQsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFB1dEJ5CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1dFRvQmFzZShSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIE5vbmxvY2FsUmVzb2x2ZUluZm8mIHJlc29sdmVJ
bmZvKQotewotICAgIGVtaXRPcGNvZGUob3BfcHV0X3RvX2Jhc2UpOwotICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRk
Q29uc3RhbnQocHJvcGVydHkpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmlu
ZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlSW5mby5wdXQoKSk7Ci0g
ICAgcmV0dXJuIHZhbHVlOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dERpcmVjdFB1dEJ5SWQoUmVnaXN0ZXJJRCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewogICAgIHVuc2lnbmVkIHByb3BlcnR5SW5kZXggPSBh
ZGRDb25zdGFudChwcm9wZXJ0eSk7CkBAIC0yMDA2LDcgKzE4NTAsNyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hXCiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRl
eHQ7CiAgICAgY29udGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZhbHNlOwogICAgIG1fc2NvcGVDb250
ZXh0U3RhY2suYXBwZW5kKGNvbnRleHQpOwotICAgIG1fZHluYW1pY1Njb3BlRGVwdGgrKzsKKyAg
ICBtX2xvY2FsU2NvcGVEZXB0aCsrOwogCiAgICAgcmV0dXJuIGVtaXRVbmFyeU5vRHN0T3Aob3Bf
cHVzaF93aXRoX3Njb3BlLCBzY29wZSk7CiB9CkBAIC0yMDE5LDcgKzE4NjMsNyBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UG9wU2NvcGUoKQogICAgIGVtaXRPcGNvZGUob3BfcG9wX3Nj
b3BlKTsKIAogICAgIG1fc2NvcGVDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIG1fZHlu
YW1pY1Njb3BlRGVwdGgtLTsKKyAgICBtX2xvY2FsU2NvcGVEZXB0aC0tOwogfQogCiB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVidWdIb29rKERlYnVnSG9va0lEIGRlYnVnSG9va0lELCBp
bnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUsIGludCBjaGFyUG9zaXRpb24pCkBAIC0yMDUxLDcg
KzE4OTUsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRmluYWxseUNvbnRlCiAgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyeUNvbnRleHRTdGFjay5zaXplKCkpLAogICAg
ICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9sYWJlbFNjb3Blcy5zaXplKCkpLAogICAgICAg
ICBtX2ZpbmFsbHlEZXB0aCwKLSAgICAgICAgbV9keW5hbWljU2NvcGVEZXB0aAorICAgICAgICBt
X2xvY2FsU2NvcGVEZXB0aAogICAgIH07CiAgICAgc2NvcGUuZmluYWxseUNvbnRleHQgPSBjb250
ZXh0OwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2suYXBwZW5kKHNjb3BlKTsKQEAgLTIyMjAsOCAr
MjA2NCw4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb21wbGV4UG9wU2MKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGludCBzYXZlZEZpbmFsbHlEZXB0aCA9IG1fZmluYWxseURl
cHRoOwogICAgICAgICAgICAgbV9maW5hbGx5RGVwdGggPSBmaW5hbGx5Q29udGV4dC5maW5hbGx5
RGVwdGg7Ci0gICAgICAgICAgICBpbnQgc2F2ZWREeW5hbWljU2NvcGVEZXB0aCA9IG1fZHluYW1p
Y1Njb3BlRGVwdGg7Ci0gICAgICAgICAgICBtX2R5bmFtaWNTY29wZURlcHRoID0gZmluYWxseUNv
bnRleHQuZHluYW1pY1Njb3BlRGVwdGg7CisgICAgICAgICAgICBpbnQgc2F2ZWREeW5hbWljU2Nv
cGVEZXB0aCA9IG1fbG9jYWxTY29wZURlcHRoOworICAgICAgICAgICAgbV9sb2NhbFNjb3BlRGVw
dGggPSBmaW5hbGx5Q29udGV4dC5keW5hbWljU2NvcGVEZXB0aDsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gRW1pdCB0aGUgZmluYWxseSBibG9jay4KICAgICAgICAgICAgIGVtaXROb2Rl
KGZpbmFsbHlDb250ZXh0LmZpbmFsbHlCbG9jayk7CkBAIC0yMjUwLDcgKzIwOTQsNyBAQCB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29tcGxleFBvcFNjCiAgICAgICAgICAgICBpZiAoZmxp
cExhYmVsU2NvcGVzKQogICAgICAgICAgICAgICAgIG1fbGFiZWxTY29wZXMgPSBzYXZlZExhYmVs
U2NvcGVzOwogICAgICAgICAgICAgbV9maW5hbGx5RGVwdGggPSBzYXZlZEZpbmFsbHlEZXB0aDsK
LSAgICAgICAgICAgIG1fZHluYW1pY1Njb3BlRGVwdGggPSBzYXZlZER5bmFtaWNTY29wZURlcHRo
OworICAgICAgICAgICAgbV9sb2NhbFNjb3BlRGVwdGggPSBzYXZlZER5bmFtaWNTY29wZURlcHRo
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICAtLXRvcFNjb3BlOwogICAgICAgICB9CkBAIC0y
MzMzLDcgKzIxNzcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5QW5k
CiAgICAgbV90cnlDb250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgIAogICAgIGVtaXRMYWJl
bCh0cnlSYW5nZS50cnlEYXRhLT50YXJnZXQuZ2V0KCkpOwotICAgIHRyeVJhbmdlLnRyeURhdGEt
PnRhcmdldFNjb3BlRGVwdGggPSBtX2R5bmFtaWNTY29wZURlcHRoOworICAgIHRyeVJhbmdlLnRy
eURhdGEtPnRhcmdldFNjb3BlRGVwdGggPSBtX2xvY2FsU2NvcGVEZXB0aDsKIAogICAgIGVtaXRP
cGNvZGUob3BfY2F0Y2gpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXRSZWdpc3Rl
ci0+aW5kZXgoKSk7CkBAIC0yMzUyLDcgKzIxOTYsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHVzaE5hbWVTY29wCiAgICAgQ29udHJvbEZsb3dDb250ZXh0IGNvbnRleHQ7CiAgICAg
Y29udGV4dC5pc0ZpbmFsbHlCbG9jayA9IGZhbHNlOwogICAgIG1fc2NvcGVDb250ZXh0U3RhY2su
YXBwZW5kKGNvbnRleHQpOwotICAgIG1fZHluYW1pY1Njb3BlRGVwdGgrKzsKKyAgICBtX2xvY2Fs
U2NvcGVEZXB0aCsrOwogCiAgICAgZW1pdE9wY29kZShvcF9wdXNoX25hbWVfc2NvcGUpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwpAQCAtMjQ5MCw3
ICsyMzM0LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6c2V0SXNOdW1lcmljQ29tcAogCiBi
b29sIEJ5dGVjb2RlR2VuZXJhdG9yOjppc0FyZ3VtZW50TnVtYmVyKGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBpbnQgYXJndW1lbnROdW1iZXIpCiB7Ci0gICAgUmVnaXN0ZXJJRCogcmVnaXN0ZXJJ
RCA9IHJlc29sdmUoaWRlbnQpLmxvY2FsKCk7CisgICAgUmVnaXN0ZXJJRCogcmVnaXN0ZXJJRCA9
IGxvY2FsKGlkZW50KS5nZXQoKTsKICAgICBpZiAoIXJlZ2lzdGVySUQgfHwgcmVnaXN0ZXJJRC0+
aW5kZXgoKSA+PSAwKQogICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHJlZ2lzdGVySUQt
PmluZGV4KCkgPT0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudE51bWJlcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDcgKzUyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBJZGVudGlmaWVyOwogICAg
IGNsYXNzIExhYmVsOwotICAgIGNsYXNzIEpTU2NvcGU7CiAKICAgICBlbnVtIEV4cGVjdGVkRnVu
Y3Rpb24gewogICAgICAgICBOb0V4cGVjdGVkRnVuY3Rpb24sCkBAIC0xMTIsMTMwICsxMTEsMzUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFRyeURhdGEqIHRyeURhdGE7CiAgICAgfTsKIAot
ICAgIHN0cnVjdCBUcnlSYW5nZSB7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gc3RhcnQ7Ci0gICAg
ICAgIFJlZlB0cjxMYWJlbD4gZW5kOwotICAgICAgICBUcnlEYXRhKiB0cnlEYXRhOwotICAgIH07
Ci0KLSAgICBjbGFzcyBSZXNvbHZlUmVzdWx0IHsKKyAgICBjbGFzcyBMb2NhbCB7CiAgICAgcHVi
bGljOgotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBp
cyBsb2NhbGx5IGJvdW5kLCBpbiBhIHJlZ2lzdGVyLgotICAgICAgICAgICAgUmVnaXN0ZXJGbGFn
ID0gMHgxLAotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB0cmF2ZXJzZSB0aGUgc2NvcGUgY2hh
aW4gYXQgcnVudGltZSwgY2hlY2tpbmcgZm9yCi0gICAgICAgICAgICAvLyBub24tc3RyaWN0IGV2
YWwgYW5kL29yIGB3aXRoJyBub2Rlcy4KLSAgICAgICAgICAgIER5bmFtaWNGbGFnID0gMHgyLAot
ICAgICAgICAgICAgLy8gVGhlIHJlc29sdmVkIGJpbmRpbmcgaXMgaW1tdXRhYmxlLgotICAgICAg
ICAgICAgUmVhZE9ubHlGbGFnID0gMHg0LAotICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IGhh
cyBhIHN0YXRpYyBsb2NhdGlvbgotICAgICAgICAgICAgU3RhdGljRmxhZyA9IDB4OCwKLSAgICAg
ICAgICAgIC8vIEVudHJ5IGF0IHNjb3BlIGRpc3RhbmNlICJtX2RlcHRoIiBhbmQgbG9jYXRlZCBh
dCAibV9pbmRleCIKLSAgICAgICAgICAgIFNjb3BlZEZsYWcgPSAweDEwCi0gICAgICAgIH07Ci0K
LSAgICAgICAgZW51bSBUeXBlIHsKLSAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSBpcyBsb2Nh
bCwgYW5kIHN0b3JlZCBpbiBhIHJlZ2lzdGVyLgotICAgICAgICAgICAgUmVnaXN0ZXIgPSBSZWdp
c3RlckZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAgLy8gQSByZWFkLW9ubHkgbG9jYWws
IGNyZWF0ZWQgYnkgImNvbnN0Ii4KLSAgICAgICAgICAgIFJlYWRPbmx5UmVnaXN0ZXIgPSBSZWdp
c3RlckZsYWcgfCBSZWFkT25seUZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAgLy8gTGV4
aWNhbGx5IGZpeGVkIGxvY2F0aW9uIGluIHRoZSBzY29wZSBjaGFpbgotICAgICAgICAgICAgTGV4
aWNhbCA9IFNjb3BlZEZsYWcgfCBTdGF0aWNGbGFnLAotICAgICAgICAgICAgLy8gQSByZWFkLW9u
bHkgTGV4aWNhbCwgY3JlYXRlZCBieSAiY29uc3QiLgotICAgICAgICAgICAgUmVhZE9ubHlMZXhp
Y2FsID0gU2NvcGVkRmxhZyB8IFJlYWRPbmx5RmxhZyB8IFN0YXRpY0ZsYWcsCi0gICAgICAgICAg
ICAvLyBBbnkgb3RoZXIgZm9ybSBvZiBsb29rdXAKLSAgICAgICAgICAgIER5bmFtaWMgPSBEeW5h
bWljRmxhZywKLSAgICAgICAgfTsKLQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCByZWdp
c3RlclJlc29sdmUoUmVnaXN0ZXJJRCAqbG9jYWwsIHVuc2lnbmVkIGZsYWdzKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChSZWdpc3RlciB8IGZsYWdzLCBsb2Nh
bCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIFJlc29sdmVSZXN1bHQgZHluYW1pY1Jlc29s
dmUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzb2x2ZVJlc3VsdChEeW5hbWlj
LCAwKTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgUmVzb2x2ZVJlc3VsdCBsZXhpY2FsUmVz
b2x2ZShpbnQgaW5kZXgsIHNpemVfdCBkZXB0aCwgdW5zaWduZWQgZmxhZ3MpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChmbGFncyAmIER5bmFtaWNGbGFnKQotICAgICAgICAgICAgICAgIHJl
dHVybiBkeW5hbWljUmVzb2x2ZSgpOwotICAgICAgICAgICAgcmV0dXJuIFJlc29sdmVSZXN1bHQo
TGV4aWNhbCB8IGZsYWdzLCBpbmRleCwgZGVwdGgpOwotICAgICAgICB9Ci0gICAgICAgIHVuc2ln
bmVkIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgICAgICAvLyBSZXR1cm5z
IHRoZSByZWdpc3RlciBjb3JyZXNwb25kaW5nIHRvIGEgbG9jYWwgdmFyaWFibGUsIG9yIDAgaWYg
bm8KLSAgICAgICAgLy8gc3VjaCByZWdpc3RlciBleGlzdHMuIFJlZ2lzdGVycyByZXR1cm5lZCBi
eSBSZXNvbHZlUmVzdWx0Ojpsb2NhbCgpIGRvCi0gICAgICAgIC8vIG5vdCByZXF1aXJlIGV4cGxp
Y2l0IHJlZmVyZW5jZSBjb3VudGluZy4KLSAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwoKSBjb25z
dCB7IHJldHVybiBtX2xvY2FsOyB9Ci0KLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlICYgUmVnaXN0ZXJGbGFnOyB9Ci0gICAgICAgIGJvb2wgaXNTdGF0aWMo
KSBjb25zdCB7IHJldHVybiAobV90eXBlICYgU3RhdGljRmxhZykgJiYgIWlzRHluYW1pYygpOyB9
Ci0gICAgICAgIGJvb2wgaXNEeW5hbWljKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgRHluYW1p
Y0ZsYWc7IH0KLSAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gKG1fdHlw
ZSAmIFJlYWRPbmx5RmxhZykgJiYgIWlzRHluYW1pYygpOyB9Ci0KLSAgICAgICAgdW5zaWduZWQg
ZGVwdGgoKSBjb25zdCB7IEFTU0VSVChpc1N0YXRpYygpKTsgcmV0dXJuIG1fZGVwdGg7IH0KLSAg
ICAgICAgaW50MzJfdCBpbmRleCgpIGNvbnN0IHsgQVNTRVJUKGlzU3RhdGljKCkpOyByZXR1cm4g
bV9pbmRleDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVzb2x2ZVJlc3VsdCh1bnNpZ25l
ZCB0eXBlLCBSZWdpc3RlcklEKiBsb2NhbCkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0g
ICAgICAgICAgICAsIG1fbG9jYWwobG9jYWwpCi0gICAgICAgICAgICAsIG1faW5kZXgoMCkKLSAg
ICAgICAgICAgICwgbV9kZXB0aCgwKQorICAgICAgICBMb2NhbCgpCisgICAgICAgICAgICA6IG1f
bG9jYWwoMCkKKyAgICAgICAgICAgICwgbV9hdHRyaWJ1dGVzKDApCiAgICAgICAgIHsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgICAgICAgICBjaGVja1ZhbGlkaXR5KCk7Ci0jZW5kaWYKICAgICAgICAg
fQogCi0gICAgICAgIFJlc29sdmVSZXN1bHQodW5zaWduZWQgdHlwZSwgaW50IGluZGV4LCB1bnNp
Z25lZCBkZXB0aCkKLSAgICAgICAgICAgIDogbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1f
bG9jYWwoMCkKLSAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAgICAgICAgICwgbV9k
ZXB0aChkZXB0aCkKKyAgICAgICAgTG9jYWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCisgICAgICAgICAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgICAgICAgICAsIG1f
YXR0cmlidXRlcyhhdHRyaWJ1dGVzKQogICAgICAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICAgICAgY2hlY2tWYWxpZGl0eSgpOwotI2VuZGlmCiAgICAgICAgIH0KIAotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgdm9pZCBjaGVja1ZhbGlkaXR5KCk7Ci0jZW5kaWYKKyAgICAgICAgb3BlcmF0
b3IgYm9vbCgpIHsgcmV0dXJuIG1fbG9jYWw7IH0KIAotICAgICAgICB1bnNpZ25lZCBtX3R5cGU7
Ci0gICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7IC8vIExvY2FsIHJlZ2lzdGVyLCBpZiBSZWdp
c3RlckZsYWcgaXMgc2V0Ci0gICAgICAgIGludCBtX2luZGV4OwotICAgICAgICB1bnNpZ25lZCBt
X2RlcHRoOwotICAgIH07CisgICAgICAgIFJlZ2lzdGVySUQqIGdldCgpIHsgcmV0dXJuIG1fbG9j
YWw7IH0KKworICAgICAgICBib29sIGlzUmVhZE9ubHkoKSB7IHJldHVybiBtX2F0dHJpYnV0ZXMg
JiBSZWFkT25seTsgfQogCi0gICAgc3RydWN0IE5vbmxvY2FsUmVzb2x2ZUluZm8gewotICAgICAg
ICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVHZW5lcmF0b3I7Ci0gICAgICAgIE5vbmxvY2FsUmVzb2x2
ZUluZm8oKQotICAgICAgICAgICAgOiBtX3N0YXRlKFVudXNlZCkKLSAgICAgICAgewotICAgICAg
ICB9Ci0gICAgICAgIH5Ob25sb2NhbFJlc29sdmVJbmZvKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gUHV0KTsKLSAgICAgICAgfQogICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZvaWQgcmVzb2x2ZWQodWludDMyX3QgcHV0VG9CYXNlSW5kZXgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChwdXRUb0Jhc2VJbmRleCk7Ci0gICAgICAgICAgICBBU1NFUlQobV9z
dGF0ZSA9PSBVbnVzZWQpOwotICAgICAgICAgICAgbV9zdGF0ZSA9IFJlc29sdmVkOwotICAgICAg
ICAgICAgbV9wdXRUb0Jhc2VJbmRleCA9IHB1dFRvQmFzZUluZGV4OwotICAgICAgICB9Ci0gICAg
ICAgIHVpbnQzMl90IHB1dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3N0YXRl
ID09IFJlc29sdmVkKTsKLSAgICAgICAgICAgIG1fc3RhdGUgPSBQdXQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9wdXRUb0Jhc2VJbmRleDsKLSAgICAgICAgfQotICAgICAgICBlbnVtIFN0YXRlIHsg
VW51c2VkLCBSZXNvbHZlZCwgUHV0IH07Ci0gICAgICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgICAg
IHVpbnQzMl90IG1fcHV0VG9CYXNlSW5kZXg7CisgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7
CisgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKKyAgICB9OworCisgICAgc3RydWN0IFRy
eVJhbmdlIHsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBzdGFydDsKKyAgICAgICAgUmVmUHRyPExh
YmVsPiBlbmQ7CisgICAgICAgIFRyeURhdGEqIHRyeURhdGE7CiAgICAgfTsKIAogICAgIGNsYXNz
IEJ5dGVjb2RlR2VuZXJhdG9yIHsKQEAgLTI0NCw5ICsxNDgsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2sgVmFyU3RhY2s7CiAg
ICAgICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sgRnVuY3Rpb25T
dGFjazsKIAotICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihWTSYsIEpTU2NvcGUqLCBQcm9ncmFt
Tm9kZSosIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayosIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJN
b2RlKTsKLSAgICAgICAgQnl0ZWNvZGVHZW5lcmF0b3IoVk0mLCBKU1Njb3BlKiwgRnVuY3Rpb25C
b2R5Tm9kZSosIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqLCBEZWJ1Z2dlck1vZGUsIFByb2Zp
bGVyTW9kZSk7Ci0gICAgICAgIEJ5dGVjb2RlR2VuZXJhdG9yKFZNJiwgSlNTY29wZSosIEV2YWxO
b2RlKiwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUp
OworICAgICAgICBCeXRlY29kZUdlbmVyYXRvcihWTSYsIFByb2dyYW1Ob2RlKiwgVW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBC
eXRlY29kZUdlbmVyYXRvcihWTSYsIEZ1bmN0aW9uQm9keU5vZGUqLCBVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKiwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUpOworICAgICAgICBCeXRlY29k
ZUdlbmVyYXRvcihWTSYsIEV2YWxOb2RlKiwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiwgRGVidWdn
ZXJNb2RlLCBQcm9maWxlck1vZGUpOwogCiAgICAgICAgIH5CeXRlY29kZUdlbmVyYXRvcigpOwog
ICAgICAgICAKQEAgLTI2NCwxMSArMTY4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIFJl
Z2lzdGVySUQqIHVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRzKCk7CiAKLSAgICAgICAgLy8g
UmVzb2x2ZSBhbiBpZGVudGlmaWVyLCBnaXZlbiB0aGUgY3VycmVudCBjb21waWxlLXRpbWUgc2Nv
cGUgY2hhaW4uCi0gICAgICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZShjb25zdCBJZGVudGlmaWVy
Jik7Ci0gICAgICAgIC8vIEJlaGF2ZXMgYXMgcmVzb2x2ZSBkb2VzLCBidXQgaWdub3JlcyBkeW5h
bWljIHNjb3BlIGFzCi0gICAgICAgIC8vIGR5bmFtaWMgc2NvcGUgc2hvdWxkIG5vdCBpbnRlcmZl
cmUgd2l0aCBjb25zdCBpbml0aWFsaXNhdGlvbgotICAgICAgICBSZXNvbHZlUmVzdWx0IHJlc29s
dmVDb25zdERlY2woY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICBMb2NhbCBsb2NhbChjb25z
dCBJZGVudGlmaWVyJik7CisgICAgICAgIExvY2FsIGNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmll
ciYpOwogCiAgICAgICAgIC8vIFJldHVybnMgdGhlIHJlZ2lzdGVyIHN0b3JpbmcgInRoaXMiCiAg
ICAgICAgIFJlZ2lzdGVySUQqIHRoaXNSZWdpc3RlcigpIHsgcmV0dXJuICZtX3RoaXNSZWdpc3Rl
cjsgfQpAQCAtNDQzLDE4ICszNDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdFR5cGVPZihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1
cm4gZW1pdFVuYXJ5T3Aob3BfdHlwZW9mLCBkc3QsIHNyYyk7IH0KICAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdEluKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVy
SUQqIGJhc2UpIHsgcmV0dXJuIGVtaXRCaW5hcnlPcChvcF9pbiwgZHN0LCBwcm9wZXJ0eSwgYmFz
ZSwgT3BlcmFuZFR5cGVzKCkpOyB9CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0YXRp
Y1ZhcihSZWdpc3RlcklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlm
aWVyJik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRTdGF0aWNWYXIoY29uc3QgUmVzb2x2
ZVJlc3VsdCYsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSk7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRJbml0R2xvYmFsQ29uc3QoY29uc3QgSWRlbnRpZmllciYsIFJlZ2lz
dGVySUQqIHZhbHVlKTsKIAotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZShSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3Qs
IGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlQmFzZUZvclB1dChSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IFJlc29sdmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgTm9ubG9jYWxS
ZXNvbHZlSW5mbyYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVdpdGhCYXNlRm9y
UHV0KFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IFJlc29s
dmVSZXN1bHQmLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgTm9ubG9jYWxSZXNvbHZlSW5m
byYpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmVzb2x2ZVdpdGhUaGlzKFJlZ2lzdGVySUQq
IGJhc2VEc3QsIFJlZ2lzdGVySUQqIHByb3BEc3QsIGNvbnN0IFJlc29sdmVSZXN1bHQmLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRv
QmFzZShSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVnaXN0ZXJJRCogdmFs
dWUsIE5vbmxvY2FsUmVzb2x2ZUluZm8mKTsKLQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0
QnlJZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEFyZ3VtZW50c0xlbmd0aChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UHV0QnlJZChSZWdpc3RlcklEKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwg
UmVnaXN0ZXJJRCogdmFsdWUpOwpAQCAtNDgwLDYgKzM3MSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFN0cmNhdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIHNyYywgaW50IGNvdW50KTsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogCisgICAgICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlKCk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRSZXNvbHZlU2NvcGUoUmVnaXN0ZXJJ
RCogZHN0LCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRG
cm9tU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRp
ZmllciYsIFJlc29sdmVNb2RlKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFRvU2NvcGUo
UmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImLCBSZWdpc3RlcklEKiB2YWx1ZSwg
UmVzb2x2ZU1vZGUpOworCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJl
bCopOwogICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwogICAgICAgICBQYXNzUmVmUHRyPExh
YmVsPiBlbWl0SnVtcChMYWJlbCogdGFyZ2V0KTsKQEAgLTUxNCw3ICs0MTAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXREZWJ1Z0hvb2soRGVidWdIb29rSUQsIGludCBm
aXJzdExpbmUsIGludCBsYXN0TGluZSwgaW50IGNoYXJQb3NpdGlvbik7CiAKLSAgICAgICAgaW50
IHNjb3BlRGVwdGgoKSB7IHJldHVybiBtX2R5bmFtaWNTY29wZURlcHRoICsgbV9maW5hbGx5RGVw
dGg7IH0KKyAgICAgICAgaW50IHNjb3BlRGVwdGgoKSB7IHJldHVybiBtX2xvY2FsU2NvcGVEZXB0
aCArIG1fZmluYWxseURlcHRoOyB9CiAgICAgICAgIGJvb2wgaGFzRmluYWxpc2VyKCkgeyByZXR1
cm4gbV9maW5hbGx5RGVwdGggIT0gMDsgfQogCiAgICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250
ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9jayk7CkBAIC01NjgsMTIgKzQ2NCw2IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpTVmFsdWU+
IE51bWJlck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBKU1N0cmlu
ZyosIElkZW50aWZpZXJSZXBIYXNoPiBJZGVudGlmaWVyU3RyaW5nTWFwOwotICAgICAgICB0eXBl
ZGVmIHN0cnVjdCB7Ci0gICAgICAgICAgICBpbnQgcmVzb2x2ZU9wZXJhdGlvbnM7Ci0gICAgICAg
ICAgICBpbnQgcHV0T3BlcmF0aW9uczsKLSAgICAgICAgfSBSZXNvbHZlQ2FjaGVFbnRyeTsKLSAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBSZXNvbHZlQ2FjaGVFbnRyeSwgSWRl
bnRpZmllclJlcEhhc2g+IElkZW50aWZpZXJSZXNvbHZlUHV0TWFwOwotICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8U3RyaW5nSW1wbCosIHVpbnQzMl90LCBJZGVudGlmaWVyUmVwSGFzaD4gSWRlbnRp
ZmllclJlc29sdmVNYXA7CiAgICAgICAgIAogICAgICAgICAvLyBIZWxwZXIgZm9yIGVtaXRDYWxs
KCkgYW5kIGVtaXRDb25zdHJ1Y3QoKS4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBzZXQgb2YKICAg
ICAgICAgLy8gZXhwZWN0ZWQgZnVuY3Rpb25zIGhhdmUgaWRlbnRpY2FsIGJlaGF2aW9yIGZvciBi
b3RoIGNhbGwgYW5kIGNvbnN0cnVjdApAQCAtNjA4LDcgKzQ5OCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGFkZENhbGxlZShGdW5jdGlvbkJvZHlOb2RlKiwgUmVnaXN0ZXJJRCop
OwogCiAgICAgICAgIHZvaWQgcHJlc2VydmVMYXN0VmFyKCk7Ci0gICAgICAgIGJvb2wgc2hvdWxk
QXZvaWRSZXNvbHZlR2xvYmFsKCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCYgcmVnaXN0ZXJGb3Io
aW50IGluZGV4KQogICAgICAgICB7CkBAIC02NTAsMTAgKzUzOSwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCisgICAgICAgICAgICBpZiAobV9jb2Rl
VHlwZSAhPSBGdW5jdGlvbkNvZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICBpZiAobV9jb2RlVHlwZSAhPSBGdW5jdGlvbkNvZGUpCisgICAgICAgICAgICBp
ZiAobV9sb2NhbFNjb3BlRGVwdGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY2MSw3ICs1NTAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICBib29sIGNhbk9wdGltaXplTm9uTG9jYWxzKCkKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCisgICAgICAgICAgICBpZiAobV9sb2Nh
bFNjb3BlRGVwdGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICBpZiAobV9jb2RlVHlwZSA9PSBFdmFsQ29kZSkKQEAgLTY4Nyw3ICs1NzYsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CiAKICAg
ICAgICAgU2NvcGVOb2RlKiBtX3Njb3BlTm9kZTsKLSAgICAgICAgU3Ryb25nPEpTU2NvcGU+IG1f
c2NvcGU7CiAgICAgICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAK
ICAgICAgICAgLy8gU29tZSBvZiB0aGVzZSBvYmplY3RzIGtlZXAgcG9pbnRlcnMgdG8gb25lIGFu
b3RoZXIuIFRoZXkgYXJlIGFycmFuZ2VkCkBAIC03MDYsNyArNTk0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIExhYmVsU2NvcGVTdG9yZSBtX2xhYmVsU2NvcGVzOwogICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gbV9sYXN0VmFyOwogICAgICAgICBpbnQgbV9maW5hbGx5RGVwdGg7Ci0g
ICAgICAgIGludCBtX2R5bmFtaWNTY29wZURlcHRoOworICAgICAgICBpbnQgbV9sb2NhbFNjb3Bl
RGVwdGg7CiAgICAgICAgIENvZGVUeXBlIG1fY29kZVR5cGU7CiAKICAgICAgICAgVmVjdG9yPENv
bnRyb2xGbG93Q29udGV4dCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fc2NvcGVDb250ZXh0
U3RhY2s7CkBAIC03MzYsNzUgKzYyNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBOdW1i
ZXJNYXAgbV9udW1iZXJNYXA7CiAgICAgICAgIElkZW50aWZpZXJTdHJpbmdNYXAgbV9zdHJpbmdN
YXA7CiAKLSAgICAgICAgdWludDMyX3QgZ2V0UmVzb2x2ZU9wZXJhdGlvbnMoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX2R5bmFtaWNTY29w
ZURlcHRoKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkUmVzb2x2ZSgp
OwotICAgICAgICAgICAgSWRlbnRpZmllclJlc29sdmVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBt
X3Jlc29sdmVDYWNoZU1hcC5hZGQocHJvcGVydHkuaW1wbCgpLCAwKTsKLSAgICAgICAgICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gbV9jb2RlQmxvY2stPmFkZFJlc29sdmUoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdWludDMyX3QgZ2V0UmVz
b2x2ZVdpdGhUaGlzT3BlcmF0aW9ucyhjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrLT5hZGRSZXNvbHZlKCk7Ci0gICAgICAgICAgICBJZGVudGlm
aWVyUmVzb2x2ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fcmVzb2x2ZVdpdGhUaGlzQ2FjaGVN
YXAuYWRkKHByb3BlcnR5LmltcGwoKSwgMCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJs
b2NrLT5hZGRSZXNvbHZlKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQzMl90IGdldFJlc29sdmVCYXNlT3BlcmF0
aW9ucyhJZGVudGlmaWVyUmVzb2x2ZVB1dE1hcCYgbWFwLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSwgdWludDMyX3QmIHB1dFRvQmFzZU9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1fZHluYW1pY1Njb3BlRGVwdGgpIHsKLSAgICAgICAgICAgICAgICBwdXRUb0Jhc2VP
cGVyYXRpb24gPSBtX2NvZGVCbG9jay0+YWRkUHV0VG9CYXNlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5hZGRSZXNvbHZlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSZXNvbHZlQ2FjaGVFbnRyeSBlbnRyeSA9IHstMSwgLTF9OwotICAgICAgICAgICAgSWRl
bnRpZmllclJlc29sdmVQdXRNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAuYWRkKHByb3BlcnR5
LmltcGwoKSwgZW50cnkpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQotICAg
ICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUucmVzb2x2ZU9wZXJhdGlvbnMgPSBt
X2NvZGVCbG9jay0+YWRkUmVzb2x2ZSgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUucHV0T3BlcmF0aW9ucyA9PSAtMSkKLSAgICAgICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLnB1dE9wZXJhdGlvbnMgPSBnZXRQdXRUb0Jhc2VPcGVyYXRpb24ocHJvcGVy
dHkpOwotICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uID0gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5wdXRPcGVyYXRpb25zOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUucmVzb2x2ZU9wZXJhdGlvbnM7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50MzJfdCBn
ZXRSZXNvbHZlQmFzZU9wZXJhdGlvbnMoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHVpbnQzMl90IHNjcmF0Y2g7Ci0gICAgICAgICAgICByZXR1cm4g
Z2V0UmVzb2x2ZUJhc2VPcGVyYXRpb25zKG1fcmVzb2x2ZUJhc2VNYXAsIHByb3BlcnR5LCBzY3Jh
dGNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQzMl90IGdldFJlc29sdmVCYXNlRm9yUHV0
T3BlcmF0aW9ucyhjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgdWludDMyX3QmIHB1dFRvQmFz
ZU9wZXJhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdldFJlc29sdmVCYXNl
T3BlcmF0aW9ucyhtX3Jlc29sdmVCYXNlRm9yUHV0TWFwLCBwcm9wZXJ0eSwgcHV0VG9CYXNlT3Bl
cmF0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQzMl90IGdldFJlc29sdmVXaXRoQmFz
ZUZvclB1dE9wZXJhdGlvbnMoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIHVpbnQzMl90JiBw
dXRUb0Jhc2VPcGVyYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRSZXNv
bHZlQmFzZU9wZXJhdGlvbnMobV9yZXNvbHZlV2l0aEJhc2VGb3JQdXRNYXAsIHByb3BlcnR5LCBw
dXRUb0Jhc2VPcGVyYXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgdWludDMyX3QgZ2V0UHV0
VG9CYXNlT3BlcmF0aW9uKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobV9keW5hbWljU2NvcGVEZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9jb2RlQmxvY2stPmFkZFB1dFRvQmFzZSgpOwotICAgICAgICAgICAgSWRlbnRpZmllclJl
c29sdmVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtX3B1dFRvQmFzZU1hcC5hZGQocHJvcGVydHku
aW1wbCgpLCAwKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
ICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9jb2RlQmxvY2stPmFkZFB1dFRvQmFz
ZSgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBJZGVudGlmaWVyUmVzb2x2ZU1hcCBtX3B1dFRvQmFzZU1hcDsKLSAgICAg
ICAgSWRlbnRpZmllclJlc29sdmVNYXAgbV9yZXNvbHZlQ2FjaGVNYXA7Ci0gICAgICAgIElkZW50
aWZpZXJSZXNvbHZlTWFwIG1fcmVzb2x2ZVdpdGhUaGlzQ2FjaGVNYXA7Ci0gICAgICAgIElkZW50
aWZpZXJSZXNvbHZlUHV0TWFwIG1fcmVzb2x2ZUJhc2VNYXA7Ci0gICAgICAgIElkZW50aWZpZXJS
ZXNvbHZlUHV0TWFwIG1fcmVzb2x2ZUJhc2VGb3JQdXRNYXA7Ci0gICAgICAgIElkZW50aWZpZXJS
ZXNvbHZlUHV0TWFwIG1fcmVzb2x2ZVdpdGhCYXNlRm9yUHV0TWFwOwotCiAgICAgICAgIFN0YXRp
Y1Byb3BlcnR5QW5hbHl6ZXIgbV9zdGF0aWNQcm9wZXJ0eUFuYWx5emVyOwogCiAgICAgICAgIFZN
KiBtX3ZtOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDEsMjAgKzE0MSwyMCBAQCBSZWdpc3RlcklEKiBUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
CiAKIGJvb2wgUmVzb2x2ZU5vZGU6OmlzUHVyZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
KSBjb25zdAogewotICAgIHJldHVybiBnZW5lcmF0b3IucmVzb2x2ZShtX2lkZW50KS5pc1N0YXRp
YygpOworICAgIHJldHVybiBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkuZ2V0KCk7CiB9CiAKIFJl
Z2lzdGVySUQqIFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZVJl
c3VsdCA9IGdlbmVyYXRvci5yZXNvbHZlKG1faWRlbnQpOwotICAgIGlmIChSZWdpc3RlcklEKiBs
b2NhbCA9IHJlc29sdmVSZXN1bHQubG9jYWwoKSkgeworICAgIGlmIChMb2NhbCBsb2NhbCA9IGdl
bmVyYXRvci5sb2NhbChtX2lkZW50KSkgewogICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5p
Z25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwpOworICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbC5nZXQo
KSk7CiAgICAgfQogICAgIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9zdGFy
dE9mZnNldCArIG1faWRlbnQubGVuZ3RoKCksIG1faWRlbnQubGVuZ3RoKCksIDApOwotICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdFJlc29sdmUoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0
KSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3Bl
ID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpLCBtX2lkZW50KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93
SWZOb3RGb3VuZCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcnJh
eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MDcsMTAgKzQw
NywxOCBAQCBpbmxpbmUgdm9pZCBDYWxsQXJndW1lbnRzOjpuZXdBcmd1bWVudChCCiAKIFJlZ2lz
dGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBmdW5jID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIGlmIChMb2NhbCBs
b2NhbCA9IGdlbmVyYXRvci5sb2NhbChnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpKSB7
CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdl
bmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQo
KSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMs
IGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICB9CisKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAtIHN0YXJ0T2Zmc2V0KCkgKyA0LCA0LCAwKTsK
LSAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBmdW5jLmdldCgpLCBnZW5lcmF0b3IucmVzb2x2ZShnZW5lcmF0b3IucHJvcGVydHlO
YW1lcygpLmV2YWwpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmV2YWwpOworICAgIGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVNjb3BlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGdlbmVy
YXRvci5wcm9wZXJ0eU5hbWVzKCkuZXZhbCk7CisgICAgZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2Nv
cGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5ldmFsLCBUaHJvd0lmTm90Rm91bmQpOwogICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGxFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQo
KSksIGZ1bmMuZ2V0KCksIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVu
ZE9mZnNldCgpKTsKIH0KIApAQCAtNDMwLDEwICs0MzgsOSBAQCBSZWdpc3RlcklEKiBGdW5jdGlv
bkNhbGxWYWx1ZU5vZGU6OmVtaXRCCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICBFeHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24gPSBnZW5lcmF0
b3IuZXhwZWN0ZWRGdW5jdGlvbkZvcklkZW50aWZpZXIobV9pZGVudCk7Ci0gICAgUmVzb2x2ZVJl
c3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUobV9pZGVudCk7CiAKLSAgICBp
ZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSByZXNvbHZlUmVzdWx0LmxvY2FsKCkpIHsKLSAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJh
dG9yLmxvY2FsKG1faWRlbnQpKSB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0g
Z2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwu
Z2V0KCkpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgICAgICBDYWxsQXJndW1l
bnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7CkBA
IC00NDIsMjIgKzQ0OSwxMiBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6
ZW1pCiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCks
IGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIH0KIAotICAgIGlmIChyZXNvbHZlUmVz
dWx0LmlzU3RhdGljKCkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5W
YWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7Ci0gICAg
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0R2V0U3RhdGljVmFyKGZ1bmMuZ2V0KCksIHJlc29sdmVSZXN1bHQs
IG1faWRlbnQpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKLSAgICB9
Ci0KICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Ci0gICAgaW50IGlkZW50aWZpZXJTdGFydCA9IGRpdm90
KCkgLSBzdGFydE9mZnNldCgpOwotCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhp
ZGVudGlmaWVyU3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0aCgpLCAwKTsK
LSAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBmdW5jLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBzdGFydE9mZnNldCgpICsgbV9pZGVudC5s
ZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCk7CisgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
U2NvcGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgbV9pZGVudCk7CisgICAgZ2VuZXJh
dG9yLmVtaXRHZXRGcm9tU2NvcGUoZnVuYy5nZXQoKSwgY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgbV9pZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAK
QEAgLTYzMSwyOSArNjI4LDE5IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0UmVzb2x2
ZShCeXQKICAgICBSZXNvbHZlTm9kZSogcmVzb2x2ZSA9IHN0YXRpY19jYXN0PFJlc29sdmVOb2Rl
Kj4obV9leHByKTsKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHJlc29sdmUtPmlkZW50
aWZpZXIoKTsKIAotICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGdlbmVyYXRvci5y
ZXNvbHZlKGlkZW50KTsKLQotICAgIGlmIChSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSByZXNv
bHZlUmVzdWx0LmxvY2FsKCkpIHsKLSAgICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNSZWFkT25s
eSgpKSB7CisgICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KSkgewor
ICAgICAgICBpZiAobG9jYWwuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxvY2FsID0gZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0
KCkpOworICAgICAgICAgICAgbG9jYWwgPSBMb2NhbChnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSksIDApOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBlbWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCksIG1fb3BlcmF0b3IpOwogICAgIH0KIAotICAg
IGlmIChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkgJiYgIXJlc29sdmVSZXN1bHQuaXNSZWFkT25s
eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0
R2V0U3RhdGljVmFyKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcmVzb2x2ZVJlc3VsdCwgaWRl
bnQpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gb2xkVmFsdWUgPSBlbWl0UG9zdEluY09y
RGVjKGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUuZ2V0
KCksIG1fb3BlcmF0b3IpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFN0YXRpY1ZhcihyZXNv
bHZlUmVzdWx0LCBpZGVudCwgdmFsdWUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gb2xkVmFsdWUu
Z2V0KCk7Ci0gICAgfQotCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgp
LCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZh
bHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8g
cmVzb2x2ZUluZm87Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1p
dFJlc29sdmVXaXRoQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdl
dCgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZUluZm8pOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgaWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0
KCksIGlkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBvbGRW
YWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5h
dGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQ
dXRUb0Jhc2UoYmFzZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCByZXNvbHZlSW5mbyk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0
KCksIFRocm93SWZOb3RGb3VuZCk7CiAgICAgcmV0dXJuIG9sZFZhbHVlLmdldCgpOwogfQogCkBA
IC03MTgsMTMgKzcwNSwxMiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5CiAKIFJlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlc29sdmVS
ZXN1bHQgcmVzb2x2ZVJlc3VsdCA9IGdlbmVyYXRvci5yZXNvbHZlKG1faWRlbnQpOwotICAgIGlm
IChyZXNvbHZlUmVzdWx0LmlzUmVnaXN0ZXIoKSkKKyAgICBpZiAoZ2VuZXJhdG9yLmxvY2FsKG1f
aWRlbnQpLmdldCgpKQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGZhbHNlKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwotICAgIFJl
Z2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJh
c2UpLCBiYXNlLCBtX2lkZW50KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVy
YXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9p
ZGVudCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RGVsZXRlQnlJZChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKIH0K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlbGV0ZUJyYWNrZXROb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NzQsMjMgKzc2MCwxNyBAQCBS
ZWdpc3RlcklEKiBWb2lkTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAKIFJlZ2lzdGVySUQqIFR5
cGVPZlJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9
IGdlbmVyYXRvci5yZXNvbHZlKG1faWRlbnQpOwotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9
IHJlc29sdmVSZXN1bHQubG9jYWwoKSkgeworICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRv
ci5sb2NhbChtX2lkZW50KSkgewogICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVk
UmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKKyAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9mKGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsLmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAocmVzb2x2ZVJlc3VsdC5p
c1N0YXRpYygpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY3JhdGNoID0gZ2VuZXJh
dG9yLmVtaXRHZXRTdGF0aWNWYXIoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCByZXNv
bHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0VHlwZU9m
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc2NyYXRjaC5nZXQoKSksIHNjcmF0Y2gu
Z2V0KCkpOwotICAgIH0KLQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY3JhdGNoID0gZ2VuZXJh
dG9yLmVtaXRSZXNvbHZlQmFzZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIHJlc29s
dmVSZXN1bHQsIG1faWRlbnQpOwotICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZChzY3JhdGNoLmdl
dCgpLCBzY3JhdGNoLmdldCgpLCBtX2lkZW50KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2Nv
cGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9u
KGRzdCksIG1faWRlbnQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRv
ci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCks
IG1faWRlbnQsIERvTm90VGhyb3dJZk5vdEZvdW5kKTsKICAgICBpZiAoZHN0ID09IGdlbmVyYXRv
ci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdFR5cGVPZihnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNjcmF0Y2guZ2V0
KCkpLCBzY3JhdGNoLmdldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRUeXBlT2YoZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzY29wZS5nZXQoKSksIHZhbHVlLmdldCgpKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cGVPZlZhbHVlTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODEzLDMwICs3OTMsMjEgQEAg
UmVnaXN0ZXJJRCogUHJlZml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0ZQogICAgIFJlc29sdmVOb2Rl
KiByZXNvbHZlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2V4cHIpOwogICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gcmVzb2x2ZS0+aWRlbnRpZmllcigpOwogCi0gICAgUmVzb2x2
ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoaWRlbnQpOwotICAgIGlm
IChSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSByZXNvbHZlUmVzdWx0LmxvY2FsKCkpIHsKLSAg
ICAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNSZWFkT25seSgpKSB7CisgICAgaWYgKExvY2FsIGxv
Y2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KSkgeworICAgICAgICBpZiAobG9jYWwuaXNSZWFk
T25seSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZO
ZWVkZWQoKTsKLSAgICAgICAgICAgIGxvY2FsID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRv
ci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCkpOworICAgICAgICAgICAgbG9jYWwg
PSBMb2NhbChnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBsb2NhbC5nZXQoKSksIDApOwogICAgICAgICB9CiAgICAgICAgIGVtaXRJbmNPckRlYyhnZW5l
cmF0b3IsIGxvY2FsLmdldCgpLCBtX29wZXJhdG9yKTsKICAgICAgICAgcmV0dXJuIGdlbmVyYXRv
ci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWwuZ2V0KCkpOwogICAgIH0KIAot
ICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkgJiYgIXJlc29sdmVSZXN1bHQuaXNSZWFk
T25seSgpKSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2VuZXJhdG9y
LmVtaXRHZXRTdGF0aWNWYXIoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCByZXNvbHZl
UmVzdWx0LCBpZGVudCk7Ci0gICAgICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHByb3BEc3Qu
Z2V0KCksIG1fb3BlcmF0b3IpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFN0YXRpY1Zhcihy
ZXNvbHZlUmVzdWx0LCBpZGVudCwgcHJvcERzdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHByb3BEc3QuZ2V0KCkpOwotICAg
IH0KLQogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZz
ZXQoKSwgZW5kT2Zmc2V0KCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wRHN0ID0gZ2Vu
ZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIE5vbmxvY2FsUmVzb2x2ZUluZm8gcmVz
b2x2ZVZlcmlmaWVyOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlV2l0aEJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wRHN0
LmdldCgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZVZlcmlmaWVyKTsKLSAgICBlbWl0
SW5jT3JEZWMoZ2VuZXJhdG9yLCBwcm9wRHN0LmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICBnZW5l
cmF0b3IuZW1pdFB1dFRvQmFzZShiYXNlLmdldCgpLCBpZGVudCwgcHJvcERzdC5nZXQoKSwgcmVz
b2x2ZVZlcmlmaWVyKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZO
ZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2NvcGUg
PSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGlkZW50KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1p
dEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBpZGVu
dCwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2YWx1ZS5n
ZXQoKSwgbV9vcGVyYXRvcik7CisgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdl
dCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgcmV0dXJuIGdl
bmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgdmFsdWUuZ2V0KCkpOwogfQog
CiBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0QnJhY2tldChCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC0xMzA0LDcxICsxMjc1LDUwIEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQqIGVtaXRSZWEKIAogUmVnaXN0ZXJJRCogUmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFJlc29sdmVSZXN1bHQgcmVzb2x2ZVJlc3VsdCA9
IGdlbmVyYXRvci5yZXNvbHZlKG1faWRlbnQpOwotCi0gICAgaWYgKFJlZ2lzdGVySUQgKmxvY2Fs
ID0gcmVzb2x2ZVJlc3VsdC5sb2NhbCgpKSB7Ci0gICAgICAgIGlmIChyZXNvbHZlUmVzdWx0Lmlz
UmVhZE9ubHkoKSkgeworICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2lk
ZW50KSkgeworICAgICAgICBpZiAobG9jYWwuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpLCBsb2NhbCwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVz
KFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkp
OworICAgICAgICAgICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3Is
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpLCBtX3JpZ2h0LCBt
X29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdo
dC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlm
IChnZW5lcmF0b3IubGVmdEhhbmRTaWRlTmVlZHNDb3B5KG1fcmlnaHRIYXNBc3NpZ25tZW50cywg
bV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKHJlc3VsdC5nZXQoKSwgbG9jYWwpOworICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRNb3ZlKHJlc3VsdC5nZXQoKSwgbG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgZW1p
dFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgcmVzdWx0LmdldCgpLCByZXN1bHQuZ2V0
KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3du
VHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKLSAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0TW92ZShsb2NhbCwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgcmVzdWx0LmdldCgpKTsKICAgICAgICAgICAgIHJldHVy
biBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdC5nZXQoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRS
ZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGxvY2FsLCBsb2NhbCwgbV9yaWdodCwgbV9v
cGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQt
PnJlc3VsdERlc2NyaXB0b3IoKSkpOworICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBlbWl0
UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBsb2NhbC5nZXQoKSwgbG9jYWwuZ2V0KCks
IG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlw
ZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKICAgICB9CiAKLSAg
ICBpZiAocmVzb2x2ZVJlc3VsdC5pc1N0YXRpYygpICYmICFyZXNvbHZlUmVzdWx0LmlzUmVhZE9u
bHkoKSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0
R2V0U3RhdGljVmFyKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgcmVzb2x2ZVJlc3Vs
dCwgbV9pZGVudCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5
QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3Jj
MS5nZXQoKSksIHNyYzEuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhS
ZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRTdGF0aWNWYXIocmVzb2x2ZVJlc3VsdCwgbV9pZGVu
dCwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBzdGFydE9mZnNldCgpICsgbV9p
ZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCk7Ci0gICAgTm9ubG9jYWxSZXNvbHZl
SW5mbyByZXNvbHZlVmVyaWZpZXI7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5l
cmF0b3IuZW1pdFJlc29sdmVXaXRoQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IHNyYzEuZ2V0KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQsIHJlc29sdmVWZXJpZmllcik7Ci0g
ICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRv
ciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQo
KSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25U
eXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSksIHRoaXMpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdFB1dFRvQmFzZShiYXNlLmdldCgpLCBtX2lkZW50LCByZXN1bHQsIHJlc29s
dmVWZXJpZmllcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlU2NvcGUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50KTsKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91
bmQpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBlbWl0UmVhZE1vZGlmeUFzc2ln
bm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHZhbHVlLmdl
dCgpKSwgdmFsdWUuZ2V0KCksIG1fcmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1
bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpLCB0aGlz
KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lk
ZW50LCByZXN1bHQuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25SZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
LSAgICBSZXNvbHZlUmVzdWx0IHJlc29sdmVSZXN1bHQgPSBnZW5lcmF0b3IucmVzb2x2ZShtX2lk
ZW50KTsKLQotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHJlc29sdmVSZXN1bHQubG9jYWwo
KSkgewotICAgICAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1JlYWRPbmx5KCkpIHsKKyAgICBpZiAo
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwobV9pZGVudCkpIHsKKyAgICAgICAgaWYgKGxv
Y2FsLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFkT25seUV4
Y2VwdGlvbklmTmVlZGVkKCk7CiAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9yaWdodCk7CiAgICAgICAgIH0KLSAgICAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0g
Z2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLCBtX3JpZ2h0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
cmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLmdldCgpLCBtX3JpZ2h0KTsKICAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0
KTsKICAgICB9CiAKLSAgICBpZiAocmVzb2x2ZVJlc3VsdC5pc1N0YXRpYygpICYmICFyZXNvbHZl
UmVzdWx0LmlzUmVhZE9ubHkoKSkgewotICAgICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25v
cmVkUmVzdWx0KCkpCi0gICAgICAgICAgICBkc3QgPSAwOwotICAgICAgICBSZWdpc3RlcklEKiB2
YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQpOwotICAgICAgICBnZW5lcmF0
b3IuZW1pdFB1dFN0YXRpY1ZhcihyZXNvbHZlUmVzdWx0LCBtX2lkZW50LCB2YWx1ZSk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29s
dmVWZXJpZmllcjsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0
UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCByZXNvbHZlUmVzdWx0
LCBtX2lkZW50LCByZXNvbHZlVmVyaWZpZXIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29w
ZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
bV9pZGVudCk7CiAgICAgaWYgKGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAg
ICAgICBkc3QgPSAwOwotICAgIFJlZ2lzdGVySUQqIHZhbHVlID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9yaWdodCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwotICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdFB1dFRvQmFzZShiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZSwgcmVzb2x2ZVZl
cmlmaWVyKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgp
LCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93
SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkRvdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTE0NTEsMTAgKzE0MDEsOCBAQCBSZWdpc3RlcklEKiBDb21tYU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlCiAKIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVtaXRDb2Rl
U2luZ2xlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7Ci0gICAgUmVzb2x2ZVJlc3Vs
dCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmVDb25zdERlY2wobV9pZGVudCk7Ci0K
ICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXMgbm90IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBj
b25zdCBpbiBGaXJlZm94LgotICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHJlc29sdmVSZXN1
bHQubG9jYWwoKSkgeworICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IGdlbmVyYXRvci5jb25z
dExvY2FsKG1faWRlbnQpLmdldCgpKSB7CiAgICAgICAgIGlmICghbV9pbml0KQogICAgICAgICAg
ICAgcmV0dXJuIGxvY2FsOwogCkBAIC0xNDcwLDggKzE0MTgsOCBAQCBSZWdpc3RlcklEKiBDb25z
dERlY2xOb2RlOjplbWl0Q29kZVNpbmdsCiAgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKIAog
ICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmVzdWx0IGluIGluY29ycmVjdCBhc3NpZ25tZW50IGlm
IG1faWRlbnQgZXhpc3RzIGluIGFuIGludGVydmVuaW5nIHdpdGggc2NvcGUuCi0gICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSk7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlU2NvcGUoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBtX2lkZW50KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVt
aXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCB2YWx1ZS5nZXQoKSwgRG9Ob3RUaHJv
d0lmTm90Rm91bmQpOwogfQogCiBSZWdpc3RlcklEKiBDb25zdERlY2xOb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCkBAIC0xNzM1LDE2
ICsxNjgzLDE0IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW4KICAg
ICBib29sIG9wdGltaXplZEZvcmluQWNjZXNzID0gZmFsc2U7CiAgICAgaWYgKG1fbGV4cHItPmlz
UmVzb2x2ZU5vZGUoKSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRp
Y19jYXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKLSAgICAgICAgUmVz
b2x2ZVJlc3VsdCByZXNvbHZlUmVzdWx0ID0gZ2VuZXJhdG9yLnJlc29sdmUoaWRlbnQpOwotICAg
ICAgICBwcm9wZXJ0eU5hbWUgPSByZXNvbHZlUmVzdWx0LmxvY2FsKCk7CisgICAgICAgIExvY2Fs
IGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKKyAgICAgICAgcHJvcGVydHlOYW1lID0g
bG9jYWwuZ2V0KCk7CiAgICAgICAgIGlmICghcHJvcGVydHlOYW1lKSB7CiAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgICAgIE5vbmxv
Y2FsUmVzb2x2ZUluZm8gcmVzb2x2ZVZlcmlmaWVyOwotICAgICAgICAgICAgUmVnaXN0ZXJJRCog
YmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VGb3JQdXQoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCByZXNvbHZlUmVzdWx0LCBpZGVudCwgcmVzb2x2ZVZlcmlmaWVyKTsKLQorICAgICAg
ICAgICAgUmVnaXN0ZXJJRCogc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGlkZW50KTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwotICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRUb0Jhc2UoYmFzZSwgaWRlbnQsIHByb3BlcnR5TmFt
ZSwgcmVzb2x2ZVZlcmlmaWVyKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29w
ZShzY29wZSwgaWRlbnQsIHByb3BlcnR5TmFtZSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8g
VGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgZ2VuZXJh
dG9yLnB1c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQo
KSwgaS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI2MywxNSArMTI2MywxNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgR2V0U2NvcGVSZWdpc3Rl
cnM6CisgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgogICAgICAgICBmb3JOb2RlKG5vZGUp
LmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFr
OwogCi0gICAgY2FzZSBHZXRTY29wZWRWYXI6CisgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAg
ICAgICBmb3JOb2RlKG5vZGUpLm1ha2VUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKLSAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAg
ICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCkBAIC0xNTIyLDExICsxNTIyLDExIEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKKyAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6
CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVj
azoKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6CkBAIC0xNTQ4LDIwICsxNTQ4LDExIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVm
ZmVjdHModW5zaWcKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0
cnVjdDoKLSAgICBjYXNlIFJlc29sdmU6Ci0gICAgY2FzZSBSZXNvbHZlQmFzZToKLSAgICBjYXNl
IFJlc29sdmVCYXNlU3RyaWN0UHV0OgotICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVP
cmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgR2FyYmFnZVZhbHVlOgotICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlVG9wKCk7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6
CiAgICAgY2FzZSBGb3J3YXJkRm9yY2VPU1JFeGl0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBA
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5o
IgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKLSNpbmNsdWRlICJSZXNvbHZlR2xvYmFsU3Rh
dHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEzOCw3ICsxMzcsNiBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9wcmVzZXJ2ZWRWYXJzKG1fY29kZUJsb2NrLT5tX251bVZh
cnMpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2Vk
VmFyQXJncygwKQotICAgICAgICAsIG1fZ2xvYmFsUmVzb2x2ZU51bWJlcigwKQogICAgICAgICAs
IG1faW5saW5lU3RhY2tUb3AoMCkKICAgICAgICAgLCBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzKGZh
bHNlKQogICAgICAgICAsIG1fZW1wdHlKU1ZhbHVlSW5kZXgoVUlOVF9NQVgpCkBAIC0xNjksNiAr
MTY3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0
dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2Fs
bC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2lj
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFs
RnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgTm9kZSogaGFuZGxlUHV0
QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQs
IE5vZGUqIHZhbHVlKTsKICAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQp
OwogICAgIHZvaWQgaGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9w
ZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLApAQCAtMTc5LDkgKzE3OCw2IEBAIHByaXZhdGU6CiAKICAgICBOb2RlKiBnZXRTY29wZShi
b29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCk7CiAgICAgCi0gICAgLy8gQ29udmVydCBh
IHNldCBvZiBSZXNvbHZlT3BlcmF0aW9ucyBpbnRvIGdyYXBoIG5vZGVzCi0gICAgYm9vbCBwYXJz
ZVJlc29sdmVPcGVyYXRpb25zKFNwZWN1bGF0ZWRUeXBlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiosIE5vZGUqKiBiYXNl
LCBOb2RlKiogdmFsdWUpOwotCiAgICAgLy8gUHJlcGFyZSB0byBwYXJzZSBhIGJsb2NrLgogICAg
IHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2lj
IGJsb2NrIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KQEAgLTI1MiwxNyArMjQ4LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChv
cGVyYW5kKSwgdmFsdWUsIHNldE1vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFBhaXIo
aW50IG9wZXJhbmQxLCBOb2RlKiB2YWx1ZTEsIGludCBvcGVyYW5kMiwgTm9kZSogdmFsdWUyKQot
ICAgIHsKLSAgICAgICAgLy8gRmlyc3QgZW1pdCBkZWFkIFNldExvY2FscyBmb3IgdGhlIGJlbmVm
aXQgb2YgT1NSLgotICAgICAgICBzZXQob3BlcmFuZDEsIHZhbHVlMSk7Ci0gICAgICAgIHNldChv
cGVyYW5kMiwgdmFsdWUyKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyBlbWl0IHRoZSByZWFs
IFNldExvY2Fscy4KLSAgICAgICAgc2V0KG9wZXJhbmQxLCB2YWx1ZTEpOwotICAgICAgICBzZXQo
b3BlcmFuZDIsIHZhbHVlMik7Ci0gICAgfQotICAgIAogICAgIE5vZGUqIGluamVjdExhenlPcGVy
YW5kU3BlY3VsYXRpb24oTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IEdldExvY2FsKTsKQEAgLTc4MCw3ICs3NjUsNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogYWRkU3RydWN0dXJlVHJhbnNpdGlv
bkNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBOb2RlKiBj
ZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgIHsKICAgICAgICAgLy8gQWRkIGEgd2VhayBKUyBjb25zdGFudCBmb3Ig
dGhlIG9iamVjdCByZWdhcmRsZXNzLCBzaW5jZSB0aGUgY29kZSBzaG91bGQKICAgICAgICAgLy8g
YmUgamV0dGlzb25lZCBpZiB0aGUgb2JqZWN0IGV2ZXIgZGllcy4KQEAgLTc5MywxNSArNzc4LDE0
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwg
b2JqZWN0Tm9kZSk7Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9
CiAgICAgCi0gICAgTm9kZSogYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKEpTQ2VsbCogb2Jq
ZWN0KQorICAgIE5vZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9i
amVjdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
b2JqZWN0LCBvYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayhvYmplY3QsIG9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgIH0K
LSAgICAKKwogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1
bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwpAQCAt
MTAxNiw4ICsxMDAwLDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3Rz
OwogICAgIC8vIFRoZSBudW1iZXIgb2YgdmFyIGFyZ3MgcGFzc2VkIHRvIHRoZSBuZXh0IHZhciBh
cmcgbm9kZS4KICAgICB1bnNpZ25lZCBtX251bVBhc3NlZFZhckFyZ3M7Ci0gICAgLy8gVGhlIGlu
ZGV4IGluIHRoZSBnbG9iYWwgcmVzb2x2ZSBpbmZvLgotICAgIHVuc2lnbmVkIG1fZ2xvYmFsUmVz
b2x2ZU51bWJlcjsKIAogICAgIHN0cnVjdCBQaGlTdGFja0VudHJ5IHsKICAgICAgICAgUGhpU3Rh
Y2tFbnRyeShCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogcGhpLCB1bnNpZ25lZCB2YXJObykKQEAg
LTE2NjQsNiArMTY0NiwyMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dCgKICAgICBzZXQoZGVzdGluYXRpb25PcGVyYW5kLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0
aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsKIH0KIAorTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZSogdmFsdWUpCit7CisgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOworICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOworICAgIGVsc2UKKyAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOworICAgIE5vZGUqIHJlc3VsdCA9IGFk
ZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
c2l6ZSgpKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7CisgICAgCisgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CisgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zm
c2V0ID0gaW5kZXhSZWxhdGl2ZVRvQmFzZShvZmZzZXQpOworICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
LmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyOworICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICBpbnQgZGVzdGlu
YXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmIGdldEJ5SWRT
dGF0dXMpCkBAIC0xNjk2LDcgKzE2OTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeUlkKAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2V0QnlJZFN0YXR1cy5j
aGFpbigpLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IGFzT2Jq
ZWN0KGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jaykpOwogICAgICAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9IGdldEJ5SWRT
dGF0dXMuY2hhaW4oKS0+YXQoaSk7Ci0gICAgICAgICAgICBiYXNlID0gYWRkU3RydWN0dXJlVHJh
bnNpdGlvbkNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRTdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhjdXJyZW50T2JqZWN0LCBj
dXJyZW50U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE3NDQsMTc1ICsx
NzQzLDYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmdldFNjb3BlKGJvb2wgc2tpcAogICAgIHJl
dHVybiBsb2NhbEJhc2U7CiB9CiAKLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9w
ZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQgaWRlbnRpZmllciwg
UmVzb2x2ZU9wZXJhdGlvbnMqIHJlc29sdmVPcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24q
IHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSkKLXsKLSAgICB7
Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgCi0gICAgICAgIGlmICghcmVzb2x2ZU9wZXJh
dGlvbnMtPm1fcmVhZHkpIHsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VS
VCghcmVzb2x2ZU9wZXJhdGlvbnMtPmlzRW1wdHkoKSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOwotICAgIGludCBza2lwQ291bnQgPSAwOwotICAgIGJvb2wgc2tpcFRvcCA9IGZhbHNlOwot
ICAgIGJvb2wgc2tpcHBlZFNjb3BlcyA9IGZhbHNlOwotICAgIGJvb2wgc2V0QmFzZSA9IGZhbHNl
OwotICAgIFJlc29sdmVPcGVyYXRpb24qIHBjID0gcmVzb2x2ZU9wZXJhdGlvbnMtPmRhdGEoKTsK
LSAgICBOb2RlKiBsb2NhbEJhc2UgPSAwOwotICAgIGJvb2wgcmVzb2x2aW5nQmFzZSA9IHRydWU7
Ci0gICAgd2hpbGUgKHJlc29sdmluZ0Jhc2UpIHsKLSAgICAgICAgc3dpdGNoIChwYy0+bV9vcGVy
YXRpb24pIHsKLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpSZXR1cm5HbG9iYWxPYmpl
Y3RBc0Jhc2U6Ci0gICAgICAgICAgICAqYmFzZSA9IGNlbGxDb25zdGFudChnbG9iYWxPYmplY3Qp
OwotICAgICAgICAgICAgQVNTRVJUKCF2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNldEJhc2VUb0dsb2JhbDoKLSAgICAg
ICAgICAgICpiYXNlID0gY2VsbENvbnN0YW50KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBz
ZXRCYXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlc29sdmluZ0Jhc2UgPSBmYWxzZTsKLSAgICAg
ICAgICAgICsrcGM7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJlc29sdmVP
cGVyYXRpb246OlNldEJhc2VUb1VuZGVmaW5lZDoKLSAgICAgICAgICAgICpiYXNlID0gY29uc3Rh
bnRVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIHNldEJhc2UgPSB0cnVlOwotICAgICAgICAgICAg
cmVzb2x2aW5nQmFzZSA9IGZhbHNlOwotICAgICAgICAgICAgKytwYzsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6U2V0QmFzZVRvU2NvcGU6Ci0g
ICAgICAgICAgICBsb2NhbEJhc2UgPSBnZXRTY29wZShza2lwVG9wLCBza2lwQ291bnQpOwotICAg
ICAgICAgICAgKmJhc2UgPSBsb2NhbEJhc2U7Ci0gICAgICAgICAgICBzZXRCYXNlID0gdHJ1ZTsK
LQotICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBS
ZXNldCB0aGUgc2NvcGUgc2tpcHBpbmcgYXMgd2UndmUgYWxyZWFkeSBsb2FkZWQgaXQKLSAgICAg
ICAgICAgIHNraXBwZWRTY29wZXMgPSBmYWxzZTsKLSAgICAgICAgICAgICsrcGM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpSZXR1cm5TY29wZUFz
QmFzZToKLSAgICAgICAgICAgICpiYXNlID0gZ2V0U2NvcGUoc2tpcFRvcCwgc2tpcENvdW50KTsK
LSAgICAgICAgICAgIEFTU0VSVCghdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpTa2lwVG9wU2NvcGVOb2RlOgotICAgICAg
ICAgICAgQVNTRVJUKCFpbmxpbmVDYWxsRnJhbWUoKSk7Ci0gICAgICAgICAgICBza2lwVG9wID0g
dHJ1ZTsKLSAgICAgICAgICAgIHNraXBwZWRTY29wZXMgPSB0cnVlOwotICAgICAgICAgICAgKytw
YzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6
U2tpcFNjb3BlczoKLSAgICAgICAgICAgIHNraXBDb3VudCArPSBwYy0+bV9zY29wZXNUb1NraXA7
Ci0gICAgICAgICAgICBza2lwcGVkU2NvcGVzID0gdHJ1ZTsKLSAgICAgICAgICAgICsrcGM7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkNoZWNr
Rm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZToKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkZhaWw6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJlc29sdmlu
Z0Jhc2UgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc2tpcHBlZFNjb3BlcykK
LSAgICAgICAgbG9jYWxCYXNlID0gZ2V0U2NvcGUoc2tpcFRvcCwgc2tpcENvdW50KTsKLQotICAg
IGlmIChiYXNlICYmICFzZXRCYXNlKQotICAgICAgICAqYmFzZSA9IGxvY2FsQmFzZTsKLQotICAg
IEFTU0VSVCh2YWx1ZSk7Ci0gICAgUmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2ZVZhbHVlT3BlcmF0
aW9uID0gcGM7Ci0gICAgc3dpdGNoIChyZXNvbHZlVmFsdWVPcGVyYXRpb24tPm1fb3BlcmF0aW9u
KSB7Ci0gICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9iYWxQcm9wZXJ0
eTogewotICAgICAgICBSZXNvbHZlR2xvYmFsU3RhdHVzIHN0YXR1cyA9IFJlc29sdmVHbG9iYWxT
dGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2N1
cnJlbnRJbmRleCwgcmVzb2x2ZVZhbHVlT3BlcmF0aW9uLCBtX2dyYXBoLmlkZW50aWZpZXJzKClb
aWRlbnRpZmllcl0pOwotICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMuc3RydWN0dXJlKCkpOwotCi0gICAgICAgICAgICBOb2RlKiBnbG9i
YWxPYmplY3ROb2RlID0gYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKGdsb2JhbE9iamVjdCwg
c3RhdHVzLnN0cnVjdHVyZSgpKTsKLQotICAgICAgICAgICAgaWYgKHN0YXR1cy5zcGVjaWZpY1Zh
bHVlKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLnNwZWNpZmljVmFsdWUoKS5p
c0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgKnZhbHVlID0gY2VsbENvbnN0YW50KHN0YXR1cy5z
cGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgKnZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgZ2xvYmFsT2JqZWN0
Tm9kZSwgaWRlbnRpZmllciwgc3RhdHVzLm9mZnNldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgTm9kZSogcmVzb2x2ZSA9IGFkZFRvR3JhcGgoUmVz
b2x2ZUdsb2JhbCwgT3BJbmZvKG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5zaXplKCkpLCBP
cEluZm8ocHJlZGljdGlvbikpOwotICAgICAgICBtX2dyYXBoLm1fcmVzb2x2ZUdsb2JhbERhdGEu
YXBwZW5kKFJlc29sdmVHbG9iYWxEYXRhKCkpOwotICAgICAgICBSZXNvbHZlR2xvYmFsRGF0YSYg
ZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZlR2xvYmFsRGF0YS5sYXN0KCk7Ci0gICAgICAgIGRhdGEu
aWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7Ci0gICAgICAgIGRhdGEucmVzb2x2ZU9wZXJh
dGlvbnMgPSByZXNvbHZlT3BlcmF0aW9uczsKLSAgICAgICAgZGF0YS5wdXRUb0Jhc2VPcGVyYXRp
b24gPSBwdXRUb0Jhc2VPcGVyYXRpb247Ci0gICAgICAgIGRhdGEucmVzb2x2ZVByb3BlcnR5SW5k
ZXggPSByZXNvbHZlVmFsdWVPcGVyYXRpb24gLSByZXNvbHZlT3BlcmF0aW9ucy0+ZGF0YSgpOwot
ICAgICAgICAqdmFsdWUgPSByZXNvbHZlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9iYWxWYXI6IHsKLSAgICAg
ICAgKnZhbHVlID0gYWRkVG9HcmFwaCgKLSAgICAgICAgICAgIEdldEdsb2JhbFZhciwKLSAgICAg
ICAgICAgIE9wSW5mbyhnbG9iYWxPYmplY3QtPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3Qo
cGMtPm1fcmVnaXN0ZXJBZGRyZXNzKSksCi0gICAgICAgICAgICBPcEluZm8ocHJlZGljdGlvbikp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9u
OjpHZXRBbmRSZXR1cm5HbG9iYWxWYXJXYXRjaGFibGU6IHsKLSAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLQotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpOwotCi0gICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyXTsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9i
amVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7Ci0gICAgICAgIGlmICghbV9ncmFwaC53YXRj
aHBvaW50cygpLmlzU3RpbGxWYWxpZChlbnRyeS53YXRjaHBvaW50U2V0KCkpKSB7Ci0gICAgICAg
ICAgICAqdmFsdWUgPSBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKGdsb2JhbE9iamVj
dC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdpc3RlckFkZHJlc3MpKSwg
T3BJbmZvKHByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gVGhlIHdhdGNocG9pbnQgaXMgc3RpbGwgaW50YWN0ISBUaGlzIG1lYW5z
IHRoYXQgd2Ugd2lsbCBnZXQgbm90aWZpZWQgaWYgdGhlCi0gICAgICAgIC8vIGN1cnJlbnQgdmFs
dWUgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZSBjaGFuZ2VzLiBTbywgd2UgY2FuIGlubGluZSB0aGF0
IHZhbHVlLgotICAgICAgICAvLyBNb3Jlb3ZlciwgY3VycmVudGx5IHdlIGNhbiBhc3N1bWUgdGhh
dCB0aGlzIHZhbHVlIGlzIGEgSlNGdW5jdGlvbiosIHdoaWNoCi0gICAgICAgIC8vIGltcGxpZXMg
dGhhdCBpdCdzIGEgY2VsbC4gVGhpcyBzaW1wbGlmaWVzIHRoaW5ncywgc2luY2UgaW4gZ2VuZXJh
bCB3ZSdkIGhhdmUKLSAgICAgICAgLy8gdG8gdXNlIGEgSlNDb25zdGFudCBmb3Igbm9uLWNlbGxz
IGFuZCBhIFdlYWtKU0NvbnN0YW50IGZvciBjZWxscy4gU28gaW5zdGVhZAotICAgICAgICAvLyBv
ZiBoYXZpbmcgYm90aCBjYXNlcyB3ZSBqdXN0IGFzc2VydCB0aGF0IHRoZSB2YWx1ZSBpcyBhIGNl
bGwuCi0KLSAgICAgICAgLy8gTkIuIElmIGl0IHdhc24ndCBmb3IgQ1NFLCBHbG9iYWxWYXJXYXRj
aHBvaW50IHdvdWxkIGhhdmUgbm8gbmVlZCBmb3IgdGhlCi0gICAgICAgIC8vIHJlZ2lzdGVyIHBv
aW50ZXIuIEJ1dCBDU0UgdHJhY2tzIGVmZmVjdHMgb24gZ2xvYmFsIHZhcmlhYmxlcyBieSBjb21w
YXJpbmcKLSAgICAgICAgLy8gcmVnaXN0ZXIgcG9pbnRlcnMuIEJlY2F1c2UgQ1NFIGV4ZWN1dGVz
IG11bHRpcGxlIHRpbWVzIHdoaWxlIHRoZSBiYWNrZW5kCi0gICAgICAgIC8vIGV4ZWN1dGVzIG9u
Y2UsIHdlIHVzZSB0aGUgZm9sbG93aW5nIHBlcmZvcm1hbmNlIHRyYWRlLW9mZjoKLSAgICAgICAg
Ly8gLSBUaGUgbm9kZSByZWZlcnMgZGlyZWN0bHkgdG8gdGhlIHJlZ2lzdGVyIHBvaW50ZXIgdG8g
bWFrZSBDU0Ugc3VwZXIgY2hlYXAuCi0gICAgICAgIC8vIC0gVG8gcGVyZm9ybSBiYWNrZW5kIGNv
ZGUgZ2VuZXJhdGlvbiwgdGhlIG5vZGUgb25seSBjb250YWlucyB0aGUgaWRlbnRpZmllcgotICAg
ICAgICAvLyAgIG51bWJlciwgZnJvbSB3aGljaCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgKHZpYSBh
IGZldyBhdmVyYWdlLXRpbWUgTygxKQotICAgICAgICAvLyAgIGxvb2t1cHMpIHRvIHRoZSBXYXRj
aHBvaW50U2V0LgotCi0gICAgICAgIGFkZFRvR3JhcGgoR2xvYmFsVmFyV2F0Y2hwb2ludCwgT3BJ
bmZvKGdsb2JhbE9iamVjdC0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChwYy0+bV9yZWdp
c3RlckFkZHJlc3MpKSwgT3BJbmZvKGlkZW50aWZpZXIpKTsKLQotICAgICAgICBKU1ZhbHVlIHNw
ZWNpZmljVmFsdWUgPSBnbG9iYWxPYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSku
Z2V0KCk7Ci0gICAgICAgIEFTU0VSVChzcGVjaWZpY1ZhbHVlLmlzQ2VsbCgpKTsKLSAgICAgICAg
KnZhbHVlID0gY2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1
cm5TY29wZWRWYXI6IHsKLSAgICAgICAgTm9kZSogZ2V0U2NvcGVSZWdpc3RlcnMgPSBhZGRUb0dy
YXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBsb2NhbEJhc2UpOwotICAgICAgICAqdmFsdWUgPSBhZGRU
b0dyYXBoKEdldFNjb3BlZFZhciwgT3BJbmZvKHJlc29sdmVWYWx1ZU9wZXJhdGlvbi0+bV9vZmZz
ZXQpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldFNjb3BlUmVnaXN0ZXJzKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLX0KLQogYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9
IHRydWU7CkBAIC0yNTY1LDE3ICsyMzk1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWhhc0V4aXRTaXRl
ICYmIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
cHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgICAgICAgICBO
b2RlKiBwcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0
KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBiYXNlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwotICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNlLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFj
Y2Vzc0RhdGE7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gaW5k
ZXhSZWxhdGl2ZVRvQmFzZShwdXRCeUlkU3RhdHVzLm9mZnNldCgpKTsKLSAgICAgICAgICAgICAg
ICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3Jh
Z2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCBwdXRCeUlkU3RhdHVzLm9mZnNldCgpLCB2YWx1ZSk7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKAogICAgICAgICAgICAgICAgICFoYXNFeGl0U2l0ZQogICAgICAgICAg
ICAgICAgICYmIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkKQEAgLTI1ODcsNyAr
MjQwNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWRpcmVjdCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXB1dEJ5
SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAg
ICAgICAgICAgICAgICAgICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+c3Rv
cmVkUHJvdG90eXBlKCkuYXNDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIApAQCAtMjU5NSw4ICsyNDE1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90
b3R5cGUgPSBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90
b3R5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhwcm90b3R5cGUuYXNDZWxsKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHByb3Rv
dHlwZS5hc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwpAQCAtMjY2NiwyOSAr
MjQ4NSw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfZ2xvYmFsX2NvbnN0KTsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2s6IHsKLSAgICAgICAgICAgIE5v
ZGUqIHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
azsKLSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwotICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7Ci0gICAgICAg
ICAgICBpZiAoIWVudHJ5LmNvdWxkQmVXYXRjaGVkKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKAotICAgICAgICAgICAgICAgICAgICBQdXRHbG9iYWxWYXIsCi0gICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhnbG9iYWxPYmplY3QtPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3Qo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCi0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2dsb2Jh
bF9jb25zdF9jaGVjayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKAot
ICAgICAgICAgICAgICAgIFB1dEdsb2JhbFZhckNoZWNrLAotICAgICAgICAgICAgICAgIE9wSW5m
byhjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcikpLAotICAgICAgICAgICAg
ICAgIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwKLSAgICAgICAgICAgICAgICB2YWx1ZSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayk7Ci0gICAg
ICAgIH0KLQotCiAgICAgICAgIC8vID09PSBCbG9jayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAg
ICAgY2FzZSBvcF9qbXA6IHsKQEAgLTMwNTEsMjA2ICsyODQ3LDE0MiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAs
IE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5lcV9wdHIpKSk7CiAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX3B0cik7CiAKLSAgICAgICAgY2FzZSBvcF9n
ZXRfc2NvcGVkX3ZhcjogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGRlcHRoID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGJvb2wgaGFzVG9wU2NvcGUgPSBtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKLSAgICAgICAgICAgIEFTU0VSVCghaGFz
VG9wU2NvcGUgfHwgZGVwdGggPj0gMSk7Ci0gICAgICAgICAgICBOb2RlKiBzY29wZSA9IGdldFNj
b3BlKGhhc1RvcFNjb3BlLCBkZXB0aCAtIGhhc1RvcFNjb3BlKTsKLSAgICAgICAgICAgIE5vZGUq
IGdldFNjb3BlUmVnaXN0ZXJzID0gYWRkVG9HcmFwaChHZXRTY29wZVJlZ2lzdGVycywgc2NvcGUp
OwotICAgICAgICAgICAgTm9kZSogZ2V0U2NvcGVkVmFyID0gYWRkVG9HcmFwaChHZXRTY29wZWRW
YXIsIE9wSW5mbyhzbG90KSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXRTY29wZVJlZ2lzdGVycyk7
Ci0gICAgICAgICAgICBzZXQoZHN0LCBnZXRTY29wZWRWYXIpOwotICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ2V0X3Njb3BlZF92YXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9w
dXRfc2NvcGVkX3ZhcjogewotICAgICAgICAgICAgaW50IHNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGRlcHRoID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBzb3VyY2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICAgICAgYm9vbCBoYXNUb3BTY29wZSA9IG1fY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwotICAgICAgICAgICAgQVNTRVJUKCFo
YXNUb3BTY29wZSB8fCBkZXB0aCA+PSAxKTsKLSAgICAgICAgICAgIE5vZGUqIHNjb3BlID0gZ2V0
U2NvcGUoaGFzVG9wU2NvcGUsIGRlcHRoIC0gaGFzVG9wU2NvcGUpOwotICAgICAgICAgICAgTm9k
ZSogc2NvcGVSZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFNjb3BlZFZhciwgT3BJbmZvKHNsb3QpLCBzY29w
ZSwgc2NvcGVSZWdpc3RlcnMsIGdldChzb3VyY2UpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX3B1dF9zY29wZWRfdmFyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ugb3BfcmVzb2x2
ZToKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbF9wcm9wZXJ0eToKLSAgICAgICAgY2Fz
ZSBvcF9yZXNvbHZlX2dsb2JhbF92YXI6Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZWRf
dmFyOgotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3Zhcl9vbl90b3Bfc2NvcGU6Ci0g
ICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZWRfdmFyX3dpdGhfdG9wX3Njb3BlX2NoZWNrOiB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZF07Ci0gICAgICAgICAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51LnJlc29sdmVPcGVyYXRpb25zOwotICAgICAgICAgICAgTm9kZSog
dmFsdWUgPSAwOwotICAgICAgICAgICAgaWYgKHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGlj
dGlvbiwgaWRlbnRpZmllciwgb3BlcmF0aW9ucywgMCwgMCwgJnZhbHVlKSkgewotICAgICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcmVzb2x2ZSk7CisgICAgICAgIGNhc2Ugb3BfcmVz
b2x2ZV9zY29wZTogeworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
c3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kOworCisgICAgICAgICAgICAvLyBnZXRfZnJvbV9zY29wZSBhbmQgcHV0X3RvX3Njb3Bl
IGRlcGVuZCBvbiB0aGlzIHdhdGNocG9pbnQgZm9yY2luZyBPU1IgZXhpdCwgc28gdGhleSBkb24n
dCBhZGQgdGhlaXIgb3duIHdhdGNocG9pbnRzLgorICAgICAgICAgICAgaWYgKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSkKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZh
ckluamVjdGlvbldhdGNocG9pbnQpOworCisgICAgICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CisgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgorICAgICAgICAgICAgY2FzZSBH
bG9iYWxWYXI6CisgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczoKKyAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKKyAgICAgICAgICAgICAgICBzZXQoZHN0LCBjZWxsQ29uc3RhbnQobV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CisgICAgICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgICAgIHNldChkc3QsIGdldFNj
b3BlKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSwgZGVw
dGgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRHluYW1pYzoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBOb2RlKiByZXNvbHZl
ID0gYWRkVG9HcmFwaChSZXNvbHZlLCBPcEluZm8obV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRpb25z
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbikpOwotICAgICAgICAgICAgbV9ncmFwaC5t
X3Jlc29sdmVPcGVyYXRpb25zRGF0YS5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbkRhdGEoKSk7Ci0g
ICAgICAgICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9yZXNvbHZl
T3BlcmF0aW9uc0RhdGEubGFzdCgpOwotICAgICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllcjsKLSAgICAgICAgICAgIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMgPSBvcGVy
YXRpb25zOwotCi0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVzb2x2ZSk7Ci0KLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29sdmUpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfcmVzb2x2ZV9zY29wZSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIG9wX3B1dF90b19iYXNlX3ZhcmlhYmxlOgotICAgICAgICBjYXNlIG9wX3B1dF90
b19iYXNlOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzRdLnUucHV0VG9CYXNlT3BlcmF0aW9uOwotICAgICAgICAgICAg
CisgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNp
Z25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlm
aWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07CisgICAgICAgICAgICBT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07
CisgICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlw
ZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS50eXBlKCk7CisKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlOworICAgICAgICAgICAgdWludHB0cl90IG9wZXJhbmQ7CiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICghcHV0VG9CYXNlLT5tX3JlYWR5KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldCh2YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9wdXRfdG9fYmFzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5nZXQoKTsK
KyAgICAgICAgICAgICAgICBvcGVyYW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAocHV0VG9CYXNlLT5tX2lzRHluYW1pYykgewotICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBnZXQoYmFzZSksIGdldCh2YWx1ZSkp
OwotICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF90b19iYXNlKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChwdXRUb0Jhc2UtPm1fa2luZCkgewotICAgICAg
ICAgICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlVuaW5pdGlhbGlzZWQ6Ci0gICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgZ2V0KGJhc2UpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGdldCh2YWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCk7CiAKLSAgICAgICAgICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9u
OjpHbG9iYWxWYXJpYWJsZVB1dENoZWNrZWQ6IHsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwotICAgICAgICAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmdldChtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllcl0p
OwotICAgICAgICAgICAgICAgIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyQ2hlY2ssCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2Vy
dFJlZ2lzdGVySXNJblRoaXNPYmplY3QocHV0VG9CYXNlLT5tX3JlZ2lzdGVyQWRkcmVzcykpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhpZGVudGlmaWVyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQodmFsdWUpKTsKKyAgICAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAg
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAg
ICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigqbV92bSwgc3RydWN0dXJlLCB1aWQpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
dGFrZXNTbG93UGF0aCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNldChkc3QsIGFkZFRvR3Jh
cGgoR2V0QnlJZEZsdXNoLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgZ2V0KHNjb3BlKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFB1dFRvQmFzZU9wZXJh
dGlvbjo6R2xvYmFsVmFyaWFibGVQdXQ6Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRH
bG9iYWxWYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hc3NlcnRSZWdpc3RlcklzSW5UaGlz
T2JqZWN0KHB1dFRvQmFzZS0+bV9yZWdpc3RlckFkZHJlc3MpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldCh2YWx1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7Ci0gICAgICAgICAgICAg
ICAgTm9kZSogc2NvcGUgPSBnZXQoYmFzZSk7Ci0gICAgICAgICAgICAgICAgTm9kZSogc2NvcGVS
ZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdldFNjb3BlUmVnaXN0ZXJzLCBzY29wZSk7Ci0gICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRTY29wZWRWYXIsIE9wSW5mbyhwdXRUb0Jhc2UtPm1fb2Zm
c2V0KSwgc2NvcGUsIHNjb3BlUmVnaXN0ZXJzLCBnZXQodmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVj
dCwgc3RhdHVzLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gc3RhdHVzLnNwZWNpZmljVmFsdWUo
KSkKKyAgICAgICAgICAgICAgICAgICAgc2V0KGRzdCwgY2VsbENvbnN0YW50KHNwZWNpZmljVmFs
dWUuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNldChkc3QsIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJO
dW1iZXIsIG9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxQcm9wZXJ0eVB1dDog
ewotICAgICAgICAgICAgICAgIGlmICghcHV0VG9CYXNlLT5tX3N0cnVjdHVyZSkgewotICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBnZXQodmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcHV0X3RvX2Jhc2UpOworICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6Cisg
ICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLT5nZXQodWlkKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LmNvdWxkQmVXYXRj
aGVkKCkgfHwgIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoZW50cnkud2F0Y2hw
b2ludFNldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBzZXQoZHN0LCBhZGRUb0dyYXBoKEdl
dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IE5vZGUqIGJhc2VOb2RlID0gZ2V0KGJhc2UpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwdXRUb0Jhc2Ut
Pm1fc3RydWN0dXJlLmdldCgpKSksIGJhc2VOb2RlKTsKLSAgICAgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eVN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dFRv
QmFzZS0+bV9vZmZzZXQpKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBi
YXNlTm9kZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlTm9kZSk7Ci0gICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5zaXplKCkpLCBwcm9wZXJ0eVN0b3JhZ2UsIGJhc2VOb2RlLCBnZXQodmFsdWUp
KTsKIAotICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRh
OwotICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IGluZGV4UmVsYXRp
dmVUb0Jhc2UocHV0VG9CYXNlLT5tX29mZnNldCk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFj
Y2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXI7Ci0gICAgICAgICAgICAgICAg
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7Cisg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHbG9iYWxWYXJXYXRjaHBvaW50LCBPcEluZm8ob3Bl
cmFuZCksIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSk7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBzcGVjaWZpY1ZhbHVlID0gZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpOworICAgICAgICAgICAgICAgIHNldChkc3QsIGNlbGxDb25zdGFudChzcGVjaWZp
Y1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6UmVhZG9ubHk6Ci0gICAgICAg
ICAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6R2VuZXJpYzoKLSAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgZ2V0KGJhc2UpLCBnZXQodmFs
dWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF90b19i
YXNlKTsKKyAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAgICAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICAgICAgc2V0KGRzdCwg
CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3VyZVZhciwgT3BJbmZvKG9w
ZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAorICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBnZXQoc2NvcGUpKSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEeW5hbWljOgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZnJvbV9zY29wZSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWw6Ci0gICAg
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX2dsb2JhbF9keW5hbWljOgotICAgICAgICBjYXNl
IG9wX3Jlc29sdmVfYmFzZV90b19zY29wZToKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2Vf
dG9fc2NvcGVfd2l0aF90b3Bfc2NvcGVfY2hlY2s6Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9i
YXNlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZF07Ci0gICAgICAgICAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LnJlc29sdmVPcGVyYXRpb25zOwotICAgICAgICAgICAg
UHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5wdXRUb0Jhc2VPcGVyYXRpb247CisgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3Bl
OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZF07CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IFJlc29s
dmVNb2RlQW5kVHlwZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS50eXBlKCk7Cisg
ICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRp
Zmllck51bWJlcl07CiAKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSAwOwotICAgICAgICAgICAg
aWYgKHBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMocHJlZGljdGlvbiwgaWRlbnRpZmllciwgb3BlcmF0
aW9ucywgMCwgJmJhc2UsIDApKSB7Ci0gICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGJhc2UpOwotICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Jlc29sdmVfYmFzZSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBvcGVyYW5kOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICAgICAgb3BlcmFuZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVy
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgTm9kZSogcmVzb2x2ZSA9IGFkZFRvR3Jh
cGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0
IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhtX2dyYXBoLm1fcmVzb2x2ZU9wZXJhdGlvbnNEYXRhLnNp
emUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fcmVzb2x2
ZU9wZXJhdGlvbnNEYXRhLmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uRGF0YSgpKTsKLSAgICAgICAg
ICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9ncmFwaC5tX3Jlc29sdmVPcGVyYXRp
b25zRGF0YS5sYXN0KCk7Ci0gICAgICAgICAgICBkYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVu
dGlmaWVyOwotICAgICAgICAgICAgZGF0YS5yZXNvbHZlT3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7
Ci0gICAgICAgICAgICBkYXRhLnB1dFRvQmFzZU9wZXJhdGlvbiA9IHB1dFRvQmFzZU9wZXJhdGlv
bjsKLSAgICAgICAgCi0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgcmVzb2x2ZSk7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogCi0gICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlX2Jhc2UpOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfcmVzb2x2ZV93aXRoX2Jhc2U6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBiYXNl
RHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHZhbHVlRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJS
ZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIFJlc29s
dmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUucmVzb2x2
ZU9wZXJhdGlvbnM7Ci0gICAgICAgICAgICBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9w
ZXJhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnB1dFRvQmFzZU9wZXJhdGlvbjsKLQot
ICAgICAgICAgICAgTm9kZSogYmFzZSA9IDA7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IDA7
Ci0gICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVkaWN0aW9uLCBpZGVu
dGlmaWVyLCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb24sICZiYXNlLCAmdmFsdWUpKQot
ICAgICAgICAgICAgICAgIHNldFBhaXIoYmFzZURzdCwgYmFzZSwgdmFsdWVEc3QsIHZhbHVlKTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JF
eGl0KTsKLSAgICAgICAgICAgICAgICBzZXRQYWlyKGJhc2VEc3QsIGFkZFRvR3JhcGgoR2FyYmFn
ZVZhbHVlKSwgdmFsdWVEc3QsIGFkZFRvR3JhcGgoR2FyYmFnZVZhbHVlKSk7CisgICAgICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgorICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKKyAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoKm1fdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgeworICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVy
KSwgZ2V0KHNjb3BlKSwgZ2V0KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0
YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzLm9sZFN0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdldCh2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBORVhU
X09QQ09ERShvcF9yZXNvbHZlX3dpdGhfYmFzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9yZXNvbHZlX3dpdGhfdGhpczogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJhc2VEc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWVEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgUmVzb2x2ZU9wZXJh
dGlvbnMqIG9wZXJhdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5yZXNvbHZlT3BlcmF0
aW9uczsKLQotICAgICAgICAgICAgTm9kZSogYmFzZSA9IDA7Ci0gICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAocGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhwcmVkaWN0
aW9uLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLCAwLCAmYmFzZSwgJnZhbHVlKSkKLSAgICAgICAg
ICAgICAgICBzZXRQYWlyKGJhc2VEc3QsIGJhc2UsIHZhbHVlRHN0LCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0g
ICAgICAgICAgICAgICAgc2V0UGFpcihiYXNlRHN0LCBhZGRUb0dyYXBoKEdhcmJhZ2VWYWx1ZSks
IHZhbHVlRHN0LCBhZGRUb0dyYXBoKEdhcmJhZ2VWYWx1ZSkpOworICAgICAgICAgICAgY2FzZSBH
bG9iYWxWYXI6CisgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWVu
dHJ5LmNvdWxkQmVXYXRjaGVkKCkgfHwgIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFs
aWQoZW50cnkud2F0Y2hwb2ludFNldCgpKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgZ2V0KHZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jl
c29sdmVfd2l0aF90aGlzKTsKKyAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAgICAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoc2NvcGUpOworICAgICAgICAgICAgICAgIE5vZGUq
IHNjb3BlUmVnaXN0ZXJzID0gYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBzY29wZU5v
ZGUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xvc3VyZVZhciwgT3BJbmZvKG9w
ZXJhbmQpLCBzY29wZU5vZGUsIHNjb3BlUmVnaXN0ZXJzLCBnZXQodmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRHluYW1pYzoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cHV0X3RvX3Njb3BlKTsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfbG9vcF9oaW50OiB7
CiAgICAgICAgICAgICAvLyBCYXNlbGluZS0+REZHIE9TUiBqdW1wcyBiZXR3ZWVuIGxvb3AgaGlu
dHMuIFRoZSBERkcgYXNzdW1lcyB0aGF0IEJhc2VsaW5lLT5ERkcKICAgICAgICAgICAgIC8vIE9T
UiBjYW4gb25seSBoYXBwZW4gYXQgYmFzaWMgYmxvY2sgYm91bmRhcmllcy4gQXNzZXJ0IHRoYXQg
dGhlc2UgdHdvIHN0YXRlbWVudHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDEyICsyNDgsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CiAgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0U2NvcGVk
VmFyOiB7CisgICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsKICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gcmVnaXN0ZXJzICYmIG5vZGUtPnZhck51bWJlcigpID09
IHZhck51bWJlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IAotICAgICAgICAgICAgY2FzZSBQdXRTY29wZWRW
YXI6IHsKKyAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewogICAgICAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDIoKSA9PSByZWdpc3RlcnMgJiYgbm9kZS0+dmFyTnVtYmVyKCkgPT0g
dmFyTnVtYmVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQzKCkubm9k
ZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjk1LDYgKzI5NSwxOCBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBib29sIHZh
ckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigpCisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFZhckluamVjdGlvbldhdGNocG9pbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAg
CiAgICAgTm9kZSogZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CkBAIC0zMDIsNyArMzE0LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CiAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFy
OgotICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMyNiwx
MyArMzM3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBj
YXNlIFB1dFNjb3BlZFZhcjogeworICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IHNjb3BlICYmIG5vZGUtPmNoaWxk
MigpID09IHJlZ2lzdGVycyAmJiBub2RlLT52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRTY29wZWRW
YXI6IHsKKyAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewogICAgICAgICAgICAgICAg
IC8vIExldCdzIGJlIGNvbnNlcnZhdGl2ZS4KICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFy
TnVtYmVyKCkgPT0gdmFyTnVtYmVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAg
LTg1MCw3ICs4NjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUHV0U2NvcGVk
VmFyOgorICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2Nh
bCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC05MDIsNyArOTEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBH
ZXRTY29wZWRWYXI6CisgICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkp
ID09IGxvY2FsKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDc2LDcgKzEwODcsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgICAgIGNhc2UgU2tpcFRvcFNjb3BlOgog
ICAgICAgICBjYXNlIFNraXBTY29wZToKLSAgICAgICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczoK
KyAgICAgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgogICAgICAgICBjYXNlIEdldFNjb3Bl
OgogICAgICAgICBjYXNlIFR5cGVPZjoKICAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoK
QEAgLTEyMzMsNyArMTI0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVu
dChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgR2V0U2NvcGVkVmFyOiB7CisgICAgICAg
IGNhc2UgR2V0Q2xvc3VyZVZhcjogewogICAgICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVF
bGltaW5hdGlvbikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5v
ZGUtPnZhck51bWJlcigpKSk7CkBAIC0xMjQ3LDE0ICsxMjU4LDIwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6CisgICAgICAgICAgICBpZiAo
Y3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKHZhckluamVjdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbigpKQorICAgICAg
ICAgICAgICAgIGVsaW1pbmF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyQ2hl
Y2s6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3JtYWxDU0UpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlv
bihub2RlLT5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKKyAgICAgICAgY2FzZSBQdXRDbG9z
dXJlVmFyOiB7CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3JtYWxDU0UpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlbGltaW5hdGUoc2NvcGVkVmFyU3RvcmVFbGlt
aW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgbm9k
ZS0+dmFyTnVtYmVyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNDEgKzc1
LDYgQEAgaW5saW5lIHZvaWQgZGVidWdGYWlsKENvZGVCbG9jayogY29kZUJsbwogICAgICAgICBk
YXRhTG9nKCJDYW5ub3QgY29tcGlsZSBjb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgYmVjYXVz
ZSBvZiBvcGNvZGUgIiwgb3Bjb2RlTmFtZXNbb3Bjb2RlSURdLCAiXG4iKTsKIH0KIAotLy8gT3Bj
b2RlIGNoZWNraW5nLgotaW5saW5lIGJvb2wgY2FuSW5saW5lUmVzb2x2ZU9wZXJhdGlvbnMoUmVz
b2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG9wZXJhdGlvbnMtPnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIHN3aXRjaCAob3BlcmF0aW9u
cy0+ZGF0YSgpW2ldLm1fb3BlcmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlv
bjo6UmV0dXJuR2xvYmFsT2JqZWN0QXNCYXNlOgotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRp
b246OlNldEJhc2VUb0dsb2JhbDoKLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpTZXRC
YXNlVG9VbmRlZmluZWQ6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0
dXJuR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5k
UmV0dXJuR2xvYmFsVmFyOgotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJl
dHVybkdsb2JhbFZhcldhdGNoYWJsZToKLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpT
a2lwU2NvcGVzOgotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNldEJhc2VUb1Njb3Bl
OgotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlJldHVyblNjb3BlQXNCYXNlOgotICAg
ICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVyblNjb3BlZFZhcjoKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6RmFpbDoK
LSAgICAgICAgICAgIC8vIEZhbGwtYmFjayByZXNvbHZlcyBkb24ndCBrbm93IGhvdyB0byBkZWFs
IHdpdGggdGhlIEV4ZWNTdGF0ZSogaGF2aW5nIGEgZGlmZmVyZW50Ci0gICAgICAgICAgICAvLyBn
bG9iYWwgb2JqZWN0IChhbmQgc2NvcGUpIHRoYW4gdGhlIGlubGluZWQgY29kZSB0aGF0IGlzIGlu
dm9raW5nIHRoYXQgcmVzb2x2ZS4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNraXBUb3BTY29wZU5vZGU6Ci0gICAgICAgICAgICAv
LyBXZSBkb24ndCBpbmxpbmUgY29kZSBibG9ja3MgdGhhdCBjcmVhdGUgYWN0aXZhdGlvbnMuIENy
ZWF0aW9uIG9mCi0gICAgICAgICAgICAvLyBhY3RpdmF0aW9ucyBpcyB0aGUgb25seSB0aGluZyB0
aGF0IGxlYWRzIHRvIFNraXBUb3BTY29wZU5vZGUuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpDaGVja0ZvckR5bmFtaWNFbnRyaWVz
QmVmb3JlR2xvYmFsU2NvcGU6Ci0gICAgICAgICAgICAvLyBUaGlzIHdvdWxkIGJlIGVhc3kgdG8g
c3VwcG9ydCBpbiBhbGwgY2FzZXMuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVj
dGlvbiogcGMpCiB7CiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewpAQCAtMTY3LDcgKzEzMiw2IEBA
IENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3B1
dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZToKICAgICBjYXNlIG9wX2luaXRf
Z2xvYmFsX2NvbnN0X25vcDoKICAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OgotICAgIGNh
c2Ugb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2s6CiAgICAgY2FzZSBvcF9qbXA6CiAgICAgY2Fz
ZSBvcF9qdHJ1ZToKICAgICBjYXNlIG9wX2pmYWxzZToKQEAgLTIwMCw0NCArMTY0LDI1IEBAIENh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2dldF9h
cmd1bWVudF9ieV92YWw6CiAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKICAgICBj
YXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3BfcHV0X3RvX2Jhc2VfdmFyaWFibGU6Ci0gICAg
Y2FzZSBvcF9wdXRfdG9fYmFzZToKICAgICBjYXNlIG9wX3R5cGVvZjoKICAgICBjYXNlIG9wX3Rv
X251bWJlcjoKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKKworICAgIGNhc2Ug
b3BfcmVzb2x2ZV9zY29wZTogeworICAgICAgICAvLyBXZSBkb24ndCBjb21waWxlICdjYXRjaCcg
b3IgJ3dpdGgnLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluIGNvbXBpbGluZyB2YXJpYWJsZSByZXNv
bHV0aW9uIHdpdGhpbiB0aGVtLgorICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IHN0
YXRpY19jYXN0PFJlc29sdmVUeXBlPihwY1szXS51Lm9wZXJhbmQpOworICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gRHluYW1pYykKKyAgICAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwog
ICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKLSAgICAgICAgCisgICAgfQorCiAg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgICAgIGlmIChjb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSAmJiBwY1s0XS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3Rl
cigpKQogICAgICAgICAgICAgcmV0dXJuIENhbklubGluZTsKICAgICAgICAgcmV0dXJuIENhbm5v
dENvbXBpbGU7CiAKLSAgICBjYXNlIG9wX3Jlc29sdmU6Ci0gICAgY2FzZSBvcF9yZXNvbHZlX2ds
b2JhbF9wcm9wZXJ0eToKLSAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsX3ZhcjoKLSAgICBjYXNl
IG9wX3Jlc29sdmVfc2NvcGVkX3ZhcjoKLSAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGVkX3Zhcl9v
bl90b3Bfc2NvcGU6Ci0gICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92YXJfd2l0aF90b3Bfc2Nv
cGVfY2hlY2s6Ci0gICAgICAgIGlmIChjYW5JbmxpbmVSZXNvbHZlT3BlcmF0aW9ucyhwY1szXS51
LnJlc29sdmVPcGVyYXRpb25zKSkKLSAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5s
aW5lOwotICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZTsKLQotICAgIGNhc2Ugb3BfZ2V0X3Njb3Bl
ZF92YXI6Ci0gICAgY2FzZSBvcF9wdXRfc2NvcGVkX3ZhcjoKLSAgICAgICAgaWYgKCFjb2RlQmxv
Y2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKLSAgICAgICAgICAgIHJldHVybiBDYW5Db21waWxl
QW5kSW5saW5lOwotICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZTsKLQotICAgIGNhc2Ugb3BfcmVz
b2x2ZV9iYXNlX3RvX2dsb2JhbDoKLSAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19nbG9iYWxf
ZHluYW1pYzoKLSAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19zY29wZToKLSAgICBjYXNlIG9w
X3Jlc29sdmVfYmFzZV90b19zY29wZV93aXRoX3RvcF9zY29wZV9jaGVjazoKLSAgICBjYXNlIG9w
X3Jlc29sdmVfYmFzZToKLSAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF9iYXNlOgotICAgIGNhc2Ug
b3BfcmVzb2x2ZV93aXRoX3RoaXM6Ci0gICAgICAgIGlmIChjYW5JbmxpbmVSZXNvbHZlT3BlcmF0
aW9ucyhwY1s0XS51LnJlc29sdmVPcGVyYXRpb25zKSkKLSAgICAgICAgICAgIHJldHVybiBDYW5D
b21waWxlQW5kSW5saW5lOwotICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZTsKLQogICAgIGNhc2Ug
b3BfbmV3X3JlZ2V4cDogCiAgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjoKICAgICBjYXNl
IG9wX3RlYXJfb2ZmX2FjdGl2YXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsy
NiwxMyBAQAogI2lmbmRlZiBERkdDYXBhYmlsaXRpZXNfaAogI2RlZmluZSBERkdDYXBhYmlsaXRp
ZXNfaAogCi0jaW5jbHVkZSAiSW50cmluc2ljLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkV4
ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIu
aCIKKyNpbmNsdWRlICJJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTUxMzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOCArNDYsOCBAQCBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSos
CiBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENv
ZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiBDb21waWxhdGlvblJl
c3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRyPEpTQzo6SklUQ29k
ZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAjZWxz
ZQotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0K
LWlubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwg
Q29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
LCB1bnNpZ25lZCkgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBDb21waWxhdGlvblJlc3VsdCB0
cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+Jiwg
dW5zaWduZWQpIHsgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOyB9CitpbmxpbmUgQ29tcGlsYXRp
b25SZXN1bHQgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0
cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgdW5zaWduZWQpIHsgcmV0
dXJuIENvbXBpbGF0aW9uRmFpbGVkOyB9CiBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgdHJ5Rmlu
YWxpemVQbGFuKFBhc3NSZWZQdHI8UGxhbj4sIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKikKIHsKICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNp
b24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjk4LDggKzY5OCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0U2NvcGVS
ZWdpc3RlcnM6Ci0gICAgICAgIGNhc2UgUHV0U2NvcGVkVmFyOgorICAgICAgICBjYXNlIEdldENs
b3N1cmVSZWdpc3RlcnM6CisgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgIGNhc2UgU2tpcFNjb3BlOgogICAgICAgICBjYXNlIFNl
dENhbGxlZToKQEAgLTg2NiwyMSArODY2LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0
TG9jYWxVbmxpbmtlZDoKICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDoKICAgICAgICAgY2FzZSBH
ZXRNeVNjb3BlOgotICAgICAgICBjYXNlIEdldFNjb3BlZFZhcjoKKyAgICAgICAgY2FzZSBHZXRD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRH
bG9iYWxWYXI6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKLSAgICAgICAgY2Fz
ZSBQdXRHbG9iYWxWYXJDaGVjazoKKyAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50
OgogICAgICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKICAgICAgICAgY2Fz
ZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6
CiAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CiAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgot
ICAgICAgICBjYXNlIFJlc29sdmU6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZUJhc2U6Ci0gICAgICAg
IGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoK
ICAgICAgICAgY2FzZSBCcmVha3BvaW50OgogICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAg
ICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTkwMyw3ICs4OTksNiBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1Jl
ZmVyZW5jZUVycm9yOgotICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKICAgICAgICAgY2FzZSBD
b3VudEV4ZWN1dGlvbjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgICAgIGNhc2Ug
Rm9yd2FyZEZvcmNlT1NSRXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtNTksMjMgKzU5LDYgQEAgc3RydWN0IFN0b3JhZ2VBY2Nl
c3NEYXRhIHsKICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwogfTsKIAotc3RydWN0IFJl
c29sdmVHbG9iYWxEYXRhIHsKLSAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOwotICAgIFJl
c29sdmVPcGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9uczsKLSAgICBQdXRUb0Jhc2VPcGVyYXRp
b24qIHB1dFRvQmFzZU9wZXJhdGlvbjsKLSAgICB1bnNpZ25lZCByZXNvbHZlUHJvcGVydHlJbmRl
eDsKLX07Ci0KLXN0cnVjdCBSZXNvbHZlT3BlcmF0aW9uRGF0YSB7Ci0gICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlcjsKLSAgICBSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJhdGlvbnM7
Ci0gICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb247Ci19OwotCi1zdHJ1
Y3QgUHV0VG9CYXNlT3BlcmF0aW9uRGF0YSB7Ci0gICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRU
b0Jhc2VPcGVyYXRpb247Ci19OwotCiBlbnVtIEFkZFNwZWN1bGF0aW9uTW9kZSB7CiAgICAgRG9u
dFNwZWN1bGF0ZUludGVnZXIsCiAgICAgU3BlY3VsYXRlSW50ZWdlckFuZFRydW5jYXRlQ29uc3Rh
bnRzLApAQCAtNzEwLDkgKzY5Myw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8IE93blB0cjxCYXNp
Y0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGls
ZHJlbjsKICAgICBWZWN0b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7
Ci0gICAgVmVjdG9yPFJlc29sdmVHbG9iYWxEYXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOwotICAg
IFZlY3RvcjxSZXNvbHZlT3BlcmF0aW9uRGF0YT4gbV9yZXNvbHZlT3BlcmF0aW9uc0RhdGE7Ci0g
ICAgVmVjdG9yPFB1dFRvQmFzZU9wZXJhdGlvbkRhdGE+IG1fcHV0VG9CYXNlT3BlcmF0aW9uRGF0
YTsKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwogICAgIFNlZ21lbnRlZFZlY3Rv
cjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICBTZWdt
ZW50ZWRWZWN0b3I8QXJndW1lbnRQb3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9uczsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTUx
MzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkRGR0pJVENvZGUuaCIKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIEpJVENvZGU6OkpJVENvZGUoKQpAQCAtNTksMyArNjEsNCBAQCB2
b2lkIEpJVENvZGU6OnNocmlua1RvRml0KCkKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMiw2ICszMTIsOCBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgdm9pZCBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IENoZWNrU3RydWN0
dXJlIHx8IG1fb3AgPT0gRm9yd2FyZENoZWNrU3RydWN0dXJlIHx8IG1fb3AgPT0gQXJyYXlpZnlU
b1N0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghY2hpbGQyKCkpOworICAgICAgICBBU1NFUlQo
IWNoaWxkMygpKTsKICAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihz
dHJ1Y3R1cmUpOwogICAgICAgICBpZiAobV9vcCA9PSBDaGVja1N0cnVjdHVyZSB8fCBtX29wID09
IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpCiAgICAgICAgICAgICBtX29wID0gU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ7CkBAIC00ODQsMTggKzQ4Niw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCByZXNvbHZlR2xv
YmFsRGF0YUluZGV4KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IFJlc29sdmVHbG9i
YWwpOwotICAgICAgICByZXR1cm4gbV9vcEluZm87Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcmVz
b2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkgPT0g
UmVzb2x2ZSB8fCBvcCgpID09IFJlc29sdmVCYXNlIHx8IG9wKCkgPT0gUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQpOwotICAgICAgICByZXR1cm4gbV9vcEluZm87Ci0gICAgfQotCiAgICAgYm9vbCBoYXNB
cml0aE5vZGVGbGFncygpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKQEAgLTU5OCw3
ICs1ODgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNWYXJOdW1iZXIoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0U2NvcGVkVmFyIHx8IG9wKCkgPT0gUHV0
U2NvcGVkVmFyOworICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRDbG9zdXJlVmFyIHx8IG9wKCkg
PT0gUHV0Q2xvc3VyZVZhcjsKICAgICB9CiAKICAgICB1bnNpZ25lZCB2YXJOdW1iZXIoKQpAQCAt
NjA5LDcgKzU5OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc0lkZW50aWZp
ZXJOdW1iZXJGb3JDaGVjaygpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHbG9iYWxW
YXJXYXRjaHBvaW50IHx8IG9wKCkgPT0gUHV0R2xvYmFsVmFyQ2hlY2s7CisgICAgICAgIHJldHVy
biBvcCgpID09IEdsb2JhbFZhcldhdGNocG9pbnQ7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXJGb3JDaGVjaygpCkBAIC02MjAsNyArNjEwLDcgQEAgc3RydWN0IE5v
ZGUgewogICAgIAogICAgIGJvb2wgaGFzUmVnaXN0ZXJQb2ludGVyKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8fCBvcCgpID09IFB1dEdsb2JhbFZhciB8fCBv
cCgpID09IEdsb2JhbFZhcldhdGNocG9pbnQgfHwgb3AoKSA9PSBQdXRHbG9iYWxWYXJDaGVjazsK
KyAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFsVmFyIHx8IG9wKCkgPT0gUHV0R2xvYmFs
VmFyIHx8IG9wKCkgPT0gR2xvYmFsVmFyV2F0Y2hwb2ludDsKICAgICB9CiAgICAgCiAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIoKQpAQCAtNzYwLDExICs3NTAsNyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGVkVmFy
OgotICAgICAgICBjYXNlIFJlc29sdmU6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZUJhc2U6Ci0gICAg
ICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6Ci0gICAgICAgIGNhc2UgUmVzb2x2ZUdsb2Jh
bDoKKyAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEFycmF5UG9wOgog
ICAgICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUxMzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjEsMTMgKzE2MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oU2V0TXlTY29wZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFNraXBU
b3BTY29wZSwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU2tpcFNjb3BlLCBOb2RlUmVzdWx0
SlMpIFwKLSAgICBtYWNybyhHZXRTY29wZVJlZ2lzdGVycywgTm9kZVJlc3VsdFN0b3JhZ2UpIFwK
LSAgICBtYWNybyhHZXRTY29wZWRWYXIsIE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFB1dFNj
b3BlZFZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEdldENsb3N1cmVSZWdpc3Rl
cnMsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCisgICAgbWFjcm8oR2V0Q2xvc3VyZVZhciwgTm9kZVJl
c3VsdEpTKSBcCisgICAgbWFjcm8oUHV0Q2xvc3VyZVZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIG1hY3JvKEdldEdsb2JhbFZhciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUHV0R2xv
YmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2xvYmFsVmFyV2F0Y2hwb2lu
dCwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEdsb2JhbFZhckNoZWNrLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFySW5qZWN0aW9uV2F0Y2hwb2ludCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENoZWNrRnVuY3Rpb24sIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBcCkBAIC0yMDQsMTIgKzIwNCw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhOZXdBcnJheUJ1ZmZlciwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oTmV3UmVnZXhwLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCi0gICAgLyogUmVzb2x2ZSBu
b2Rlcy4gKi9cCi0gICAgbWFjcm8oUmVzb2x2ZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oUmVzb2x2ZUJhc2UsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAotICAgIG1h
Y3JvKFJlc29sdmVCYXNlU3RyaWN0UHV0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKLSAgICBtYWNybyhSZXNvbHZlR2xvYmFsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKLSAgICBcCiAg
ICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQnJlYWtwb2lu
dCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hl
Y2tIYXNJbnN0YW5jZSwgTm9kZU11c3RHZW5lcmF0ZSkgXApAQCAtMjU2LDggKzI1MCw2IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhUaHJvdywgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKFRocm93UmVmZXJlbmNlRXJyb3IsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBcCi0gICAgbWFjcm8oR2FyYmFnZVZhbHVlLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAotICAgIFwKICAgICAvKiBDb3VudCBleGVjdXRpb24uICovXAogICAg
IG1hY3JvKENvdW50RXhlY3V0aW9uLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAx
NTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjE4LDQ3ICsxMjE4LDYgQEAgY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25WaXJ0dWFsQ29ucwogICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENv
ZGVGb3JDb25zdHJ1Y3QpOwogfQogCi12b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5
R2xvYmFsVmFyV3JpdGUoV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKLXsKLSAgICB3YXRj
aHBvaW50U2V0LT5ub3RpZnlXcml0ZSgpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblJlc29sdmUoRXhlY1N0YXRlKiBleGVjLCBTdHJpbmdJbXBsKiB1aWQsIFJl
c29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIElkZW50
aWZpZXIgaWRlbnQodm0sIHVpZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3Bl
OjpyZXNvbHZlKGV4ZWMsIGlkZW50LCBvcGVyYXRpb25zKSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZUJhc2UoRXhlY1N0YXRlKiBleGVjLCBTdHJp
bmdJbXBsKiB1aWQsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVy
YXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCi17Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgSWRlbnRp
ZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6
OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50LCBmYWxzZSwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3Bl
cmF0aW9ucykpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJl
c29sdmVCYXNlU3RyaWN0UHV0KEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nSW1wbCogdWlkLCBSZXNv
bHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VP
cGVyYXRpb25zKQotewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwotICAgIElkZW50aWZpZXIgaWRlbnQodm0sIHVp
ZCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Njb3BlOjpyZXNvbHZlQmFzZShleGVj
LCBpZGVudCwgdHJ1ZSwgb3BlcmF0aW9ucywgcHV0VG9CYXNlT3BlcmF0aW9ucykpOwotfQotCi1F
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVHbG9iYWwoRXhlY1N0
YXRlKiBleGVjLCBSZXNvbHZlT3BlcmF0aW9uKiByZXNvbHZlT3BlcmF0aW9uLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJpbmdJbXBsKiB1aWQpCi17Ci0gICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0g
ICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlc29sdmVPcGVyYXRp
b24pOwotICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVChyZXNvbHZl
T3BlcmF0aW9uLT5tX29wZXJhdGlvbiA9PSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5H
bG9iYWxQcm9wZXJ0eSk7Ci0gICAgSWRlbnRpZmllciBpZGVudCh2bSwgdWlkKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVHbG9iYWwoZXhlYywgaWRlbnQsIGds
b2JhbE9iamVjdCwgcmVzb2x2ZU9wZXJhdGlvbikpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdmFsdWUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTUxMzQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDYgQEAgZXh0ZXJuICJDIiB7CiAgICAgWjogaW50MzJfdAogICAgIEQ6IGRv
dWJsZQogICAgIEk6IFN0cmluZ0ltcGwqCi0gICAgRzogR2xvYmFsUmVzb2x2ZUluZm8qCiAqLwog
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRSko
RXhlY1N0YXRlKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RG
R09wZXJhdGlvbl9FQSkoRXhlY1N0YXRlKiwgSlNBcnJheSopOwpAQCAtNjUsMTAgKzY0LDcgQEAg
dHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSgogdHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUNJKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBTdHJpbmdJbXBsKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJ
T04gKCpKX0RGR09wZXJhdGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0
aW9uX0VEQSkoRXhlY1N0YXRlKiwgZG91YmxlLCBKU0FycmF5Kik7Ci10eXBlZGVmIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FR3JpSnNnSSkoRXhlY1N0YXRl
KiwgUmVzb2x2ZU9wZXJhdGlvbiosIEpTR2xvYmFsT2JqZWN0KiwgU3RyaW5nSW1wbCopOwogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUkpKEV4
ZWNTdGF0ZSosIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJB
VElPTiAoKkpfREZHT3BlcmF0aW9uX0VJUm8pKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqLCBSZXNv
bHZlT3BlcmF0aW9ucyopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgq
Sl9ERkdPcGVyYXRpb25fRUlSb1B0Ym8pKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqLCBSZXNvbHZl
T3BlcmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUopKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3Bl
cmF0aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKIHR5cGVk
ZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKSSkoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKQEAgLTE0MCwxMSArMTM2LDYg
QEAgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwotdm9pZCBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5vdGlmeUdsb2JhbFZhcldyaXRlKFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQpIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
UmVzb2x2ZShFeGVjU3RhdGUqLCBTdHJpbmdJbXBsKiwgUmVzb2x2ZU9wZXJhdGlvbnMqKSBXVEZf
SU5URVJOQUw7Ci1FbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVC
YXNlKEV4ZWNTdGF0ZSosIFN0cmluZ0ltcGwqLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFz
ZU9wZXJhdGlvbiopIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUmVzb2x2ZUJhc2VTdHJpY3RQdXQoRXhlY1N0YXRlKiwgU3RyaW5nSW1wbCosIFJl
c29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3BlcmF0aW9uKikgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZlR2xvYmFsKEV4ZWNTdGF0
ZSosIFJlc29sdmVPcGVyYXRpb24qLCBKU0dsb2JhbE9iamVjdCosIFN0cmluZ0ltcGwqKSBXVEZf
SU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQq
LCBzaXplX3QpIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgc2l6ZV90LCBzaXplX3QpIFdURl9J
TlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTEzNDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDExICsxNzQsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYXNlIEdldEds
b2JhbFZhcjoKLSAgICAgICAgY2FzZSBHZXRTY29wZWRWYXI6Ci0gICAgICAgIGNhc2UgUmVzb2x2
ZToKLSAgICAgICAgY2FzZSBSZXNvbHZlQmFzZToKLSAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0
cmljdFB1dDoKLSAgICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOiB7CisgICAgICAgIGNhc2UgR2V0
Q2xvc3VyZVZhcjogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUt
PmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTM2MCw3ICszNTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAotICAgICAgICBjYXNlIEdldFNjb3BlUmVnaXN0ZXJzOiAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEdldENsb3N1cmVSZWdpc3RlcnM6ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnV0
dGVyZmx5OiAKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgpAQCAtNDk3LDcgKzQ5Myw3IEBAIHByaXZh
dGU6CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNl
IHRoZXkgZG9uJ3QgcmV0dXJuIGFueXRoaW5nLgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAg
ICAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBQdXRC
eUlkOgpAQCAtNTI0LDExICs1MjAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUZWFyT2Zm
QXJndW1lbnRzOgogICAgICAgICBjYXNlIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZDoKICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgotICAgICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToK
KyAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIEFsbG9j
YXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICBj
YXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJDaGVjazoKICAgICAg
ICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9u
IDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw4ICs1OSw4IEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbzsKIAog
bmFtZXNwYWNlIERGRyB7CiAKLWlubGluZSBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIGRm
Z1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLWlubGluZSBOT19SRVRVUk5fRFVFX1RPX0FTU0VS
VCB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8m
KSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KK2lubGluZSBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVT
dHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQoraW5saW5lIE5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0
cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTEzNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODAyLDcgKzM4MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0g
ICAgY2FzZSBHZXRTY29wZVJlZ2lzdGVyczogeworICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVy
czogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJl
ZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwpAQCAtMzgxMiw3ICszODEyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBzdG9yYWdlUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldFNjb3Bl
ZFZhcjogeworICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewogICAgICAgICBTdG9yYWdlT3BlcmFu
ZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0VGFnKHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlz
KTsKQEAgLTM4MjQsNyArMzgyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxv
YWRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBQdXRTY29wZWRW
YXI6IHsKKyAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFu
ZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBAIC00MTgzLDM3ICs0MTgzLDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNrOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIFdhdGNo
cG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPQotICAgICAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJsZSgpLT5nZXQoCi0gICAgICAgICAgICAg
ICAgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVyTnVtYmVyRm9yQ2hlY2soKSkpLndhdGNo
cG9pbnRTZXQoKTsKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBz
bG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCi0gICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHdhdGNocG9pbnRTZXQtPmFkZHJlc3NPZklzV2F0
Y2hlZCgpKSksCi0gICAgICAgICAgICAgICAgdGhpcywgb3BlcmF0aW9uTm90aWZ5R2xvYmFsVmFy
V3JpdGUsIE5vUmVzdWx0LCB3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS50YWdHUFIoKSwgbm9kZS0+Y2hp
bGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXBwZW4gdG8gaGF2ZSBhIHNwYXJlIHJl
Z2lzdGVyIC0gYW5kIF9PTkxZXyBpZiB3ZSBoYXBwZW4gdG8gaGF2ZQotICAgICAgICAvLyBhIHNw
YXJlIHJlZ2lzdGVyIC0gYSBnb29kIG9wdGltaXphdGlvbiB3b3VsZCBiZSB0byBwdXQgdGhlIHJl
Z2lzdGVyIHBvaW50ZXIgaW50bwotICAgICAgICAvLyBhIHJlZ2lzdGVyIGFuZCB0aGVuIGRvIGEg
emVybyBvZmZzZXQgc3RvcmUgZm9sbG93ZWQgYnkgYSBmb3VyLW9mZnNldCBzdG9yZSAob3IKLSAg
ICAgICAgLy8gdmljZS12ZXJzYSBkZXBlbmRpbmcgb24gZW5kaWFubmVzcykuCi0gICAgICAgIG1f
aml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpLT50YWdQ
b2ludGVyKCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgbm9k
ZS0+cmVnaXN0ZXJQb2ludGVyKCktPnBheWxvYWRQb2ludGVyKCkpOwotCi0gICAgICAgIG5vUmVz
dWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgR2xv
YmFsVmFyV2F0Y2hwb2ludDogewogICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKICAg
ICAgICAgICAgIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkp
KS53YXRjaHBvaW50U2V0KCk7CkBAIC00MjM5LDYgKzQyMDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0
ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT52YXJJbmplY3Rpb25X
YXRjaHBvaW50KCk7CisgICAgICAgIG1faml0LmFkZExhemlseShzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CkBAIC00NDMyLDgwICs0NDA5LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFJlc29sdmU6IHsKLSAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAg
ICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICBSZXNvbHZlT3BlcmF0aW9u
RGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZlT3BlcmF0aW9uc0RhdGFbbm9kZS0+
cmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUmVzb2x2ZSwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBpZGVu
dGlmaWVyVUlEKGRhdGEuaWRlbnRpZmllck51bWJlciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMp
OwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5n
cHIoKSwgbm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgUmVzb2x2ZUJh
c2U6IHsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgR1BSUmVzdWx0IHJlc3Vs
dFBheWxvYWQodGhpcyk7Ci0gICAgICAgIEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwotICAg
ICAgICBSZXNvbHZlT3BlcmF0aW9uRGF0YSYgZGF0YSA9IG1faml0LmdyYXBoKCkubV9yZXNvbHZl
T3BlcmF0aW9uc0RhdGFbbm9kZS0+cmVzb2x2ZU9wZXJhdGlvbnNEYXRhSW5kZXgoKV07Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZUJhc2UsIHJlc3VsdFRhZy5ncHIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSwgaWRlbnRpZmllclVJRChkYXRhLmlkZW50aWZpZXJOdW1iZXIp
LCBkYXRhLnJlc29sdmVPcGVyYXRpb25zLCBkYXRhLnB1dFRvQmFzZU9wZXJhdGlvbik7Ci0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBu
b2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBSZXNvbHZlQmFzZVN0cmlj
dFB1dDogewotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJSZXN1bHQgcmVz
dWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgR1BSUmVzdWx0MiByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29s
dmVPcGVyYXRpb25zRGF0YVtub2RlLT5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dCwgcmVzdWx0
VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBpZGVudGlmaWVyVUlEKGRhdGEuaWRlbnRp
Zmllck51bWJlciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0VG9CYXNlT3BlcmF0
aW9uKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxv
YWQuZ3ByKCksIG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFJlc29s
dmVHbG9iYWw6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0aGlzKTsKLSAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc29sdmVJbmZvKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0
aGlzKTsKLQotICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0R1BSID0gZ2xvYmFsT2JqZWN0Lmdw
cigpOwotICAgICAgICBHUFJSZWcgcmVzb2x2ZUluZm9HUFIgPSByZXNvbHZlSW5mby5ncHIoKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAg
IFJlc29sdmVHbG9iYWxEYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29sdmVHbG9iYWxE
YXRhW25vZGUtPnJlc29sdmVHbG9iYWxEYXRhSW5kZXgoKV07Ci0gICAgICAgIFJlc29sdmVPcGVy
YXRpb24qIHJlc29sdmVPcGVyYXRpb25BZGRyZXNzID0gJihkYXRhLnJlc29sdmVPcGVyYXRpb25z
LT5kYXRhKClbZGF0YS5yZXNvbHZlUHJvcGVydHlJbmRleF0pOwotCi0gICAgICAgIC8vIENoZWNr
IFN0cnVjdHVyZSBvZiBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4p
KSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1
c3RlZEltbVB0cihyZXNvbHZlT3BlcmF0aW9uQWRkcmVzcyksIHJlc29sdmVJbmZvR1BSKTsKLSAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwg
T0JKRUNUX09GRlNFVE9GKFJlc29sdmVPcGVyYXRpb24sIG1fc3RydWN0dXJlKSksIHJlc3VsdFBh
eWxvYWRHUFIpOwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZXNOb3RNYXRj
aCA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHJlc3VsdFBheWxvYWRH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIEZhc3QgY2FzZQotICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKFJlc29s
dmVPcGVyYXRpb24sIG1fb2Zmc2V0KSksIHJlc29sdmVJbmZvR1BSKTsKLSNpZiBERkdfRU5BQkxF
KEpJVF9BU1NFUlQpCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT3V0T2ZMaW5lID0gbV9q
aXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzb2x2ZUluZm9H
UFIsIFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICBtX2ppdC5i
cmVha3BvaW50KCk7Ci0gICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsoJm1faml0KTsKLSNlbmRpZgot
ICAgICAgICBtX2ppdC5uZWczMihyZXNvbHZlSW5mb0dQUik7Ci0gICAgICAgIG1faml0LnNpZ25F
eHRlbmQzMlRvUHRyKHJlc29sdmVJbmZvR1BSLCByZXNvbHZlSW5mb0dQUik7Ci0gICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6QmFzZUluZGV4KHJlc3VsdFBheWxvYWRHUFIsIHJlc29s
dmVJbmZvR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihKU1ZhbHVlKSkpLCByZXN1bHRUYWdH
UFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChyZXN1bHRQ
YXlsb2FkR1BSLCByZXNvbHZlSW5mb0dQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkgKyAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKEpT
VmFsdWUpKSksIHJlc3VsdFBheWxvYWRHUFIpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZXNOb3RNYXRjaCwgdGhpcywgb3BlcmF0aW9uUmVzb2x2ZUdsb2JhbCwKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpLCByZXNvbHZlSW5m
b0dQUiwgZ2xvYmFsT2JqZWN0R1BSLAotICAgICAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoZGF0
YS5pZGVudGlmaWVyTnVtYmVyKSkpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAg
ICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCB2YWx1ZSwgZmFsc2UpOwpAQCAtNDg5MCwxMSArNDc5Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVz
c2lvbihub2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKLSAg
ICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCB0byB0aGUgcG9pbnQgb2YgY29kZSBlbWlzc2lv
biBmb3IgYSBHYXJiYWdlVmFsdWUKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0K
ICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIEZvcndhcmRGb3JjZU9TUkV4aXQ6IHsK
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdl
LCBKU1ZhbHVlUmVncygpLCAwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcxNyw3ICszNzE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgR2V0U2Nv
cGVSZWdpc3RlcnM6IHsKKyAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6IHsKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBz
Y29wZS5ncHIoKTsKQEAgLTM3MjcsNyArMzcyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRTY29wZWRWYXI6IHsKKyAgICBj
YXNlIEdldENsb3N1cmVWYXI6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lzdGVycy5ncHIoKTsKQEAgLTM3Mzcs
NyArMzczNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgY2FzZSBQdXRTY29wZWRWYXI6IHsKKyAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsK
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CkBA
IC00MDg1LDMyICs0MDg1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIFB1dEdsb2JhbFZhckNoZWNr
OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgCi0gICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPQotICAgICAg
ICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5zeW1ib2xUYWJs
ZSgpLT5nZXQoCi0gICAgICAgICAgICAgICAgaWRlbnRpZmllclVJRChub2RlLT5pZGVudGlmaWVy
TnVtYmVyRm9yQ2hlY2soKSkpLndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDgoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJv
LAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHdhdGNo
cG9pbnRTZXQtPmFkZHJlc3NPZklzV2F0Y2hlZCgpKSksCi0gICAgICAgICAgICAgICAgdGhpcywg
b3BlcmF0aW9uTm90aWZ5R2xvYmFsVmFyV3JpdGUsIE5vUmVzdWx0LCB3YXRjaHBvaW50U2V0KSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2
YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNz
LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmU2
NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpOwotCi0gICAgICAgIG5vUmVz
dWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgR2xv
YmFsVmFyV2F0Y2hwb2ludDogewogICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnN5bWJvbFRhYmxlKCktPmdldCgKICAg
ICAgICAgICAgIGlkZW50aWZpZXJVSUQobm9kZS0+aWRlbnRpZmllck51bWJlckZvckNoZWNrKCkp
KS53YXRjaHBvaW50U2V0KCk7CkBAIC00MTMxLDYgKzQxMDUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIFZhckluamVjdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0
ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT52YXJJbmplY3Rpb25X
YXRjaHBvaW50KCk7CisgICAgICAgIG1faml0LmFkZExhemlseShzcGVjdWxhdGlvbldhdGNocG9p
bnQoKSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CkBAIC00MzI3LDczICs0MzA5LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBlbWl0Q2FsbChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFJlc29sdmU6IHsKLSAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgUmVz
b2x2ZU9wZXJhdGlvbkRhdGEmIGRhdGEgPSBtX2ppdC5ncmFwaCgpLm1fcmVzb2x2ZU9wZXJhdGlv
bnNEYXRhW25vZGUtPnJlc29sdmVPcGVyYXRpb25zRGF0YUluZGV4KCldOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmUsIHJlc3VsdC5ncHIoKSwgaWRlbnRpZmllclVJRChk
YXRhLmlkZW50aWZpZXJOdW1iZXIpLCBkYXRhLnJlc29sdmVPcGVyYXRpb25zKTsKLSAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBjYXNlIFJlc29sdmVCYXNlOiB7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIFJlc29sdmVPcGVyYXRpb25E
YXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29sdmVPcGVyYXRpb25zRGF0YVtub2RlLT5y
ZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25SZXNvbHZlQmFzZSwgcmVzdWx0LmdwcigpLCBpZGVudGlmaWVyVUlEKGRhdGEuaWRlbnRp
Zmllck51bWJlciksIGRhdGEucmVzb2x2ZU9wZXJhdGlvbnMsIGRhdGEucHV0VG9CYXNlT3BlcmF0
aW9uKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OiB7Ci0gICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIFJlc29sdmVPcGVyYXRpb25EYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3Jlc29s
dmVPcGVyYXRpb25zRGF0YVtub2RlLT5yZXNvbHZlT3BlcmF0aW9uc0RhdGFJbmRleCgpXTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlQmFzZVN0cmljdFB1dCwgcmVzdWx0
LmdwcigpLCBpZGVudGlmaWVyVUlEKGRhdGEuaWRlbnRpZmllck51bWJlciksIGRhdGEucmVzb2x2
ZU9wZXJhdGlvbnMsIGRhdGEucHV0VG9CYXNlT3BlcmF0aW9uKTsKLSAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIFJlc29sdmVHbG9iYWw6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0
aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc29sdmVJbmZvKHRoaXMpOwotICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RH
UFIgPSBnbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXNvbHZlSW5mb0dQUiA9
IHJlc29sdmVJbmZvLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotCi0gICAgICAgIFJlc29sdmVHbG9iYWxEYXRhJiBkYXRhID0gbV9qaXQuZ3JhcGgoKS5t
X3Jlc29sdmVHbG9iYWxEYXRhW25vZGUtPnJlc29sdmVHbG9iYWxEYXRhSW5kZXgoKV07Ci0gICAg
ICAgIFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVPcGVyYXRpb25BZGRyZXNzID0gJihkYXRhLnJl
c29sdmVPcGVyYXRpb25zLT5kYXRhKClbZGF0YS5yZXNvbHZlUHJvcGVydHlJbmRleF0pOwotCi0g
ICAgICAgIC8vIENoZWNrIFN0cnVjdHVyZSBvZiBnbG9iYWwgb2JqZWN0Ci0gICAgICAgIG1faml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICAgICAgbV9qaXQubW92ZShK
SVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZXNvbHZlT3BlcmF0aW9uQWRkcmVzcyksIHJlc29s
dmVJbmZvR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXNvbHZlSW5mb0dQUiwgT0JKRUNUX09GRlNFVE9GKFJlc29sdmVPcGVyYXRpb24sIG1fc3RydWN0
dXJlKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZXNE
b250TWF0Y2ggPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCByZXN1bHRH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSkpOwotCi0gICAgICAgIC8vIEZhc3QgY2FzZQotICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzb2x2ZUluZm9HUFIsIE9CSkVDVF9PRkZTRVRPRihS
ZXNvbHZlT3BlcmF0aW9uLCBtX29mZnNldCkpLCByZXNvbHZlSW5mb0dQUik7Ci0jaWYgREZHX0VO
QUJMRShKSVRfQVNTRVJUKQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc091dE9mTGluZSA9
IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc29sdmVJ
bmZvR1BSLCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKLSAgICAgICAgbV9q
aXQuYnJlYWtwb2ludCgpOwotICAgICAgICBpc091dE9mTGluZS5saW5rKCZtX2ppdCk7Ci0jZW5k
aWYKLSAgICAgICAgbV9qaXQubmVnMzIocmVzb2x2ZUluZm9HUFIpOwotICAgICAgICBtX2ppdC5z
aWduRXh0ZW5kMzJUb1B0cihyZXNvbHZlSW5mb0dQUiwgcmVzb2x2ZUluZm9HUFIpOwotICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdEdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZDY0KEpJVENvbXBpbGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwgSklU
Q29tcGlsZXI6OlRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoSlNWYWx1ZSkpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZXNEb250TWF0Y2gsIHRoaXMsIG9wZXJhdGlvblJl
c29sdmVHbG9iYWwsCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCByZXNvbHZlSW5mb0dQUiwg
Z2xvYmFsT2JqZWN0R1BSLAotICAgICAgICAgICAgICAgIGlkZW50aWZpZXJVSUQoZGF0YS5pZGVu
dGlmaWVyTnVtYmVyKSkpOwotCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW5vZGUtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKICAgICAgICAgCkBAIC00NzQzLDExICs0NjU4LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5hZGQ2NChUcnVzdGVk
SW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mobm9kZS0+ZXhlY3V0aW9u
Q291bnRlcigpLT5hZGRyZXNzKCkpKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIEdhcmJh
Z2VWYWx1ZToKLSAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCB0byB0aGUgcG9pbnQgb2Yg
Y29kZSBlbWlzc2lvbiBmb3IgYSBHYXJiYWdlVmFsdWUKLSAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgYnJlYWs7Ci0KICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIEZvcndhcmRGb3Jj
ZU9TUkV4aXQ6IHsKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVx
dWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtOTcxLDcgKzk3MSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cihp
bmRleCksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQotCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
RXhlY1N0YXRlKCk7CkBAIC0xMTI1LDI2ICsxMTI0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9q
aXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CiAg
ICAgICAgIHJldHVybiBjYWxsOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VHcmlKc2dJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBTdHJpbmdJbXBsKiB1aWQpCi0gICAgewotICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZElt
bVB0cih1aWQpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSVJv
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RyaW5nSW1wbCogdWlkLCBSZXNvbHZlT3BlcmF0
aW9ucyogb3BlcmF0aW9ucykKLSAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHVpZCksIFRydXN0ZWRJbW1QdHIob3BlcmF0aW9ucykp
OwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRUlSb1B0Ym8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBT
dHJpbmdJbXBsKiB1aWQsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VP
cGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbnMpCi0gICAgewotICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih1aWQpLCBUcnVzdGVkSW1tUHRy
KG9wZXJhdGlvbnMpLCBUcnVzdGVkSW1tUHRyKHB1dFRvQmFzZU9wZXJhdGlvbnMpKTsKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwotICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBA
IC0xMzQ0LDExICsxMzI4LDYgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FR3JpSnNnSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFN0
cmluZ0ltcGwqIHVpZCkKLSAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwotICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBh
eWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0xNDgyLDE4ICsxNDYxLDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3Vs
dChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CiAgICAgfQogCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSVJvIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIFN0cmluZ0ltcGwqIHVp
ZCwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMpCi0gICAgewotICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih1aWQpLCBUcnVzdGVkSW1t
UHRyKG9wZXJhdGlvbnMpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotICAg
IH0KLQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RUlSb1B0Ym8gb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgU3RyaW5nSW1wbCogdWlkLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0VG9C
YXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb25zKQotICAgIHsKLSAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIodWlkKSwgVHJ1c3RlZElt
bVB0cihvcGVyYXRpb25zKSwgVHJ1c3RlZEltbVB0cihwdXRUb0Jhc2VPcGVyYXRpb25zKSk7Ci0g
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKLSAgICB9Ci0KICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw4
ICszMTAsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGls
ZHJlbihub2RlLCBWb3RlT3RoZXIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBHYXJiYWdlVmFsdWU6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2Rl
LCBWb3RlT3RoZXIpOwpAQCAtNDIwLDggKzQxOCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVPdGhlcik7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNl
IEdhcmJhZ2VWYWx1ZToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgudm90ZUNoaWxkcmVuKG5vZGUsIFZvdGVPdGhlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBERkdDb2RlQmxvY2tzOjp0cmFjZU1hcmtlZENvZGVC
bG9jawogCiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIAotdm9pZCBERkdDb2RlQmxvY2tzOjpq
ZXR0aXNvbihQYXNzT3duUHRyPENvZGVCbG9jaz4pCit2b2lkIERGR0NvZGVCbG9ja3M6OmpldHRp
c29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPikKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTUxMzQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yODIsNyArMjgyLDcgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBIb3N0
Q2FsbEZyYW1lRmxhZyBzdHVmZi4KICAgICAgICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJhbWUo
KTsKICNlbHNlCi0gICAgICAgIENhbGxGcmFtZSogdHJ1ZUNhbGxGcmFtZShBYnN0cmFjdFBDKSB7
IHJldHVybiB0aGlzOyB9CisgICAgICAgIENhbGxGcmFtZSogdHJ1ZUNhbGxGcmFtZSgpIHsgcmV0
dXJuIHRoaXM7IH0KICAgICAgICAgQ2FsbEZyYW1lKiB0cnVlQ2FsbGVyRnJhbWUoKSB7IHJldHVy
biBjYWxsZXJGcmFtZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOyB9CiAjZW5kaWYKICAg
ICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZU5vRmxhZ3MoKSB7IHJldHVybiBjYWxsZXJGcmFt
ZSgpLT5yZW1vdmVIb3N0Q2FsbEZyYW1lRmxhZygpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1MTM0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMiwxNCArMjAyLDYgQEAgSW50ZXJwcmV0ZXI6OlN0YWNrUG9s
aWN5OjpTdGFja1BvbGljeShJbgogCiBzdGF0aWMgQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmZvKFZN
KiwgQ2FsbEZyYW1lKiwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sqJiBjYWxs
ZXJPdXQpOwogCi0vLyBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGUgc2NvcGUgY2hhaW4gd2l0aGlu
IGEgZ2l2ZW4gY2FsbCBmcmFtZS4KLXN0YXRpYyBpbnQgZGVwdGgoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTU2NvcGUqIHNjKQotewotICAgIGlmICghY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNo
YWluKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzYy0+bG9jYWxEZXB0aCgpOwot
fQotCiBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKCFjYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnQoKSkKQEAgLTI0NywxMiArMjM5LDkgQEAgSlNWYWx1ZSBldmFs
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICAvLyBJZiB0aGUgbGl0ZXJhbCBwYXJzZXIg
YmFpbGVkLCBpdCBzaG91bGQgbm90IGhhdmUgdGhyb3duIGV4Y2VwdGlvbnMuCiAgICAgICAgIEFT
U0VSVCghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbik7CiAKLSAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb25WYWx1ZTsKLSAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVCbG9jay0+ZXZhbENvZGVDYWNo
ZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBwcm9ncmFtU291cmNlLCBjYWxsZXJT
Y29wZUNoYWluLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIWV2
YWwgPT0gZXhjZXB0aW9uVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWV2YWwpKQotICAg
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSk7Cisg
ICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNh
bGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVyQ29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7Cisg
ICAgICAgIGlmICghZXZhbCkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gY2FsbGVyRnJhbWUtPnRoaXNWYWx1ZSgpOwpA
QCAtNTcxLDEzICs1NjAsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGdldEJ5dGVjb2RlT2Zmc2V0Rm9y
Q2FsbAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICBpZiAoIWNvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIDA7Ci0jaWYgRU5BQkxFKEpJVCkK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29kZU9yaWdp
bihjYWxsRnJhbWUtPmxvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkuYnl0ZWNvZGVJbmRleDsK
ICNlbmRpZgogICAgIHJldHVybiBjYWxsRnJhbWUtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgp
OwotI2VuZGlmCiB9CiAKIHN0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxlckluZm8oVk0qIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdW5zaWduZWQmIGJ5dGVjb2RlT2Zmc2V0LCBDb2RlQmxvY2sq
JiBjYWxsZXIpCkBAIC01OTQsOSArNTgxLDExIEBAIHN0YXRpYyBDYWxsRnJhbWUqIGdldENhbGxl
ckluZm8oVk0qIHZtLCAKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2sgPSB0cnVlQ2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworI2lmIEVOQUJMRShERkdfSklUKQog
ICAgIGlmICh0cnVlQ2FsbGVyRnJhbWUtPmhhc0xvY2F0aW9uQXNDb2RlT3JpZ2luSW5kZXgoKSkK
ICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSB0cnVlQ2FsbGVyRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0
RnJvbUNvZGVPcmlnaW5JbmRleCgpOwogICAgIGVsc2UKKyNlbmRpZgogICAgICAgICBieXRlY29k
ZU9mZnNldCA9IHRydWVDYWxsZXJGcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCk7CiAK
ICAgICBjYWxsZXIgPSBjYWxsZXJDb2RlQmxvY2s7CkBAIC03ODUsMTUgKzc3NCwxNCBAQCBORVZF
Ul9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgICAgIHByb2ZpbGVyLT5l
eGNlcHRpb25VbndpbmQoY2FsbEZyYW1lKTsKIAogICAgIC8vIFVud2luZCB0aGUgc2NvcGUgY2hh
aW4gd2l0aGluIHRoZSBleGNlcHRpb24gaGFuZGxlcidzIGNhbGwgZnJhbWUuCisgICAgaW50IHRh
cmdldFNjb3BlRGVwdGggPSBoYW5kbGVyLT5zY29wZURlcHRoOworICAgIGlmIChjb2RlQmxvY2st
Pm5lZWRzQWN0aXZhdGlvbigpICYmIGNhbGxGcmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFj
dGl2YXRpb25SZWdpc3RlcigpKS5qc1ZhbHVlKCkpCisgICAgICAgICsrdGFyZ2V0U2NvcGVEZXB0
aDsKKwogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgIGludCBz
Y29wZURlbHRhID0gMDsKLSAgICBpZiAoIWNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigp
IHx8IGNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUgCi0gICAgICAgIHx8IGNh
bGxGcmFtZS0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKS5qc1Zh
bHVlKCkpIHsKLSAgICAgICAgaW50IGN1cnJlbnREZXB0aCA9IGRlcHRoKGNvZGVCbG9jaywgc2Nv
cGUpOwotICAgICAgICBpbnQgdGFyZ2V0RGVwdGggPSBoYW5kbGVyLT5zY29wZURlcHRoOwotICAg
ICAgICBzY29wZURlbHRhID0gY3VycmVudERlcHRoIC0gdGFyZ2V0RGVwdGg7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNjb3BlRGVsdGEgPj0gMCk7Ci0gICAgfQorICAgIGludCBzY29wZURlbHRh
ID0gc2NvcGUtPmRlcHRoKCkgLSB0YXJnZXRTY29wZURlcHRoOworICAgIFJFTEVBU0VfQVNTRVJU
KHNjb3BlRGVsdGEgPj0gMCk7CisKICAgICB3aGlsZSAoc2NvcGVEZWx0YS0tKQogICAgICAgICBz
Y29wZSA9IHNjb3BlLT5uZXh0KCk7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZShzY29wZSk7CkBA
IC0xMjc1LDMwICsxMjYzLDMyIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4
ZWN1dGEKICAgICBpZiAoIW5hdGl2ZVN0YWNrLmlzU2FmZVRvUmVjdXJzZShwb2xpY3kucmVxdWly
ZWRDYXBhY2l0eSgpKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dTdGFja092
ZXJmbG93RXJyb3IoY2FsbEZyYW1lKSk7CiAKLSAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6Cisg
ICAgdW5zaWduZWQgbnVtVmFyaWFibGVzID0gZXZhbC0+bnVtVmFyaWFibGVzKCk7CisgICAgaW50
IG51bUZ1bmN0aW9ucyA9IGV2YWwtPm51bWJlck9mRnVuY3Rpb25EZWNscygpOworCisgICAgSlNT
Y29wZSogdmFyaWFibGVPYmplY3Q7CisgICAgaWYgKChudW1WYXJpYWJsZXMgfHwgbnVtRnVuY3Rp
b25zKSAmJiBldmFsLT5pc1N0cmljdE1vZGUoKSkgeworICAgICAgICBzY29wZSA9IFN0cmljdEV2
YWxBY3RpdmF0aW9uOjpjcmVhdGUoY2FsbEZyYW1lKTsKKyAgICAgICAgdmFyaWFibGVPYmplY3Qg
PSBzY29wZTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKEpTU2NvcGUqIG5vZGUgPSBzY29w
ZTsgOyBub2RlID0gbm9kZS0+bmV4dCgpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChu
b2RlKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgIW5vZGUt
PmlzTmFtZVNjb3BlT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdCA9
IG5vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+Y29tcGlsZShjYWxs
RnJhbWUsIHNjb3BlKTsKICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKQogICAgICAg
ICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9y
KSk7CiAgICAgRXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWwtPmdlbmVyYXRlZEJ5dGVj
b2RlKCk7CiAKLSAgICBKU09iamVjdCogdmFyaWFibGVPYmplY3Q7Ci0gICAgZm9yIChKU1Njb3Bl
KiBub2RlID0gc2NvcGU7IDsgbm9kZSA9IG5vZGUtPm5leHQoKSkgewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzVmFyaWFibGVPYmplY3QoKSAmJiAh
bm9kZS0+aXNOYW1lU2NvcGVPYmplY3QoKSkgewotICAgICAgICAgICAgdmFyaWFibGVPYmplY3Qg
PSBub2RlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBudW1WYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bVZhcmlhYmxlcygpOwotICAgIGludCBu
dW1GdW5jdGlvbnMgPSBjb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpOwogICAgIGlm
IChudW1WYXJpYWJsZXMgfHwgbnVtRnVuY3Rpb25zKSB7Ci0gICAgICAgIGlmIChjb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpKSB7Ci0gICAgICAgICAgICBzY29wZSA9IFN0cmljdEV2YWxBY3RpdmF0
aW9uOjpjcmVhdGUoY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0gc2Nv
cGU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gU2NvcGUgZm9yIEJhdGNoZWRUcmFuc2l0aW9uT3B0
aW1pemVyCiAgICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIG9wdGltaXplcih2bSwg
dmFyaWFibGVPYmplY3QpOworICAgICAgICBpZiAodmFyaWFibGVPYmplY3QtPm5leHQoKSkKKyAg
ICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0
Y2hwb2ludCgpLT5ub3RpZnlXcml0ZSgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1WYXJpYWJsZXM7ICsraSkgewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQgPSBjb2RlQmxvY2stPnZhcmlhYmxlKGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw2IEBAIEpJVDo6SklUKFZNKiB2bSwg
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgLCBtX2J5dGVjb2RlT2Zmc2V0KCh1bnNpZ25lZCkt
MSkKICAgICAsIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KFVJTlRfTUFYKQogICAg
ICwgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgoVUlOVF9NQVgpCi0gICAgLCBtX2dsb2JhbFJlc29s
dmVJbmZvSW5kZXgoVUlOVF9NQVgpCiAgICAgLCBtX2NhbGxMaW5rSW5mb0luZGV4KFVJTlRfTUFY
KQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgLCBtX2p1bXBUYXJnZXRJbmRleCgwKQpAQCAt
MTcxLDcgKzE3MCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLnNpemUoKTsKIAotICAgIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCA9
IDA7CiAgICAgbV9jYWxsTGlua0luZm9JbmRleCA9IDA7CiAKICAgICBmb3IgKG1fYnl0ZWNvZGVP
ZmZzZXQgPSAwOyBtX2J5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CkBAIC0z
MDMsMjcgKzMwMSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAg
ICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9pbml0X2dsb2JhbF9jb25zdF9ub3ApOwogICAgICAgICBERUZJTkVfT1Aob3BfaW5pdF9n
bG9iYWxfY29uc3QpCi0gICAgICAgIERFRklORV9PUChvcF9pbml0X2dsb2JhbF9jb25zdF9jaGVj
aykKLQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsX3Byb3BlcnR5OgotICAgICAgICBj
YXNlIG9wX3Jlc29sdmVfZ2xvYmFsX3ZhcjoKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
ZF92YXI6Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZWRfdmFyX29uX3RvcF9zY29wZToK
LSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92YXJfd2l0aF90b3Bfc2NvcGVfY2hlY2s6
Ci0gICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlKQotCi0gICAgICAgIGNhc2Ugb3BfcmVzb2x2
ZV9iYXNlX3RvX2dsb2JhbDoKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFs
X2R5bmFtaWM6Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlOgotICAgICAg
ICBjYXNlIG9wX3Jlc29sdmVfYmFzZV90b19zY29wZV93aXRoX3RvcF9zY29wZV9jaGVjazoKLSAg
ICAgICAgREVGSU5FX09QKG9wX3Jlc29sdmVfYmFzZSkKLQotICAgICAgICBjYXNlIG9wX3B1dF90
b19iYXNlX3ZhcmlhYmxlOgotICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2Jhc2UpCiAKICAg
ICAgICAgREVGSU5FX09QKG9wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHMpCi0gICAgICAgIERFRklO
RV9PUChvcF9yZXNvbHZlX3dpdGhfYmFzZSkKLSAgICAgICAgREVGSU5FX09QKG9wX3Jlc29sdmVf
d2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfcmV0KQogICAgICAgICBERUZJTkVfT1Ao
b3BfcmV0X29iamVjdF9vcl90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfcnNoaWZ0KQpAQCAt
MzQxLDggKzMyMCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAg
ICAgREVGSU5FX09QKG9wX3RvX251bWJlcikKICAgICAgICAgREVGSU5FX09QKG9wX3RvX3ByaW1p
dGl2ZSkKIAotICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3Njb3BlZF92YXIpCi0gICAgICAgIERF
RklORV9PUChvcF9wdXRfc2NvcGVkX3ZhcikKKyAgICAgICAgREVGSU5FX09QKG9wX3Jlc29sdmVf
c2NvcGUpCisgICAgICAgIERFRklORV9PUChvcF9nZXRfZnJvbV9zY29wZSkKKyAgICAgICAgREVG
SU5FX09QKG9wX3B1dF90b19zY29wZSkKIAogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFp
bjoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKQEAgLTM4NCw3ICszNjQsNiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogCiAgICAgbV9wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOwogICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4ID0g
MDsKLSAgICBtX2dsb2JhbFJlc29sdmVJbmZvSW5kZXggPSAwOwogICAgIG1fY2FsbExpbmtJbmZv
SW5kZXggPSAwOwogICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKQEAgLTQ3MSwzMSAr
NDUwLDE1IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfcHV0X2J5X3ZhbCkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2luaXRfZ2xv
YmFsX2NvbnN0X2NoZWNrKTsKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3JzaGlmdCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3Vyc2hpZnQpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1
YikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3RvX251bWJlcikKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX3RvX3ByaW1pdGl2ZSkKLQotICAgICAgICBjYXNlIG9wX3Jlc29s
dmVfZ2xvYmFsX3Byb3BlcnR5OgotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsX3ZhcjoK
LSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlZF92YXI6Ci0gICAgICAgIGNhc2Ugb3BfcmVz
b2x2ZV9zY29wZWRfdmFyX29uX3RvcF9zY29wZToKLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Nj
b3BlZF92YXJfd2l0aF90b3Bfc2NvcGVfY2hlY2s6Ci0gICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9yZXNvbHZlKQotCi0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX2dsb2JhbDoK
LSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2VfdG9fZ2xvYmFsX2R5bmFtaWM6Ci0gICAgICAg
IGNhc2Ugb3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlOgotICAgICAgICBjYXNlIG9wX3Jlc29sdmVf
YmFzZV90b19zY29wZV93aXRoX3RvcF9zY29wZV9jaGVjazoKLSAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX3Jlc29sdmVfYmFzZSkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3Jl
c29sdmVfd2l0aF9iYXNlKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcmVzb2x2ZV93
aXRoX3RoaXMpCi0KLSAgICAgICAgY2FzZSBvcF9wdXRfdG9fYmFzZV92YXJpYWJsZToKLSAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3B1dF90b19iYXNlKQorICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfcmVzb2x2ZV9zY29wZSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2dldF9mcm9tX3Njb3BlKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X3RvX3Nj
b3BlKQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTEzNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MTYsMTUgKzcxNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0
X2J5X3ZhbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2dldHRlcl9z
ZXR0ZXIoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2luaXRfZ2xvYmFsX2Nv
bnN0KEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbml0X2dsb2JhbF9jb25z
dF9jaGVjayhJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfcmVzb2x2ZV9vcGVyYXRp
b25zKFJlc29sdmVPcGVyYXRpb25zKiwgY29uc3QgaW50KiBiYXNlLCBjb25zdCBpbnQqIHZhbHVl
KTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19saW5rX3Jlc29sdmVfb3BlcmF0aW9ucyhSZXNvbHZl
T3BlcmF0aW9ucyosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAg
dm9pZCBlbWl0X29wX3Jlc29sdmUoSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29w
X3Jlc29sdmVfYmFzZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZW5zdXJl
X3Byb3BlcnR5X2V4aXN0cyhJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfcmVz
b2x2ZV93aXRoX2Jhc2UoSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29s
dmVfd2l0aF90aGlzKEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfdG9f
YmFzZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcmV0KEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXRfb2JqZWN0X29yX3RoaXMoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX3JzaGlmdChJbnN0cnVjdGlvbiopOwpAQCAtNzQyLDgg
KzczNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdG9fcHJpbWl0
aXZlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Vyc2hpZnQoSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9zY29wZWRfdmFyKEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjdGlvbiopOwogCiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2JpdGFuZChJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTc4Nyw3ICs3Nzcs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbmMoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2soSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcnNo
aWZ0KEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX3N0cmljdGVxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1YihJbnN0
cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTc5NSwxNSAr
Nzg0LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3RvX3By
aW1pdGl2ZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF91cnNoaWZ0KEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCi0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcmVz
b2x2ZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9yZXNvbHZlX2Jhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcmVz
b2x2ZV93aXRoX2Jhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcmVzb2x2ZV93aXRoX3RoaXMoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X3RvX2Jhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7Ci0KICAgICAgICAgdm9pZCBlbWl0UmlnaHRTaGlmdChJbnN0cnVjdGlv
biosIGJvb2wgaXNVbnNpZ25lZCk7CiAgICAgICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbG93Q2Fz
ZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCBib29sIGlz
VW5zaWduZWQpOwogCisgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiop
OworICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKik7CisKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dl
dF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKwogICAgICAgICB2b2lkIGVtaXRJ
bml0UmVnaXN0ZXIodW5zaWduZWQgZHN0KTsKIAogICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0Nh
bGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlckVu
dHJ5KTsKQEAgLTgxMyw2ICs4MDQsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXI2NChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJFbnRy
eSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwog
I2VuZGlmCiAKKyAgICAgICAgdm9pZCBlbWl0UmVzb2x2ZUNsb3N1cmUodW5zaWduZWQgZHN0LCBi
b29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCk7CisgICAgICAgIHZv
aWQgZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwor
ICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHVuc2lnbmVkIHNjb3BlLCBT
dHJ1Y3R1cmUqKik7CisgICAgICAgIHZvaWQgZW1pdEdldEdsb2JhbFByb3BlcnR5KHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QpOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50
cHRyX3QqIG9wZXJhbmRTbG90LCB1bnNpZ25lZCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdEdl
dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCk7CisgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgdW5zaWduZWQgdmFsdWUpOworICAgICAgICB2b2lkIGVt
aXRHZXRDbG9zdXJlVmFyKHVuc2lnbmVkIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CisgICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIodW5zaWduZWQgc2NvcGUsIHVpbnRwdHJfdCBvcGVy
YW5kLCB1bnNpZ25lZCB2YWx1ZSk7CisKICAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJh
bmQodW5zaWduZWQgc3JjKTsKICAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEltbWVkaWF0
ZUludCh1bnNpZ25lZCBzcmMpOwogICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50SW1tZWRp
YXRlQ2hhcih1bnNpZ25lZCBzcmMpOwpAQCAtOTAzLDcgKzkwNCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHVuc2lnbmVkIG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4Owog
ICAgICAgICB1bnNpZ25lZCBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleDsKLSAgICAgICAgdW5zaWdu
ZWQgbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxMaW5r
SW5mb0luZGV4OwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODYzLDYgKzg2Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlvbiogY3Vy
cmUKICAgICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9hZGQpOwogICAgICAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVnVDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEyICs0MCwx
NiBAQCBKSVRDb2RlOjp+SklUQ29kZSgpCiB7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQorCiBKU1Zh
bHVlIEpJVENvZGU6OmV4ZWN1dGUoSlNTdGFjayogc3RhY2ssIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBWTSogdm0pCiB7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY3RpVHJh
bXBvbGluZShleGVjdXRhYmxlQWRkcmVzcygpLCBzdGFjaywgY2FsbEZyYW1lLCAwLCAwLCB2bSkp
OwogICAgIHJldHVybiB2bS0+ZXhjZXB0aW9uID8ganNOdWxsKCkgOiByZXN1bHQ7CiB9CiAKKyNl
bmRpZgorCiBERkc6OkNvbW1vbkRhdGEqIEpJVENvZGU6OmRmZ0NvbW1vbigpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE2MSw0ICsxNjUsMyBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNiwxOSArNDI2LDIwIEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3ByaW1pdGl2ZShJbnN0cnVjdGkKIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCiAgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF90b19wcmltaXRpdmUpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0gICAgZW1p
dExvYWQoZHN0LCByZWdUMSwgcmVnVDAsIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBlbWl0TG9h
ZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9zdHJjYXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKwogICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfc3RyY2F0KTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIGVtaXRMb2Fk
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZW5zdXJlX3Byb3Bl
cnR5X2V4aXN0cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTE3Miw2ICsx
MTczLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NyZWF0ZV90aGlzKEluc3RydQogCiAgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF9jcmVhdGVfdGhpcyk7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBlbWl0
TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMTk1LDYgKzExOTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fdGhpcyhJ
bnN0cnVjdGlvCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdG9fdGhpcyk7
CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX3dpbGxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTI3
Niw3MSArMTI3OSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYXJndW1lbnRfYnlfdmEK
ICAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGRzdCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX3B1dF90b19iYXNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCBpZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIFB1dFRvQmFzZU9wZXJhdGlv
biogb3BlcmF0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUucHV0VG9CYXNlT3BlcmF0aW9u
OwotCi0KLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+bV9raW5kKSB7Ci0gICAgY2FzZSBQdXRUb0Jh
c2VPcGVyYXRpb246Okdsb2JhbFZhcmlhYmxlUHV0Q2hlY2tlZDoKLSAgICAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKG9wZXJhdGlvbi0+bV9wcmVk
aWNhdGVQb2ludGVyKSkpOwotICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxWYXJp
YWJsZVB1dDogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uLT5tX2lzRHluYW1p
YykKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcGF5bG9hZEZv
cihiYXNlKSwgVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpKSk7Ci0KLSAgICAgICAgZW1pdExv
YWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlUHRyKHJlZ1QwLCByZWludGVy
cHJldF9jYXN0PGNoYXIqPihvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNzKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSk7Ci0gICAgICAgIHN0b3JlUHRyKHJl
Z1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihvcGVyYXRpb24tPm1fcmVnaXN0ZXJBZGRyZXNz
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKTsKLSAgICAgICAgaWYg
KEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKQotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7Ci0gICAgICAgIGxvYWRQ
dHIocGF5bG9hZEZvcihiYXNlKSwgcmVnVDMpOwotICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU1ZhcmlhYmxlT2Jq
ZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDIpOwotICAgICAgICBzdG9yZTMyKHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QyLCBvcGVyYXRpb24tPm1fb2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICBz
dG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBvcGVyYXRpb24tPm1fb2Zmc2V0ICogc2l6ZW9m
KFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0g
ICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKLSAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIocmVnVDMsIHJlZ1QxLCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlcklt
bWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5UHV0
OiB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcihiYXNlKSwgcmVnVDMp
OwotICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgbG9hZFB0
cigmb3BlcmF0aW9uLT5tX3N0cnVjdHVyZSwgcmVnVDIpOwotICAgICAgICBhZGRTbG93Q2FzZShi
cmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDMsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZWdUMikpOwotICAgICAgICBBU1NFUlQoIW9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUgfHwg
IW9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDMsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsK
LSAgICAgICAgbG9hZDMyKCZvcGVyYXRpb24tPm1fb2Zmc2V0SW5CdXR0ZXJmbHksIHJlZ1QzKTsK
LSAgICAgICAgc3RvcmVQdHIocmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDMsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgICAg
ICBzdG9yZVB0cihyZWdUMSwgQmFzZUluZGV4KHJlZ1QyLCByZWdUMywgVGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgaWYgKEhlYXA6
OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKQotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihn
bG9iYWxPYmplY3QsIHJlZ1QxLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBj
YXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6VW5pbml0aWFsaXNlZDoKLSAgICBjYXNlIFB1dFRvQmFz
ZU9wZXJhdGlvbjo6UmVhZG9ubHk6Ci0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OkdlbmVy
aWM6Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfdG9fYmFz
ZSk7Ci0KLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGJhc2UpKTsK
LSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoaWQpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW0zMih2YWx1ZSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRy
KG9wZXJhdGlvbikpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OTEsNiArOTkxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2JpdHhvcihJbnN0cnVjdGlvbgogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICBKSVRTbG93
UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRo
X2JpdHhvcik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2JpdG9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC05OTgsNiArOTk5LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2JpdG9yKEluc3RydWN0aW9uKgogICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2JpdG9yKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKQEAgLTExNTAsNjUgKzExNTIsNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3Vt
ZW50X2J5X3ZhCiAgICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhkc3QpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYmFzZShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgaWQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBQdXRUb0Jh
c2VPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LnB1dFRvQmFz
ZU9wZXJhdGlvbjsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+bV9raW5kKSB7Ci0gICAgY2FzZSBQ
dXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFZhcmlhYmxlUHV0Q2hlY2tlZDoKLSAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKG9wZXJhdGlvbi0+
bV9wcmVkaWNhdGVQb2ludGVyKSkpOwotICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9i
YWxWYXJpYWJsZVB1dDogewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBpZiAob3BlcmF0aW9uLT5tX2lz
RHluYW1pYykgewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCkpKTsKLSAgICAgICAgfQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgICAgIHN0b3JlNjQocmVnVDAsIG9w
ZXJhdGlvbi0+bV9yZWdpc3RlckFkZHJlc3MpOwotICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJh
cnJpZXJFbmFibGVkKCkpCi0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVj
dCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JW
YXJpYWJsZUFjY2Vzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBQdXRUb0Jh
c2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OiB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMik7Ci0g
ICAgICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDIsIG9wZXJhdGlvbi0+bV9vZmZzZXQg
KiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVu
YWJsZWQoKSkKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDAsIHJlZ1QxLCByZWdU
MiwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxl
QWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhc2UgUHV0VG9CYXNlT3Bl
cmF0aW9uOjpHbG9iYWxQcm9wZXJ0eVB1dDogewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKLSAgICAgICAgbG9hZFB0cigmb3BlcmF0
aW9uLT5tX3N0cnVjdHVyZSwgcmVnVDIpOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdU
MikpOwotICAgICAgICBBU1NFUlQoIW9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUgfHwgIW9wZXJhdGlv
bi0+bV9zdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICAgICAg
bG9hZDMyKCZvcGVyYXRpb24tPm1fb2Zmc2V0SW5CdXR0ZXJmbHksIHJlZ1QzKTsKLSAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKLSAgICAgICAgc3RvcmU2NChyZWdUMSwg
QmFzZUluZGV4KHJlZ1QyLCByZWdUMywgVGltZXNFaWdodCkpOwotICAgICAgICBpZiAoSGVhcDo6
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCi0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHJl
Z1QwLCByZWdUMSwgcmVnVDIsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJh
cnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
YXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6VW5pbml0aWFsaXNlZDoKLSAgICBjYXNlIFB1dFRvQmFz
ZU9wZXJhdGlvbjo6UmVhZG9ubHk6Ci0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OkdlbmVy
aWM6Ci0gICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wdXRfdG9fYmFz
ZSk7Ci0KLSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGJhc2UpKTsK
LSAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoaWQpKSk7Ci0gICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW0zMih2YWx1ZSkpOwotICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRy
KG9wZXJhdGlvbikpOwotICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci19Ci0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9sb29wX2hpbnQoSW5zdHJ1Y3Rpb24qKQpAQCAtMTI1MCwzNTMgKzExOTMsNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KEluc3RydWN0CiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
cmVzb2x2ZV9vcGVyYXRpb25zKFJlc29sdmVPcGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9ucywg
Y29uc3QgaW50KiBiYXNlVlIsIGNvbnN0IGludCogdmFsdWVWUikKLXsKLQotI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgdW5tYXAoKTsKLSNlbHNlCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3Rl
cigpOwotI2VuZGlmCi0KLSAgICBpZiAocmVzb2x2ZU9wZXJhdGlvbnMtPmlzRW1wdHkoKSkgewot
ICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZSA9IHJlZ1QwOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgY29uc3QgUmVnaXN0ZXJJRCB2YWx1ZVRhZyA9IHJlZ1QxOwotI2VuZGlmCi0gICAgY29u
c3QgUmVnaXN0ZXJJRCBzY29wZSA9IHJlZ1QyOwotICAgIGNvbnN0IFJlZ2lzdGVySUQgc2NyYXRj
aCA9IHJlZ1QzOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICBSZXNvbHZlT3BlcmF0aW9uKiBwYyA9IHJlc29sdmVP
cGVyYXRpb25zLT5kYXRhKCk7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNT
dGFjazo6U2NvcGVDaGFpbiwgc2NvcGUpOwotICAgIGJvb2wgc2V0QmFzZSA9IGZhbHNlOwotICAg
IGJvb2wgcmVzb2x2aW5nQmFzZSA9IHRydWU7Ci0gICAgd2hpbGUgKHJlc29sdmluZ0Jhc2UpIHsK
LSAgICAgICAgc3dpdGNoIChwYy0+bV9vcGVyYXRpb24pIHsKLSAgICAgICAgY2FzZSBSZXNvbHZl
T3BlcmF0aW9uOjpSZXR1cm5HbG9iYWxPYmplY3RBc0Jhc2U6Ci0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdmFsdWVU
YWcpOwotI2VuZGlmCi0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAg
ICAgICAgICBlbWl0U3RvcmVDZWxsKCpiYXNlVlIsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpTZXRCYXNlVG9HbG9iYWw6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChiYXNlVlIpOwotICAgICAgICAgICAgc2V0QmFzZSA9IHRy
dWU7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgc2NyYXRj
aCk7Ci0gICAgICAgICAgICBlbWl0U3RvcmVDZWxsKCpiYXNlVlIsIHNjcmF0Y2gpOwotICAgICAg
ICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOwotICAgICAgICAgICAgKytwYzsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNldEJhc2VUb1VuZGVm
aW5lZDogewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZSKTsKLSAgICAgICAgICAg
IHNldEJhc2UgPSB0cnVlOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBzY3JhdGNoKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoKmJhc2VWUiwgc2NyYXRjaCk7Ci0jZWxz
ZQotICAgICAgICAgICAgZW1pdFN0b3JlKCpiYXNlVlIsIGpzVW5kZWZpbmVkKCkpOwotI2VuZGlm
Ci0gICAgICAgICAgICByZXNvbHZpbmdCYXNlID0gZmFsc2U7Ci0gICAgICAgICAgICArK3BjOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0
aW9uOjpTZXRCYXNlVG9TY29wZToKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWUik7
Ci0gICAgICAgICAgICBzZXRCYXNlID0gdHJ1ZTsKLSAgICAgICAgICAgIGVtaXRTdG9yZUNlbGwo
KmJhc2VWUiwgc2NvcGUpOwotICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOwotICAg
ICAgICAgICAgKytwYzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlc29sdmVP
cGVyYXRpb246OlJldHVyblNjb3BlQXNCYXNlOgotICAgICAgICAgICAgZW1pdFN0b3JlQ2VsbCgq
YmFzZVZSLCBzY29wZSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YWx1ZSA9PSByZWdU
MCk7Ci0gICAgICAgICAgICBtb3ZlKHNjb3BlLCB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB2YWx1
ZVRhZyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpTa2lwVG9w
U2NvcGVOb2RlOiB7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIEp1bXAgYWN0
aXZhdGlvbk5vdENyZWF0ZWQgPSBicmFuY2gzMihFcXVhbCwgdGFnRm9yKG1fY29kZUJsb2NrLT5h
Y3RpdmF0aW9uUmVnaXN0ZXIoKSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSk7Ci0jZWxzZQotICAgICAgICAgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5j
aFRlc3Q2NChaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIo
KSkpOwotI2VuZGlmCi0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3Moc2NvcGUsIEpTU2NvcGU6
Om9mZnNldE9mTmV4dCgpKSwgc2NvcGUpOwotICAgICAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0
ZWQubGluayh0aGlzKTsKLSAgICAgICAgICAgICsrcGM7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkNoZWNrRm9yRHluYW1pY0Vu
dHJpZXNCZWZvcmVHbG9iYWxTY29wZTogewotICAgICAgICAgICAgbW92ZShzY29wZSwgcmVnVDMp
OwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU1Njb3BlOjpvZmZzZXRPZk5l
eHQoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIEp1bXAgYXRUb3BPZlNjb3BlID0gYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMSk7Ci0gICAgICAgICAgICBMYWJlbCBsb29wU3RhcnQgPSBsYWJlbCgp
OwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgcmVnVDIpOwotICAgICAgICAgICAgSnVtcCBpc0FjdGl2YXRpb24gPSBicmFuY2hQ
dHIoRXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+YWN0aXZhdGlvblN0
cnVjdHVyZSgpKSk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWws
IHJlZ1QyLCBUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdC0+bmFtZVNjb3BlU3RydWN0dXJlKCkp
KSk7Ci0gICAgICAgICAgICBpc0FjdGl2YXRpb24ubGluayh0aGlzKTsKLSAgICAgICAgICAgIG1v
dmUocmVnVDEsIHJlZ1QzKTsKLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMywgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBicmFuY2hUZXN0UHRy
KE5vblplcm8sIHJlZ1QxLCBsb29wU3RhcnQpOwotICAgICAgICAgICAgYXRUb3BPZlNjb3BlLmxp
bmsodGhpcyk7Ci0gICAgICAgICAgICArK3BjOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpTa2lwU2NvcGVzOiB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBjLT5tX3Njb3Blc1RvU2tpcDsgaSsrKQotICAgICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhzY29wZSwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkp
LCBzY29wZSk7Ci0gICAgICAgICAgICArK3BjOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpGYWlsOgotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJlc29sdmluZ0Jhc2UgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBpZiAoYmFzZVZSICYmICFzZXRCYXNlKQotICAgICAgICBlbWl0U3RvcmVDZWxsKCpiYXNlVlIs
IHNjb3BlKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVlVlIpOwotICAgIFJlc29sdmVPcGVy
YXRpb24qIHJlc29sdmVWYWx1ZU9wZXJhdGlvbiA9IHBjOwotICAgIHN3aXRjaCAocmVzb2x2ZVZh
bHVlT3BlcmF0aW9uLT5tX29wZXJhdGlvbikgewotICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6
R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHk6IHsKLSAgICAgICAgLy8gVmVyaWZ5IHN0cnVjdHVy
ZS4KLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QyKTsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHJlc29sdmVWYWx1ZU9wZXJhdGlvbiksIHJlZ1QzKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoUmVzb2x2ZU9w
ZXJhdGlvbiwgbV9zdHJ1Y3R1cmUpKSwgcmVnVDEpOwotICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSkpOwotCi0gICAgICAgIC8vIExvYWQgcHJvcGVydHkuCi0gICAgICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QzLCBPQkpFQ1RfT0ZGU0VUT0YoUmVzb2x2ZU9wZXJhdGlvbiwgbV9vZmZzZXQp
KSwgcmVnVDMpOwotCi0gICAgICAgIC8vIHJlZ1QyOiBHbG9iYWxPYmplY3QKLSAgICAgICAgLy8g
cmVnVDM6IG9mZnNldAotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNvbXBpbGVHZXRE
aXJlY3RPZmZzZXQocmVnVDIsIHZhbHVlVGFnLCB2YWx1ZSwgcmVnVDMsIEtub3duTm90RmluYWwp
OwotI2Vsc2UKLSAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMiwgdmFsdWUsIHJl
Z1QzLCByZWdUMSwgS25vd25Ob3RGaW5hbCk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsVmFyV2F0Y2hh
YmxlOgotICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsVmFyOiB7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgbG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcykgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSwgdmFsdWVUYWcpOwotICAgICAgICBsb2FkMzIocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ocGMtPm1fcmVnaXN0ZXJBZGRyZXNzKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSwgdmFsdWUpOwotI2Vsc2UKLSAgICAgICAgbG9hZDY0KHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBjLT5tX3JlZ2lzdGVyQWRkcmVzcyksIHZhbHVlKTsKLSNlbmRp
ZgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRB
bmRSZXR1cm5TY29wZWRWYXI6IHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHNjb3BlLCBKU1Zh
cmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NvcGUpOwotI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgICAgIGxvYWQzMihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQgKiBz
aXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCB2YWx1ZVRhZyk7Ci0gICAgICAgIGxvYWQzMihBZGRyZXNzKHNjb3BlLCBwYy0+bV9vZmZzZXQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgdmFsdWUpOwotI2Vsc2UKLSAgICAgICAgbG9hZDY0KEFkZHJlc3Moc2NvcGUsIHBj
LT5tX29mZnNldCAqIHNpemVvZihSZWdpc3RlcikpLCB2YWx1ZSk7Ci0jZW5kaWYKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGVtaXRTdG9yZSgqdmFs
dWVWUiwgdmFsdWVUYWcsIHZhbHVlKTsKLSNlbHNlCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cigqdmFsdWVWUiwgdmFsdWUpOwotI2VuZGlmCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfbGlua19yZXNvbHZlX29wZXJhdGlvbnMoUmVzb2x2
ZU9wZXJhdGlvbnMqIHJlc29sdmVPcGVyYXRpb25zLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQotewotICAgIGlmIChyZXNvbHZlT3BlcmF0aW9ucy0+aXNFbXB0eSgpKSB7
Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFJlc29sdmVPcGVyYXRpb24qIHBjID0gcmVzb2x2ZU9wZXJhdGlvbnMtPmRhdGEoKTsKLSAg
ICBib29sIHJlc29sdmluZ0Jhc2UgPSB0cnVlOwotICAgIHdoaWxlIChyZXNvbHZpbmdCYXNlKSB7
Ci0gICAgICAgIHN3aXRjaCAocGMtPm1fb3BlcmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgUmVzb2x2
ZU9wZXJhdGlvbjo6UmV0dXJuR2xvYmFsT2JqZWN0QXNCYXNlOgotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNldEJhc2VUb0dsb2JhbDoKLSAgICAg
ICAgICAgIHJlc29sdmluZ0Jhc2UgPSBmYWxzZTsKLSAgICAgICAgICAgICsrcGM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpTZXRCYXNlVG9VbmRl
ZmluZWQ6IHsKLSAgICAgICAgICAgIHJlc29sdmluZ0Jhc2UgPSBmYWxzZTsKLSAgICAgICAgICAg
ICsrcGM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFJlc29s
dmVPcGVyYXRpb246OlNldEJhc2VUb1Njb3BlOgotICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9
IGZhbHNlOwotICAgICAgICAgICAgKytwYzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFJlc29sdmVPcGVyYXRpb246OlJldHVyblNjb3BlQXNCYXNlOgotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNraXBUb3BTY29wZU5vZGU6IHsK
LSAgICAgICAgICAgICsrcGM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNraXBTY29wZXM6Ci0gICAgICAgICAgICArK3BjOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6RmFpbDoK
LSAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpDaGVja0ZvckR5bmFtaWNFbnRyaWVzQmVmb3Jl
R2xvYmFsU2NvcGU6IHsKLSAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKLSAgICAgICAg
ICAgICsrcGM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmVzb2x2aW5nQmFzZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIFJlc29sdmVPcGVyYXRpb24qIHJlc29sdmVWYWx1ZU9wZXJhdGlvbiA9IHBjOwotICAgIHN3
aXRjaCAocmVzb2x2ZVZhbHVlT3BlcmF0aW9uLT5tX29wZXJhdGlvbikgewotICAgIGNhc2UgUmVz
b2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHk6IHsKLSAgICAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSZXNvbHZl
T3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9iYWxWYXJXYXRjaGFibGU6Ci0gICAgY2FzZSBSZXNv
bHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9iYWxWYXI6Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuU2NvcGVkVmFyOgotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5yZXNvbHZlT3BlcmF0aW9uczsKLSAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0X3Jlc29sdmVfb3BlcmF0aW9u
cyhvcGVyYXRpb25zLCAwLCAmZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29s
dmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LnJlc29sdmVPcGVyYXRpb25zOwotICAgIGVtaXRTbG93
X2xpbmtfcmVzb2x2ZV9vcGVyYXRpb25zKG9wZXJhdGlvbnMsIGl0ZXIpOwotICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1
bWVudChUcnVzdGVkSW1tUHRyKCZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJ
bW1QdHIoY3VycmVudEluc3RydWN0aW9uWzNdLnUucmVzb2x2ZU9wZXJhdGlvbnMpKTsKLSAgICBz
dHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2Jhc2UoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9u
cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LnJlc29sdmVPcGVyYXRpb25zOwotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRfcmVzb2x2ZV9v
cGVyYXRpb25zKG9wZXJhdGlvbnMsICZkc3QsIDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcmVzb2x2ZV9iYXNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgUmVzb2x2ZU9wZXJhdGlvbnMq
IG9wZXJhdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5yZXNvbHZlT3BlcmF0aW9uczsK
LSAgICBlbWl0U2xvd19saW5rX3Jlc29sdmVfb3BlcmF0aW9ucyhvcGVyYXRpb25zLCBpdGVyKTsK
LSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kID8gY3RpX29wX3Jlc29sdmVfYmFzZV9zdHJpY3RfcHV0IDogY3RpX29wX3Jlc29sdmVf
YmFzZSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKLSAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
LnJlc29sdmVPcGVyYXRpb25zKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5wdXRUb0Jhc2VPcGVyYXRpb24pKTsKLSAgICBz
dHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3dpdGhfYmFzZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVy
YXRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUucmVzb2x2ZU9wZXJhdGlvbnM7Ci0gICAg
aW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdF9yZXNvbHZlX29w
ZXJhdGlvbnMob3BlcmF0aW9ucywgJmJhc2UsICZ2YWx1ZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9yZXNvbHZlX3dpdGhfYmFzZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIFJlc29sdmVP
cGVyYXRpb25zKiBvcGVyYXRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUucmVzb2x2ZU9w
ZXJhdGlvbnM7Ci0gICAgZW1pdFNsb3dfbGlua19yZXNvbHZlX29wZXJhdGlvbnMob3BlcmF0aW9u
cywgaXRlcik7Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVf
d2l0aF9iYXNlKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKCZtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW0zMihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5yZXNvbHZlT3BlcmF0aW9ucykpOwotICAgIHN0dWJDYWxs
LmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uWzVdLnUucHV0VG9C
YXNlT3BlcmF0aW9uKSk7Ci0gICAgc3R1YkNhbGwuY2FsbFdpdGhWYWx1ZVByb2ZpbGluZyhjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBS
ZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LnJl
c29sdmVPcGVyYXRpb25zOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGVtaXRfcmVzb2x2ZV9vcGVyYXRpb25zKG9wZXJhdGlvbnMsICZiYXNlLCAmdmFsdWUp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV93aXRoX3RoaXMoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LnJlc29sdmVPcGVyYXRpb25zOwotICAgIGVtaXRTbG93X2xpbmtfcmVzb2x2
ZV9vcGVyYXRpb25zKG9wZXJhdGlvbnMsIGl0ZXIpOwotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9yZXNvbHZlX3dpdGhfdGhpcyk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoVHJ1c3RlZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCkpKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1t
MzIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uWzRdLnUucmVzb2x2ZU9wZXJh
dGlvbnMpKTsKLSAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3Rv
X2Jhc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGlkID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
Ci0gICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5wdXRUb0Jhc2VPcGVyYXRpb247Ci0gICAgc3dpdGNoIChwdXRUb0Jhc2VP
cGVyYXRpb24tPm1fa2luZCkgewotICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpWYXJpYWJs
ZVB1dDoKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okds
b2JhbFZhcmlhYmxlUHV0OgotICAgICAgICBpZiAoIXB1dFRvQmFzZU9wZXJhdGlvbi0+bV9pc0R5
bmFtaWMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6VW5pbml0aWFs
aXNlZDoKLSAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6UmVhZG9ubHk6Ci0gICAgY2FzZSBQ
dXRUb0Jhc2VPcGVyYXRpb246OkdlbmVyaWM6Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2Ug
UHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxWYXJpYWJsZVB1dENoZWNrZWQ6Ci0gICAgY2FzZSBQ
dXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5UHV0OgotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgfQotCi0gICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX3B1dF90b19iYXNlKTsKLQotICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KFRydXN0ZWRJbW0zMihiYXNlKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3Rl
ZEltbVB0cigmbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWQpKSk7Ci0gICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQoVHJ1c3RlZEltbTMyKHZhbHVlKSk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cihwdXRUb0Jhc2VPcGVyYXRpb24pKTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7
Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX25ld19yZWdleHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfbmV3
X3JlZ2V4cCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAi
UmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgIlNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogCiAjaWZuZGVm
IE5ERUJVRwpAQCAtMTI0NCwxMDggKzEyNDUsMjM2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfcG5hbWUoSW5zdHIKICAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2dldF9zY29wZWRfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaWYgKCFuZWVk
c1ZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mSXNJbnZhbGlkYXRlZCgp
KSkpOworfQogCi0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2Nv
cGVDaGFpbiwgcmVnVDIpOwotICAgIGJvb2wgY2hlY2tUb3BMZXZlbCA9IG1fY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpOwotICAgIEFTU0VSVChza2lwIHx8ICFjaGVja1RvcExldmVsKTsKLSAgICBpZiAoY2hl
Y2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAgICAgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRl
ZDsKLSAgICAgICAgaWYgKGNoZWNrVG9wTGV2ZWwpCi0gICAgICAgICAgICBhY3RpdmF0aW9uTm90
Q3JlYXRlZCA9IGJyYW5jaDMyKEVxdWFsLCB0YWdGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25S
ZWdpc3RlcigpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1Qy
KTsKLSAgICAgICAgYWN0aXZhdGlvbk5vdENyZWF0ZWQubGluayh0aGlzKTsKK3ZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUodW5zaWduZWQgZHN0LCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKK3sKKyAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKEpTU3RhY2s6OlNjb3BlQ2hhaW4sIHJl
Z1QwKTsKKyAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpKSB7CisgICAgICAg
IGVtaXRMb2FkUGF5bG9hZChtX2NvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCksIHJlZ1Qy
KTsKKyAgICAgICAgSnVtcCBub0FjdGl2YXRpb24gPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qy
KTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKKyAgICAgICAgbm9BY3RpdmF0aW9uLmxpbmsodGhpcyk7CiAgICAgfQotICAg
IHdoaWxlIChza2lwLS0pCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRl
cHRoOyArK2kpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV9zY29wZSks
IGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kOworCisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CisgICAgY2FzZSBHbG9iYWxWYXI6CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6CisgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgorICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHJlZ1QxKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKKyAgICAgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX3Jl
c29sdmVfc2NvcGUpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ2xvc3VyZVZhcjoKKyAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgorICAgICAgICBlbWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEeW5hbWlj
OgorICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBH
bG9iYWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUg
PT0gQ2xvc3VyZVZhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgp
OworICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7Cit9
CisKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayh1bnNpZ25lZCBzY29wZSwg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3sKKyAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QyKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCByZWdUMikpOworfQogCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1Zh
cmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDIpOwordm9pZCBKSVQ6OmVt
aXRHZXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90KQoreworICAgIG1vdmUo
cmVnVDAsIHJlZ1QyKTsKKyAgICBsb2FkMzIob3BlcmFuZFNsb3QsIHJlZ1QzKTsKKyAgICBjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QyLCByZWdUMSwgcmVnVDAsIHJlZ1QzLCBLbm93bk5vdEZp
bmFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRHZXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQp
Cit7CisgICAgbG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpLCByZWdUMSk7Cisg
ICAgbG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgcmVnVDApOworfQog
Ci0gICAgZW1pdExvYWQoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOwordm9pZCBKSVQ6OmVt
aXRHZXRDbG9zdXJlVmFyKHVuc2lnbmVkIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKK3sKKyAg
ICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMCk7CisgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVnVDEpOwor
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCBy
ZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZl
TW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkudHlwZSgpOworICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1
Y3R1cmUuc2xvdCgpOworICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKKworICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgorICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBlbWl0TG9h
ZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBj
aGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KKyAgICAgICAgZW1pdEdldEdsb2JhbFByb3BlcnR5
KG9wZXJhbmRTbG90KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHbG9iYWxWYXI6CisgICAg
Y2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAg
ICAgZW1pdEdldEdsb2JhbFZhcigqb3BlcmFuZFNsb3QpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENsb3N1cmVWYXI6CisgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKKyAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7CisgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFu
ZFNsb3QpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIER5bmFtaWM6CisgICAgICAgIGFkZFNs
b3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBtYXAo
bV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X3Njb3BlZF92YXIpLCBkc3Qs
IHJlZ1QxLCByZWdUMCk7CisgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RI
KG9wX2dldF9mcm9tX3Njb3BlKSwgZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0g
ICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQg
c2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBl
ID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLnR5
cGUoKTsKIAotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOworICAgIGlmIChyZXNv
bHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDIpOwotICAgIGJvb2wg
Y2hlY2tUb3BMZXZlbCA9IG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAm
JiBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOwotICAgIEFTU0VSVChza2lwIHx8
ICFjaGVja1RvcExldmVsKTsKLSAgICBpZiAoY2hlY2tUb3BMZXZlbCAmJiBza2lwLS0pIHsKLSAg
ICAgICAgSnVtcCBhY3RpdmF0aW9uTm90Q3JlYXRlZDsKLSAgICAgICAgaWYgKGNoZWNrVG9wTGV2
ZWwpCi0gICAgICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZCA9IGJyYW5jaDMyKEVxdWFsLCB0
YWdGb3IobV9jb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBK
U1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QyKTsKLSAgICAgICAgYWN0aXZhdGlvbk5vdENy
ZWF0ZWQubGluayh0aGlzKTsKLSAgICB9Ci0gICAgd2hpbGUgKHNraXAtLSkKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QyKTsKLQot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdp
c3RlcnMoKSksIHJlZ1QzKTsKLSAgICBlbWl0U3RvcmUoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVn
VDMpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIocmVnVDIsIHJlZ1QxLCByZWdUMCwgcmVnVDEsIFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAg
IGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwLCBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2dsb2Jh
bF9jb25zdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90LCB1bnNpZ25lZCB2YWx1ZSkK
IHsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcjsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgbmVnUHRyKHJlZ1QxKTsKKyAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QzLCBCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnRhZykpKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Cit9CiAKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBv
cGVyYW5kLCB1bnNpZ25lZCB2YWx1ZSkKK3sKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICAKLSAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QyKTsKLSAgICAgICAg
Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMSwgcmVnVDMsIFNo
b3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAg
ICBzdG9yZTMyKHJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihvcGVyYW5kKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CisgICAgc3Rv
cmUzMihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKHVuc2lnbmVkIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7
CisgICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDApOwor
ICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDAsIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KSk7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgb3BlcmFuZCAqIHNpemVvZihS
ZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHNjb3BlID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBS
ZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkudHlwZSgp
OworICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0u
dS5zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdCo+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsK
KworICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5Ogor
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVj
dHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KKyAgICAgICAgZW1pdFB1dEdsb2JhbFBy
b3BlcnR5KG9wZXJhbmRTbG90LCB2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR2xv
YmFsVmFyOgorICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAg
ICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVU
eXBlKSk7CisgICAgICAgIGVtaXRQdXRHbG9iYWxWYXIoKm9wZXJhbmRTbG90LCB2YWx1ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgZW1pdFB1dENsb3N1
cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIER5bmFtaWM6CisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KK30KIAotICAgIHN0b3JlMzIocmVnVDEsIHJlZ2lzdGVyUG9pbnRlci0+dGFnUG9p
bnRlcigpKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCByZWdpc3RlclBvaW50ZXItPnBheWxvYWRQb2lu
dGVyKCkpOwotICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9pbml0
X2dsb2JhbF9jb25zdCksIHZhbHVlLCByZWdUMSwgcmVnVDApOwordm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpLnR5cGUoKTsKKworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2
ZVR5cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9wdXRfdG9fc2NvcGUpOworICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pbml0X2ds
b2JhbF9jb25zdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUucmVnaXN0ZXJQb2ludGVyOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgCisKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIAorCiAgICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QxLCByZWdUMCk7CiAgICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVy
bywgQWJzb2x1dGVBZGRyZXNzKGN1cnJlbnRJbnN0cnVjdGlvblszXS51LnByZWRpY2F0ZVBvaW50
ZXIpKSk7Ci0gICAgCiAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CiAg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7CisgICAgICAg
IAogICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDEsIHJlZ1QzLCBT
aG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiAg
ICAgfQotICAgIAorCiAgICAgc3RvcmUzMihyZWdUMSwgcmVnaXN0ZXJQb2ludGVyLT50YWdQb2lu
dGVyKCkpOwogICAgIHN0b3JlMzIocmVnVDAsIHJlZ2lzdGVyUG9pbnRlci0+cGF5bG9hZFBvaW50
ZXIoKSk7Ci0gICAgdW5tYXAoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luaXRfZ2xv
YmFsX2NvbnN0X2NoZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OwotICAgIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9pbml0X2dsb2Jh
bF9jb25zdF9jaGVjayk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEsIHJlZ1QwKTsK
LSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIoY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCkpOwotICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBtYXAobV9ieXRlY29k
ZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfaW5pdF9nbG9iYWxfY29uc3QpLCB2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZp
c2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlJlcGF0
Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdU
b29sLmgiCisjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0xMjA0LDg4ICsxMjA1LDIyMCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2Nv
cGVkX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRW
YXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQogewotICAgIGlu
dCBza2lwID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpZiAoIW5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICByZXR1cm47CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZJc0ludmFsaWRhdGVkKCkp
KSk7Cit9CiAKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29w
ZUNoYWluLCByZWdUMCk7Ci0gICAgYm9vbCBjaGVja1RvcExldmVsID0gbV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNo
YWluKCk7Ci0gICAgQVNTRVJUKHNraXAgfHwgIWNoZWNrVG9wTGV2ZWwpOwotICAgIGlmIChjaGVj
a1RvcExldmVsICYmIHNraXAtLSkgewotICAgICAgICBKdW1wIGFjdGl2YXRpb25Ob3RDcmVhdGVk
OwotICAgICAgICBpZiAoY2hlY2tUb3BMZXZlbCkKLSAgICAgICAgICAgIGFjdGl2YXRpb25Ob3RD
cmVhdGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCBhZGRyZXNzRm9yKG1fY29kZUJsb2NrLT5hY3Rp
dmF0aW9uUmVnaXN0ZXIoKSkpOwordm9pZCBKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSh1bnNpZ25l
ZCBkc3QsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQorewor
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMCk7CisgICAg
aWYgKG1fY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSkgeworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1fY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSwgcmVnVDEpOwor
ICAgICAgICBKdW1wIG5vQWN0aXZhdGlvbiA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpOwog
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwg
cmVnVDApOwotICAgICAgICBhY3RpdmF0aW9uTm90Q3JlYXRlZC5saW5rKHRoaXMpOworICAgICAg
ICBub0FjdGl2YXRpb24ubGluayh0aGlzKTsKICAgICB9Ci0gICAgd2hpbGUgKHNraXAtLSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOworICAgIHVuc2lnbmVkIGRlcHRoID0gY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZDsKKworICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgorICAgIGNhc2UgR2xvYmFsVmFyOgorICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKKyAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbG9zdXJlVmFyOgorICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShkc3QsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIER5bmFtaWM6CisgICAgICAgIGtpbGxMYXN0UmVz
dWx0UmVnaXN0ZXIoKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9zY29wZShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNv
bHZlVHlwZT4oY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisKKyAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHkgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8
IHJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKIAorICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSk7CisgICAgc2xvd1Bh
dGhDYWxsLmNhbGwoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwor
fQorCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2sodW5zaWduZWQgc2NvcGUs
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOworICAgIGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QxKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0R2V0R2xvYmFs
UHJvcGVydHkodWludHB0cl90KiBvcGVyYW5kU2xvdCkKK3sKKyAgICBsb2FkMzIob3BlcmFuZFNs
b3QsIHJlZ1QxKTsKKyAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgcmVn
VDEsIHJlZ1QyLCBLbm93bk5vdEZpbmFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRHZXRHbG9iYWxW
YXIodWludHB0cl90IG9wZXJhbmQpCit7CisgICAgbG9hZFB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihvcGVyYW5kKSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIo
dW5zaWduZWQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQoreworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTVmFy
aWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIG9wZXJhbmQgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVk
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc2Nv
cGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmQpLnR5cGUoKTsKKyAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gY3VycmVudElu
c3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLnNsb3QoKTsKKyAgICB1aW50cHRyX3QqIG9wZXJhbmRT
bG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmY3VycmVudEluc3RydWN0aW9uWzZd
LnUucG9pbnRlcik7CisKKyAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eToKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czoKKyAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNs
b3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCisgICAgICAgIGVt
aXRHZXRHbG9iYWxQcm9wZXJ0eShvcGVyYW5kU2xvdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR2xvYmFsVmFyOgorICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
KyAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJl
c29sdmVUeXBlKSk7CisgICAgICAgIGVtaXRHZXRHbG9iYWxWYXIoKm9wZXJhbmRTbG90KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDbG9zdXJlVmFyOgorICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICBlbWl0R2V0Q2xvc3Vy
ZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEeW5h
bWljOgorICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBpbnQgc2tpcCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKS50eXBlKCk7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IENsb3N1cmVWYXIpCisgICAgICAg
IHJldHVybjsKIAotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OlNj
b3BlQ2hhaW4sIHJlZ1QxKTsKLSAgICBib29sIGNoZWNrVG9wTGV2ZWwgPSBtX2NvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4oKTsKLSAgICBBU1NFUlQoc2tpcCB8fCAhY2hlY2tUb3BMZXZlbCk7Ci0gICAgaWYgKGNo
ZWNrVG9wTGV2ZWwgJiYgc2tpcC0tKSB7Ci0gICAgICAgIEp1bXAgYWN0aXZhdGlvbk5vdENyZWF0
ZWQ7Ci0gICAgICAgIGlmIChjaGVja1RvcExldmVsKQotICAgICAgICAgICAgYWN0aXZhdGlvbk5v
dENyZWF0ZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIGFkZHJlc3NGb3IobV9jb2RlQmxvY2stPmFj
dGl2YXRpb25SZWdpc3RlcigpKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMSk7Ci0gICAgICAgIGFjdGl2YXRpb25Ob3RDcmVh
dGVkLmxpbmsodGhpcyk7Ci0gICAgfQotICAgIHdoaWxlIChza2lwLS0pCi0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMSk7CisgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwogCi0gICAgZW1pdFdyaXRlQmFycmllcihyZWdUMSwgcmVnVDAs
IHJlZ1QyLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFy
aWFibGVBY2Nlc3MpOworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Cit9CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMSk7Ci0gICAg
c3RvcmVQdHIocmVnVDAsIEFkZHJlc3MocmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3Bl
cnR5KHVpbnRwdHJfdCogb3BlcmFuZFNsb3QsIHVuc2lnbmVkIHZhbHVlKQoreworICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwor
ICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKKyAgICBuZWdQdHIocmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBzdG9yZVB0cihyZWdU
MiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgdW5zaWduZWQgdmFs
dWUpCiB7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsK
K30KIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCwgcmVnVDApOwordm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKHVuc2lnbmVkIHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgdW5zaWduZWQgdmFsdWUpCit7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcGUsIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTVmFyaWFibGVPYmpl
Y3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMCk7CisgICAgc3RvcmVQdHIocmVnVDEsIEFk
ZHJlc3MocmVnVDAsIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cit9CiAKLSAgICBzdG9y
ZTY0KHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOwotICAg
IGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkKLSAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihnbG9iYWxPYmplY3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQg
c2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHZh
bHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKS50eXBlKCk7CisgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2
XS51LnBvaW50ZXIpOworCisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CisgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CisgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVT
bG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgorICAgICAgICBl
bWl0UHV0R2xvYmFsUHJvcGVydHkob3BlcmFuZFNsb3QsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHbG9iYWxWYXI6CisgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgorICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgZW1pdFB1dEdsb2JhbFZhcigqb3BlcmFuZFNs
b3QsIHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDbG9zdXJlVmFyOgorICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAg
ICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRHluYW1pYzoKKyAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3Rl
cigpOworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0X2NoZWNrKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZCkudHlwZSgpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gQ2xvc3VyZVZhcikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
LnByZWRpY2F0ZVBvaW50ZXIpKSk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCisgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9wdXRfdG9fc2NvcGUpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2luaXRfZ2xvYmFsX2NvbnN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKIAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOworCiAgICAgc3RvcmU2NChyZWdUMCwgY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKICAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpCiAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2Jq
ZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clZhcmlhYmxlQWNjZXNzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luaXRfZ2xvYmFs
X2NvbnN0X2NoZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwot
Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2luaXRfZ2xvYmFsX2NvbnN0
X2NoZWNrKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7Ci0gICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
KTsKLSAgICBzdHViQ2FsbC5jYWxsKCk7Ci19Ci0KIHZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJ
ZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8pCiB7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgY3RpX29wX2dldF9ieV9pZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMyw2ICszMzMsMTEgQEAgc3RhdGlj
IE5FVkVSX0lOTElORSB2b2lkIHJldHVyblRvVGhyb3dUcgogICAgICAgICBWTV9USFJPV19FWENF
UFRJT05fQVRfRU5EKCk7IFwKICAgICAgICAgcmV0dXJuIDA7IFwKICAgICB9IHdoaWxlICgwKQor
I2RlZmluZSBWTV9USFJPV19FWENFUFRJT05fVk9JRCgpIFwKKyAgICBkbyB7IFwKKyAgICAgICAg
Vk1fVEhST1dfRVhDRVBUSU9OX0FUX0VORCgpOyBcCisgICAgICAgIHJldHVybjsgXAorICAgIH0g
d2hpbGUgKDApCiAjZGVmaW5lIFZNX1RIUk9XX0VYQ0VQVElPTl9BVF9FTkQoKSBcCiAgICAgZG8g
e1wKICAgICAgICAgcmV0dXJuVG9UaHJvd1RyYW1wb2xpbmUoc3RhY2tGcmFtZS52bSwgU1RVQl9S
RVRVUk5fQUREUkVTUywgU1RVQl9SRVRVUk5fQUREUkVTUyk7XApAQCAtMTQyNyw1NCArMTQzMiw2
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEpTT2JqZWN0Kiwgb3BfbmV3X2EKICAgICByZXR1cm4g
Y29uc3RydWN0QXJyYXkoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1syXS5h
cnJheUFsbG9jYXRpb25Qcm9maWxlKCksIHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+Y29uc3RhbnRCdWZmZXIoc3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCkpLCBzdGFja0ZyYW1l
LmFyZ3NbMV0uaW50MzIoKSk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX2lu
aXRfZ2xvYmFsX2NvbnN0X2NoZWNrKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKLSAgICAKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KTsKLSAgICBzeW1ib2xUYWJsZVB1dChjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBjYWxsRnJh
bWUsIGNvZGVCbG9jay0+aWRlbnRpZmllcihzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKSksIHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCksIHRydWUpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfcmVzb2x2ZSkKLXsKLSAgICBTVFVCX0lOSVRfU1RBQ0tf
RlJBTUUoc3RhY2tGcmFtZSk7Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJh
bWUuY2FsbEZyYW1lOwotICAgIAotICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0g
c3RhY2tGcmFtZS5hcmdzWzFdLnJlc29sdmVPcGVyYXRpb25zKCk7Ci0gICAgYm9vbCB3aWxsUmVp
ZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7Ci0gICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1Njb3BlOjpyZXNvbHZlKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIo
KSwgb3BlcmF0aW9ucyk7Ci0gICAgCi0gICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwot
ICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Ci19Ci0KLURFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF90b19iYXNlKQot
ewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSBiYXNlID0g
Y2FsbEZyYW1lLT5yKHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpKS5qc1ZhbHVlKCk7Ci0gICAg
SlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+cihzdGFja0ZyYW1lLmFyZ3NbMl0uaW50MzIoKSku
anNWYWx1ZSgpOwotICAgIFB1dFRvQmFzZU9wZXJhdGlvbiogb3BlcmF0aW9uID0gc3RhY2tGcmFt
ZS5hcmdzWzNdLnB1dFRvQmFzZU9wZXJhdGlvbigpOwotICAgIGJvb2wgZmlyc3RUaW1lID0gIW9w
ZXJhdGlvbi0+bV9yZWFkeTsKLSAgICBKU1Njb3BlOjpyZXNvbHZlUHV0KGNhbGxGcmFtZSwgYmFz
ZSwgc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgdmFsdWUsIG9wZXJhdGlvbik7Ci0g
ICAgCi0gICAgaWYgKGZpcnN0VGltZSkgewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwotICAgICAgICBvcGVyYXRpb24t
Pm1fcmVhZHkgPSB0cnVlOwotICAgIH0KLQotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5E
KCk7Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9jb25zdHJ1
Y3RfTm90SlNDb25zdHJ1Y3QpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwpAQCAtMTcyNCw0MiArMTY4MSw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBv
cF9sb2FkX3ZhcmEKICAgICByZXR1cm4gbmV3Q2FsbEZyYW1lOwogfQogCi1ERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfcmVzb2x2ZV9iYXNlKQotewotICAgIFNUVUJfSU5J
VF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLSAgICAKLSAgICBSZXNvbHZlT3BlcmF0aW9ucyog
b3BlcmF0aW9ucyA9IHN0YWNrRnJhbWUuYXJnc1sxXS5yZXNvbHZlT3BlcmF0aW9ucygpOwotICAg
IGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwotICAgIAotICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2Uoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0
YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIGZhbHNlLCBvcGVyYXRpb25zLCBzdGFja0Zy
YW1lLmFyZ3NbMl0ucHV0VG9CYXNlT3BlcmF0aW9uKCkpOwotICAgIAotICAgIGlmICh3aWxsUmVp
ZnkpIHsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwotICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfcmVzb2x2ZV9i
YXNlX3N0cmljdF9wdXQpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwotCi0gICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBzdGFja0ZyYW1lLmFyZ3Nb
MV0ucmVzb2x2ZU9wZXJhdGlvbnMoKTsKLSAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMt
PmlzRW1wdHkoKTsKLSAgICAKLSAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNv
bHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZp
ZXIoKSwgdHJ1ZSwgb3BlcmF0aW9ucywgc3RhY2tGcmFtZS5hcmdzWzJdLnB1dFRvQmFzZU9wZXJh
dGlvbigpKSkgewotICAgICAgICAKLSAgICAgICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5tX2xvY2spOwotICAgICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKLSAgICB9Ci0gICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7Ci19Ci0KIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9lbnN1cmVfcHJvcGVydHlfZXhpc3RzKQogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKQEAgLTE5NTQsMzggKzE4NzUs
NiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihpbnQsIG9wX2VxX3N0cmluZ3MpCiAjZW5kaWYKIH0K
IAotREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX3Jlc29sdmVfd2l0aF9i
YXNlKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgUmVzb2x2ZU9w
ZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBzdGFja0ZyYW1lLmFyZ3NbMl0ucmVzb2x2ZU9wZXJhdGlv
bnMoKTsKLSAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShjYWxsRnJhbWUsIHN0YWNr
RnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNr
RnJhbWUuYXJnc1sxXS5pbnQzMigpXSwgb3BlcmF0aW9ucywgc3RhY2tGcmFtZS5hcmdzWzNdLnB1
dFRvQmFzZU9wZXJhdGlvbigpKTsKLSAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
bV9sb2NrKTsKLSAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7Ci0gICAgfQotICAg
IENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwotfQotCi1ERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3Bf
cmVzb2x2ZV93aXRoX3RoaXMpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsK
LSAgICBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9IHN0YWNrRnJhbWUuYXJnc1syXS5y
ZXNvbHZlT3BlcmF0aW9ucygpOwotICAgIGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNF
bXB0eSgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGNh
bGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgJmNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldLCBvcGVyYXRpb25zKTsKLSAgICBp
ZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0YWNr
RnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKLSAgICAgICAgb3BlcmF0aW9u
cy0+bV9yZWFkeSA9IHRydWU7Ci0gICAgfQotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5E
KCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQotCiBERUZJTkVfU1RV
Ql9GVU5DVElPTihKU09iamVjdCosIG9wX25ld19mdW5jX2V4cCkKIHsKICAgICBTVFVCX0lOSVRf
U1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yMjM4LDYgKzIxMjcsNzQgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIHRvXwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpKTsKIH0K
IAorREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX3Jlc29sdmVfc2NvcGUp
Cit7CisgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOworICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CisgICAgSWRlbnRpZmllciYgaWRl
bnQgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+c2NvcGUoKSwg
aWRlbnQpKTsKK30KKworREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2dl
dF9mcm9tX3Njb3BlKQoreworICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsK
KyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOworICAgIEpT
T2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KHN0YWNrRnJhbWUuYXJnc1swXS5qc1Zh
bHVlKCkpOworICAgIElkZW50aWZpZXImIGlkZW50ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50
aWZpZXIoKTsKKyAgICBJbnN0cnVjdGlvbiogcGMgPSBzdGFja0ZyYW1lLmFyZ3NbMl0ucGMoKTsK
KyAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKKwor
ICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlKTsKKyAgICBpZiAoIXNjb3BlLT5nZXRQcm9wZXJ0
eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKKyAgICAgICAgaWYgKG1vZGVBbmRUeXBl
Lm1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQpIHsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUudm0t
PmV4Y2VwdGlvbiA9IGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBpZGVu
dCk7CisgICAgICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIC8v
IENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRo
ZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29t
cGlsZSB0aW1lLgorICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiBzbG90LnNsb3RC
YXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJl
Q2FjaGVhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQ
cm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCk7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQo
Y2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50KSk7Cit9CisKK0RFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wX3B1dF90b19zY29wZSkKK3sKKyAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3Rh
Y2tGcmFtZSk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Cisg
ICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oc3RhY2tGcmFtZS5hcmdzWzBd
LmpzVmFsdWUoKSk7CisgICAgSWRlbnRpZmllciYgaWRlbnQgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
aWRlbnRpZmllcigpOworICAgIEpTVmFsdWUgdmFsdWUgPSBzdGFja0ZyYW1lLmFyZ3NbMl0uanNW
YWx1ZSgpOworICAgIEluc3RydWN0aW9uKiBwYyA9IHN0YWNrRnJhbWUuYXJnc1szXS5wYygpOwor
ICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShw
Y1s0XS51Lm9wZXJhbmQpOworCisgICAgaWYgKG1vZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lm
Tm90Rm91bmQgJiYgIXNjb3BlLT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIGlkZW50KSkgeworICAg
ICAgICBzdGFja0ZyYW1lLnZtLT5leGNlcHRpb24gPSBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVy
cm9yKGNhbGxGcmFtZSwgaWRlbnQpOworICAgICAgICBWTV9USFJPV19FWENFUFRJT05fVk9JRCgp
OworICAgIH0KKworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGNvZGVCbG9jay0+aXNTdHJpY3RN
b2RlKCkpOworICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGNhbGxGcmFtZSwg
aWRlbnQsIHZhbHVlLCBzbG90KTsKKworICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBT
aW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0
IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgorICAgIGlmIChtb2RlQW5k
VHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgeworICAgICAgICBpZiAoc2xvdC5p
c0NhY2hlYWJsZSgpICYmIHNsb3QuYmFzZSgpID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUo
KS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBwY1s1
XS51LnN0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5k
ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5j
bHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAiUmVzb2x2ZU9wZXJhdGlv
bi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtODMsOSArODIsOCBAQCB1bmlvbiBKSVRTdHVi
QXJnIHsKICAgICBKU1N0cmluZyoganNTdHJpbmcoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxKU1N0
cmluZyo+KGFzUG9pbnRlcik7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFN0cnVjdHVyZSo+KGFzUG9pbnRlcik7IH0KICAgICBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MoKSB7IHJldHVybiBSZXR1cm5BZGRyZXNzUHRyKGFzUG9pbnRlcik7
IH0KLSAgICBSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJhdGlvbnMoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxSZXNvbHZlT3BlcmF0aW9ucyo+KGFzUG9pbnRlcik7IH0KLSAgICBQdXRUb0Jh
c2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFB1
dFRvQmFzZU9wZXJhdGlvbio+KGFzUG9pbnRlcik7IH0KICAgICBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlKiBhcnJheUFsbG9jYXRpb25Qcm9maWxlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSo+KGFzUG9pbnRlcik7IH0KKyAgICBJbnN0cnVjdGlvbiogcGMoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KGFzUG9pbnRlcik7IH0KIH07CiAgICAg
CiAjaWYgIU9TKFdJTkRPV1MpICYmIENQVShYODZfNjQpCkBAIC0zNTEsMTMgKzM0OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9pc19ib29sZWEKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV9vcF9pc19udW1iZXIoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJO
QUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfb3BfaXNfc3RyaW5nKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X2lzX3VuZGVmaW5lZChTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29k
ZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlKFNUVUJfQVJHU19ERUNMQVJBVElPTikg
V1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfYmFz
ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKLUVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV9vcF9yZXNvbHZlX2Jhc2Vfc3RyaWN0X3B1dChTVFVCX0FSR1NfREVDTEFSQVRJ
T04pIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9lbnN1cmVf
cHJvcGVydHlfZXhpc3RzKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5j
b2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKFNUVUJfQVJHU19E
RUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwotRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X3Jlc29sdmVfd2l0aF90aGlzKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwot
dm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X3RvX2Jhc2UoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBjdGlfdG9fb2JqZWN0KFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogSlNPYmplY3QqIEpJVF9TVFVCIGN0aV9v
cF9uZXdfYXJyYXkoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiBKU09iamVj
dCogSklUX1NUVUIgY3RpX29wX25ld19hcnJheV93aXRoX3NpemUoU1RVQl9BUkdTX0RFQ0xBUkFU
SU9OKSBXVEZfSU5URVJOQUw7CkBAIC0zOTYsNyArMzg4LDYgQEAgdm9pZCBKSVRfU1RVQiBjdGlf
b3BfcHV0X2J5X2luZGV4KFNUVUJfQQogdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X3ZhbChT
VFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX1NUVUIgY3RpX29w
X3B1dF9ieV92YWxfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
IHZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF9nZXR0ZXJfc2V0dGVyKFNUVUJfQVJHU19ERUNMQVJB
VElPTikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfU1RVQiBjdGlfb3BfaW5pdF9nbG9iYWxfY29u
c3RfY2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9T
VFVCIGN0aV9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RG
X0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGVhcl9vZmZfYXJndW1lbnRzKFNUVUJf
QVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfU1RVQiBjdGlfb3BfdGhy
b3dfc3RhdGljX2Vycm9yKFNUVUJfQVJHU19ERUNMQVJBVElPTikgV1RGX0lOVEVSTkFMOwpAQCAt
NDE3LDYgKzQwOCw5IEBAIHZvaWQqIEpJVF9TVFVCIGN0aV92bV9sYXp5TGlua0Nsb3N1cmVDYWwK
IHZvaWQqIEpJVF9TVFVCIGN0aV92bV9sYXp5TGlua0NvbnN0cnVjdChTVFVCX0FSR1NfREVDTEFS
QVRJT04pIFdURl9JTlRFUk5BTDsKIHZvaWQqIEpJVF9TVFVCIGN0aV92bV90aHJvdyhTVFVCX0FS
R1NfREVDTEFSQVRJT04pIFJFRkVSRU5DRURfRlJPTV9BU00gV1RGX0lOVEVSTkFMOwogRXhjZXB0
aW9uSGFuZGxlciBKSVRfU1RVQiBjdGlfdm1fdGhyb3dfc2xvd3BhdGgoQ2FsbEZyYW1lKikgUkVG
RVJFTkNFRF9GUk9NX0FTTSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfU1RVQiBj
dGlfb3BfcmVzb2x2ZV9zY29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9nZXRfZnJvbV9zY29wZShTVFVCX0FSR1Nf
REVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX1NUVUIgY3RpX29wX3B1dF90b19z
Y29wZShTVFVCX0FSR1NfREVDTEFSQVRJT04pIFdURl9JTlRFUk5BTDsKIH0gLy8gZXh0ZXJuICJD
IgogCiAjZWxpZiBFTkFCTEUoTExJTlRfQ19MT09QKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICsz
MSwxMCBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlQ29udmVudGlvbnMuaCIKICNpbmNsdWRlICJDb2Rl
VHlwZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCisjaW5jbHVkZSAiSlNTY29wZS5oIgog
I2luY2x1ZGUgIkxMSW50Q0xvb3AuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRlICJQ
cm9wZXJ0eU9mZnNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIApA
QCAtMTEyLDcgKzExNCwxNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkK
ICAgICBBU1NFUlQoR2xvYmFsQ29kZSA9PSAwKTsKICAgICBBU1NFUlQoRXZhbENvZGUgPT0gMSk7
CiAgICAgQVNTRVJUKEZ1bmN0aW9uQ29kZSA9PSAyKTsKKworICAgIEFTU0VSVChHbG9iYWxQcm9w
ZXJ0eSA9PSAwKTsKKyAgICBBU1NFUlQoR2xvYmFsVmFyID09IDEpOworICAgIEFTU0VSVChDbG9z
dXJlVmFyID09IDIpOworICAgIEFTU0VSVChHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MgPT0gMyk7CisgICAgQVNTRVJUKEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
PT0gNCk7CisgICAgQVNTRVJUKENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzID09IDUp
OworICAgIEFTU0VSVChEeW5hbWljID09IDYpOwogICAgIAorICAgIEFTU0VSVChSZXNvbHZlTW9k
ZUFuZFR5cGU6Om1hc2sgPT0gMHhmZmZmKTsKKwogICAgIC8vIEZJWE1FOiBtYWtlIHRoZXNlIGFz
c2VydGlvbnMgbGVzcyBob3JyaWJsZS4KICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgVmVjdG9y
PGludD4gdGVzdFZlY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDEw
NiArNDk4LDYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2luc3RhbmNlbwogICAg
IExMSU5UX1JFVFVSTihqc0Jvb2xlYW4oSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShleGVj
LCB2YWx1ZSwgcHJvdG8pKSk7CiB9CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9y
ZXNvbHZlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzJdLnUub3BlcmFuZCk7Ci0gICAgUmVzb2x2
ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBwY1szXS51LnJlc29sdmVPcGVyYXRpb25zOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZShleGVjLCBpZGVudCwgb3BlcmF0aW9u
cyk7Ci0gICAgQVNTRVJUKG9wZXJhdGlvbnMtPnNpemUoKSk7Ci0gICAgc3dpdGNoIChvcGVyYXRp
b25zLT5kYXRhKClbMF0ubV9vcGVyYXRpb24pIHsKLSAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246
OkdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5OgotICAgICAgICBwY1swXS51Lm9wY29kZSA9IExM
SW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcmVzb2x2ZV9nbG9iYWxfcHJvcGVydHkpOwotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFs
VmFyOgotICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3Bf
cmVzb2x2ZV9nbG9iYWxfdmFyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJlc29sdmVP
cGVyYXRpb246OlNraXBUb3BTY29wZU5vZGU6Ci0gICAgICAgIHBjWzBdLnUub3Bjb2RlID0gTExJ
bnQ6OmdldE9wY29kZShsbGludF9vcF9yZXNvbHZlX3Njb3BlZF92YXJfd2l0aF90b3Bfc2NvcGVf
Y2hlY2spOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6U2tp
cFNjb3BlczoKLSAgICAgICAgaWYgKG9wZXJhdGlvbnMtPmRhdGEoKVswXS5tX3Njb3Blc1RvU2tp
cCkKLSAgICAgICAgICAgIHBjWzBdLnUub3Bjb2RlID0gTExJbnQ6OmdldE9wY29kZShsbGludF9v
cF9yZXNvbHZlX3Njb3BlZF92YXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwY1swXS51
Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcmVzb2x2ZV9zY29wZWRfdmFyX29u
X3RvcF9zY29wZSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7Ci0gICAgICAgIG9wZXJhdGlvbnMtPm1fcmVh
ZHkgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfcmVz
b2x2ZSwgcmVzdWx0KTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90
b19iYXNlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBv
cGVyYXRpb24gPSBwY1s0XS51LnB1dFRvQmFzZU9wZXJhdGlvbjsKLSAgICBKU1Njb3BlOjpyZXNv
bHZlUHV0KGV4ZWMsIExMSU5UX09QX0MoMSkuanNWYWx1ZSgpLCBleGVjLT5jb2RlQmxvY2soKS0+
aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpLCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwgb3Bl
cmF0aW9uKTsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+bV9raW5kKSB7Ci0gICAgY2FzZSBQdXRU
b0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OgotICAgICAgICBwY1swXS51Lm9wY29kZSA9IExM
SW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0X3RvX2Jhc2VfdmFyaWFibGUpOwotICAgICAgICBi
cmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHsKLSAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9j
ayk7Ci0gICAgICAgIG9wZXJhdGlvbi0+bV9yZWFkeSA9IHRydWU7Ci0gICAgfQotICAgIAotICAg
IExMSU5UX0VORCgpOwotfQotCi1MTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2
ZV9iYXNlKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0gICAgSWRlbnRpZmllciYgaWRlbnQgPSBl
eGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1syXS51Lm9wZXJhbmQpOwotICAgIFJlc29s
dmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0gcGNbNF0udS5yZXNvbHZlT3BlcmF0aW9uczsKLSAg
ICBKU1ZhbHVlIHJlc3VsdDsKLSAgICBpZiAocGNbM10udS5vcGVyYW5kKSB7Ci0gICAgICAgIHJl
c3VsdCA9IEpTU2NvcGU6OnJlc29sdmVCYXNlKGV4ZWMsIGlkZW50LCB0cnVlLCBvcGVyYXRpb25z
LCBwY1s1XS51LnB1dFRvQmFzZU9wZXJhdGlvbik7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAg
ICAgICAgICAgTExJTlRfVEhST1codm0uZXhjZXB0aW9uKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
cmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2UoZXhlYywgaWRlbnQsIGZhbHNlLCBvcGVyYXRp
b25zLCBwY1s1XS51LnB1dFRvQmFzZU9wZXJhdGlvbik7Ci0gICAgQVNTRVJUKG9wZXJhdGlvbnMt
PnNpemUoKSk7Ci0gICAgc3dpdGNoIChvcGVyYXRpb25zLT5kYXRhKClbMF0ubV9vcGVyYXRpb24p
IHsKLSAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlJldHVybkdsb2JhbE9iamVjdEFzQmFzZToK
LSAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3Jlc29s
dmVfYmFzZV90b19nbG9iYWwpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUmVzb2x2ZU9w
ZXJhdGlvbjo6U2tpcFRvcFNjb3BlTm9kZToKLSAgICAgICAgcGNbMF0udS5vcGNvZGUgPSBMTElu
dDo6Z2V0T3Bjb2RlKGxsaW50X29wX3Jlc29sdmVfYmFzZV90b19zY29wZV93aXRoX3RvcF9zY29w
ZV9jaGVjayk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpT
a2lwU2NvcGVzOgotICAgICAgICBwY1swXS51Lm9wY29kZSA9IExMSW50OjpnZXRPcGNvZGUobGxp
bnRfb3BfcmVzb2x2ZV9iYXNlX3RvX3Njb3BlKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgewotICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKLSAgICAgICAg
b3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIExMSU5UX1BST0ZJ
TEVfVkFMVUUob3BfcmVzb2x2ZV9iYXNlLCByZXN1bHQpOwotICAgIExMSU5UX1JFVFVSTihyZXN1
bHQpOwotfQotCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW5zdXJlX3Byb3BlcnR5
X2V4aXN0cykKIHsKICAgICBMTElOVF9CRUdJTigpOwpAQCAtNjA5LDQ2ICs1MDksNiBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW5zdXJlX3ByCiAgICAgTExJTlRfRU5EKCk7CiB9
CiAKLUxMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3dpdGhfYmFzZSkKLXsK
LSAgICBMTElOVF9CRUdJTigpOwotICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0g
cGNbNF0udS5yZXNvbHZlT3BlcmF0aW9uczsKLSAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlv
bnMtPmlzRW1wdHkoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRo
QmFzZShleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQp
LCAmTExJTlRfT1AoMSksIG9wZXJhdGlvbnMsIHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0aW9uKTsK
LSAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwotICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgTExJTlRf
T1AoMikgPSByZXN1bHQ7Ci0gICAgTExJTlRfUFJPRklMRV9WQUxVRShvcF9yZXNvbHZlX3dpdGhf
YmFzZSwgcmVzdWx0KTsKLSAgICBMTElOVF9FTkQoKTsKLX0KLQotTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3Jlc29sdmVfd2l0aF90aGlzKQotewotICAgIExMSU5UX0JFR0lOKCk7Ci0g
ICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBwY1s0XS51LnJlc29sdmVPcGVyYXRp
b25zOwotICAgIGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGV4ZWMsIGV4ZWMtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCksICZMTElOVF9PUCgxKSwgb3BlcmF0
aW9ucyk7Ci0gICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKLSAgICAgICAgb3BlcmF0aW9ucy0+
bV9yZWFkeSA9IHRydWU7Ci0gICAgfQotICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwotICAg
IExMSU5UX09QKDIpID0gcmVzdWx0OwotICAgIExMSU5UX1BST0ZJTEVfVkFMVUUob3BfcmVzb2x2
ZV93aXRoX3RoaXMsIHJlc3VsdCk7Ci0gICAgTExJTlRfRU5EKCk7Ci19Ci0KLUxMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9pbml0X2dsb2JhbF9jb25zdF9jaGVjaykKLXsKLSAgICBMTElO
VF9CRUdJTigpOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
Ci0gICAgc3ltYm9sVGFibGVQdXQoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZXhlYywgY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHBjWzRdLnUub3BlcmFuZCksIExMSU5UX09QX0MoMikuanNWYWx1
ZSgpLCB0cnVlKTsKLSAgICBMTElOVF9FTkQoKTsKLX0KLQogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9ieV9pZCkKIHsKICAgICBMTElOVF9CRUdJTigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHJldmlzaW9uIDE1MTM0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw2IEBAIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfcmUKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZW5zdXJl
X3Byb3BlcnR5X2V4aXN0cyk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3Jlc29sdmVfd2l0aF9iYXNlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfcmVzb2x2ZV93aXRoX3RoaXMpOwotTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9pbml0X2dsb2JhbF9jb25zdF9jaGVjayk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2dldF9ieV9pZCk7CiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2dldF9hcmd1bWVudHNfbGVuZ3RoKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfcHV0X2J5X2lkKTsKQEAgLTEyMyw2ICsxMjIsOSBAQCBMTElOVF9TTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2RlYnVnKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
cHJvZmlsZV93aWxsX2NhbGwpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9wcm9maWxlX2RpZF9jYWxsKTsKK0xMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfcmVzb2x2ZV9zY29wZSk7CitMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2dldF9mcm9tX3Njb3BlKTsKK0xMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
cHV0X3RvX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTCh0aHJvd19mcm9tX25h
dGl2ZV9jYWxsKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMy
XzY0LmFzbQkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCAr
MTAyLDkgQEAgZW5kCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbCgpCiAgICAgbG9hZGkgQXJndW1l
bnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgIGxvYWRpIDRbUENdLCB0MgotICAgIGxv
YWRpIDI4W1BDXSwgdDMKICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQogICAg
IHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQyLCA4XQotICAgIHZhbHVlUHJvZmlsZSh0
MSwgdDAsIHQzKQorICAgIHZhbHVlUHJvZmlsZSh0MSwgdDAsIDI4LCB0MykKICAgICBkaXNwYXRj
aCg4KQogZW5kCiAKQEAgLTIxMSw2ICsyMTAsMTIgQEAgbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVEZv
ckxvb3AoKQogICAgICAgICBlbmQpCiBlbmQKIAorbWFjcm8gbG9hZFZhcmlhYmxlKG9wZXJhbmQs
IGluZGV4LCB0YWcsIHBheWxvYWQpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKG9wZXJhbmQs
IGluZGV4KQorICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIGluZGV4LCA4XSwgdGFnCisgICAgbG9h
ZGkgUGF5bG9hZE9mZnNldFtjZnIsIGluZGV4LCA4XSwgcGF5bG9hZAorZW5kCisKICMgSW5kZXgs
IHRhZywgYW5kIHBheWxvYWQgbXVzdCBiZSBkaWZmZXJlbnQgcmVnaXN0ZXJzLiBJbmRleCBpcyBu
b3QKICMgY2hhbmdlZC4KIG1hY3JvIGxvYWRDb25zdGFudE9yVmFyaWFibGUoaW5kZXgsIHRhZywg
cGF5bG9hZCkKQEAgLTI5NywxMCArMzAyLDExIEBAIG1hY3JvIHdyaXRlQmFycmllcih0YWcsIHBh
eWxvYWQpCiAgICAgIyBOb3RoaW5nIHRvIGRvLCBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgZ2VuZXJh
dGlvbmFsIG9yIGluY3JlbWVudGFsIGNvbGxlY3Rvci4KIGVuZAogCi1tYWNybyB2YWx1ZVByb2Zp
bGUodGFnLCBwYXlsb2FkLCBwcm9maWxlKQorbWFjcm8gdmFsdWVQcm9maWxlKHRhZywgcGF5bG9h
ZCwgb3BlcmFuZCwgc2NyYXRjaCkKICAgICBpZiBWQUxVRV9QUk9GSUxFUgotICAgICAgICBzdG9y
ZWkgdGFnLCBWYWx1ZVByb2ZpbGU6Om1fYnVja2V0cyArIFRhZ09mZnNldFtwcm9maWxlXQotICAg
ICAgICBzdG9yZWkgcGF5bG9hZCwgVmFsdWVQcm9maWxlOjptX2J1Y2tldHMgKyBQYXlsb2FkT2Zm
c2V0W3Byb2ZpbGVdCisgICAgICAgIGxvYWRwIG9wZXJhbmRbUENdLCBzY3JhdGNoCisgICAgICAg
IHN0b3JlaSB0YWcsIFZhbHVlUHJvZmlsZTo6bV9idWNrZXRzICsgVGFnT2Zmc2V0W3NjcmF0Y2hd
CisgICAgICAgIHN0b3JlaSBwYXlsb2FkLCBWYWx1ZVByb2ZpbGU6Om1fYnVja2V0cyArIFBheWxv
YWRPZmZzZXRbc2NyYXRjaF0KICAgICBlbmQKIGVuZAogCkBAIC0zOTEsOCArMzk3LDcgQEAgX2xs
aW50X29wX2dldF9jYWxsZWU6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpIDRbUENd
LCB0MAogICAgIGxvYWRwIFBheWxvYWRPZmZzZXQgKyBDYWxsZWVbY2ZyXSwgdDEKLSAgICBsb2Fk
cCA4W1BDXSwgdDIKLSAgICB2YWx1ZVByb2ZpbGUoQ2VsbFRhZywgdDEsIHQyKQorICAgIHZhbHVl
UHJvZmlsZShDZWxsVGFnLCB0MSwgOCwgdDIpCiAgICAgc3RvcmVpIENlbGxUYWcsIFRhZ09mZnNl
dFtjZnIsIHQwLCA4XQogICAgIHN0b3JlaSB0MSwgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQog
ICAgIGRpc3BhdGNoKDMpCkBAIC00MDUsOCArNDEwLDcgQEAgX2xsaW50X29wX3RvX3RoaXM6CiAg
ICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAKICAgICBsb2FkcCBKU0NlbGw6
Om1fc3RydWN0dXJlW3QwXSwgdDAKICAgICBiYm5lcSBTdHJ1Y3R1cmU6Om1fdHlwZUluZm8gKyBU
eXBlSW5mbzo6bV90eXBlW3QwXSwgRmluYWxPYmplY3RUeXBlLCAub3BUb1RoaXNTbG93Ci0gICAg
bG9hZGkgOFtQQ10sIHQxCi0gICAgdmFsdWVQcm9maWxlKENlbGxUYWcsIHQwLCB0MSkKKyAgICB2
YWx1ZVByb2ZpbGUoQ2VsbFRhZywgdDAsIDgsIHQxKQogICAgIGRpc3BhdGNoKDMpCiAKIC5vcFRv
VGhpc1Nsb3c6CkBAIC05NTIsMjUgKzk1NiwxOSBAQCBtYWNybyBsb2FkUHJvcGVydHlBdFZhcmlh
YmxlT2Zmc2V0KHByb3BlCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIChmaXJzdE91dE9mTGlu
ZU9mZnNldCAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldCwgOF0sIHBh
eWxvYWQKIGVuZAogCi1tYWNybyByZXNvbHZlR2xvYmFsKHNpemUsIHNsb3cpCi0gICAgIyBPcGVy
YW5kcyBhcmUgYXMgZm9sbG93czoKLSAgICAjIDRbUENdICAgRGVzdGluYXRpb24gZm9yIHRoZSBs
b2FkLgotICAgICMgOFtQQ10gICBQcm9wZXJ0eSBpZGVudGlmaWVyIGluZGV4IGluIHRoZSBjb2Rl
IGJsb2NrLgotICAgICMgMTJbUENdICBTdHJ1Y3R1cmUgcG9pbnRlciwgaW5pdGlhbGl6ZWQgdG8g
MCBieSBieXRlY29kZSBnZW5lcmF0b3IuCi0gICAgIyAxNltQQ10gIE9mZnNldCBpbiBnbG9iYWwg
b2JqZWN0LCBpbml0aWFsaXplZCB0byAwIGJ5IGJ5dGVjb2RlIGdlbmVyYXRvci4KLSAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0
W3QwXSwgdDAKLSAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDEKLSAgICBicG5l
cSB0MSwgMTJbUENdLCBzbG93Ci0gICAgbG9hZGkgMTZbUENdLCB0MQotICAgIGxvYWRQcm9wZXJ0
eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdElubGluZSh0MSwgdDAsIHQyLCB0MykKLSAgICBsb2Fk
aSA0W1BDXSwgdDAKLSAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQwLCA4XQotICAgIHN0
b3JlaSB0MywgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQotICAgIGxvYWRpIChzaXplIC0gMSkg
KiA0W1BDXSwgdDAKLSAgICB2YWx1ZVByb2ZpbGUodDIsIHQzLCB0MCkKK21hY3JvIHN0b3JlUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3Jh
Z2UsIHRhZywgcGF5bG9hZCkKKyAgICBiaWx0IHByb3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKKyAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlb
b2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0b3JhZ2UKKyAgICBuZWdpIHByb3BlcnR5T2Zm
c2V0QXNJbnQKKyAgICBqbXAgLnJlYWR5CisuaXNJbmxpbmU6CisgICAgYWRkcCBzaXplb2YgSlNP
YmplY3QgLSAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDgsIG9iamVjdEFuZFN0b3JhZ2UK
Ky5yZWFkeToKKyAgICBzdG9yZWkgdGFnLCBUYWdPZmZzZXQgKyAoZmlyc3RPdXRPZkxpbmVPZmZz
ZXQgLSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0KKyAg
ICBzdG9yZWkgcGF5bG9hZCwgUGF5bG9hZE9mZnNldCArIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XQogZW5kCiAK
KwogX2xsaW50X29wX2luaXRfZ2xvYmFsX2NvbnN0OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAg
ICBsb2FkaSA4W1BDXSwgdDEKQEAgLTk4MiwyMSArOTgwLDYgQEAgX2xsaW50X29wX2luaXRfZ2xv
YmFsX2NvbnN0OgogICAgIGRpc3BhdGNoKDUpCiAKIAotX2xsaW50X29wX2luaXRfZ2xvYmFsX2Nv
bnN0X2NoZWNrOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkcCAxMltQQ10sIHQyCi0g
ICAgbG9hZGkgOFtQQ10sIHQxCi0gICAgbG9hZGkgNFtQQ10sIHQwCi0gICAgYnRibnogW3QyXSwg
Lm9wSW5pdEdsb2JhbENvbnN0Q2hlY2tTbG93Ci0gICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MSwgdDIsIHQzKQotICAgIHdyaXRlQmFycmllcih0MiwgdDMpCi0gICAgc3RvcmVpIHQyLCBUYWdP
ZmZzZXRbdDBdCi0gICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W3QwXQotICAgIGRpc3BhdGNo
KDUpCi0ub3BJbml0R2xvYmFsQ29uc3RDaGVja1Nsb3c6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfaW5pdF9nbG9iYWxfY29uc3RfY2hlY2spCi0gICAgZGlzcGF0Y2goNSkKLQog
IyBXZSBvbmx5IGRvIG1vbm9tb3JwaGljIGdldF9ieV9pZCBjYWNoaW5nIGZvciBub3csIGFuZCB3
ZSBkbyBub3QgbW9kaWZ5IHRoZQogIyBvcGNvZGUuIFdlIGRvLCBob3dldmVyLCBhbGxvdyBmb3Ig
dGhlIGNhY2hlIHRvIGNoYW5nZSBhbnl0aW1lIGlmIGZhaWxzLCBzaW5jZQogIyBwaW5nLXBvbmdp
bmcgaXMgZnJlZS4gQXQgYmVzdCB3ZSBnZXQgbHVja3kgYW5kIHRoZSBnZXRfYnlfaWQgd2lsbCBj
b250aW51ZQpAQCAtMTAxOSw4ICsxMDAyLDcgQEAgbWFjcm8gZ2V0QnlJZChnZXRQcm9wZXJ0eVN0
b3JhZ2UpCiAgICAgICAgICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3Byb3BlcnR5U3RvcmFnZSwg
dDJdLCB0MgogICAgICAgICAgICAgc3RvcmVpIHNjcmF0Y2gsIFRhZ09mZnNldFtjZnIsIHQxLCA4
XQogICAgICAgICAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDEsIDhdCi0gICAg
ICAgICAgICBsb2FkaSAzMltQQ10sIHQxCi0gICAgICAgICAgICB2YWx1ZVByb2ZpbGUoc2NyYXRj
aCwgdDIsIHQxKQorICAgICAgICAgICAgdmFsdWVQcm9maWxlKHNjcmF0Y2gsIHQyLCAzMiwgdDEp
CiAgICAgICAgICAgICBkaXNwYXRjaCg5KQogICAgICAgICBlbmQpCiAKQEAgLTEwNDcsMTEgKzEw
MjksMTAgQEAgX2xsaW50X29wX2dldF9hcnJheV9sZW5ndGg6CiAgICAgYnRpeiB0MiwgSXNBcnJh
eSwgLm9wR2V0QXJyYXlMZW5ndGhTbG93CiAgICAgYnRpeiB0MiwgSW5kZXhpbmdTaGFwZU1hc2ss
IC5vcEdldEFycmF5TGVuZ3RoU2xvdwogICAgIGxvYWRpIDRbUENdLCB0MQotICAgIGxvYWRwIDMy
W1BDXSwgdDIKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MAogICAgIGxv
YWRpIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6bV9wdWJsaWNMZW5n
dGhbdDBdLCB0MAogICAgIGJpbHQgdDAsIDAsIC5vcEdldEFycmF5TGVuZ3RoU2xvdwotICAgIHZh
bHVlUHJvZmlsZShJbnQzMlRhZywgdDAsIHQyKQorICAgIHZhbHVlUHJvZmlsZShJbnQzMlRhZywg
dDAsIDMyLCB0MikKICAgICBzdG9yZXAgdDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MSwgOF0KICAg
ICBzdG9yZXAgSW50MzJUYWcsIFRhZ09mZnNldFtjZnIsIHQxLCA4XQogICAgIGRpc3BhdGNoKDkp
CkBAIC0xMjEyLDggKzExOTMsNyBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKIC5vcEdldEJ5VmFs
Tm90RW1wdHk6CiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KICAgICBzdG9y
ZWkgdDEsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICBsb2FkaSAyMFtQQ10sIHQwCi0g
ICAgdmFsdWVQcm9maWxlKHQyLCB0MSwgdDApCisgICAgdmFsdWVQcm9maWxlKHQyLCB0MSwgMjAs
IHQwKQogICAgIGRpc3BhdGNoKDYpCiAKIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHM6CkBAIC0xMjQx
LDEwICsxMjIxLDkgQEAgX2xsaW50X29wX2dldF9hcmd1bWVudF9ieV92YWw6CiAgICAgbG9hZGkg
NFtQQ10sIHQzCiAgICAgbG9hZGkgVGhpc0FyZ3VtZW50T2Zmc2V0ICsgVGFnT2Zmc2V0W2Nmciwg
dDIsIDhdLCB0MAogICAgIGxvYWRpIFRoaXNBcmd1bWVudE9mZnNldCArIFBheWxvYWRPZmZzZXRb
Y2ZyLCB0MiwgOF0sIHQxCi0gICAgbG9hZGkgMjBbUENdLCB0MgogICAgIHN0b3JlaSB0MCwgVGFn
T2Zmc2V0W2NmciwgdDMsIDhdCiAgICAgc3RvcmVpIHQxLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDMs
IDhdCi0gICAgdmFsdWVQcm9maWxlKHQwLCB0MSwgdDIpCisgICAgdmFsdWVQcm9maWxlKHQwLCB0
MSwgMjAsIHQyKQogICAgIGRpc3BhdGNoKDYpCiAKIC5vcEdldEFyZ3VtZW50QnlWYWxTbG93OgpA
QCAtMTc3MSwzNyArMTc1MCw2IEBAIG1hY3JvIGdldERlQnJ1aWpuU2NvcGUoZGVCcnVpamluSW5k
ZXhPcGUKIAogZW5kCiAKLV9sbGludF9vcF9nZXRfc2NvcGVkX3ZhcjoKLSAgICB0cmFjZUV4ZWN1
dGlvbigpCi0gICAgIyBPcGVyYW5kcyBhcmUgYXMgZm9sbG93czoKLSAgICAjIDRbUENdICAgRGVz
dGluYXRpb24gZm9yIHRoZSBsb2FkLgotICAgICMgOFtQQ10gICBJbmRleCBvZiByZWdpc3RlciBp
biB0aGUgc2NvcGUuCi0gICAgIyAxMltQQ10gIERlIEJydWlqaW4gaW5kZXguCi0gICAgZ2V0RGVC
cnVpam5TY29wZSgxMltQQ10sIG1hY3JvIChzY29wZSwgc2NyYXRjaCkgZW5kKQotICAgIGxvYWRp
IDRbUENdLCB0MQotICAgIGxvYWRpIDhbUENdLCB0MgotICAgIGxvYWRwIEpTVmFyaWFibGVPYmpl
Y3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKLSAgICBsb2FkaSBUYWdPZmZzZXRbdDAsIHQyLCA4XSwg
dDMKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QwLCB0MiwgOF0sIHQwCi0gICAgc3RvcmVpIHQz
LCBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0KLSAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZzZXRbY2Zy
LCB0MSwgOF0KLSAgICBsb2FkaSAxNltQQ10sIHQxCi0gICAgdmFsdWVQcm9maWxlKHQzLCB0MCwg
dDEpCi0gICAgZGlzcGF0Y2goNSkKLQotCi1fbGxpbnRfb3BfcHV0X3Njb3BlZF92YXI6Ci0gICAg
dHJhY2VFeGVjdXRpb24oKQotICAgIGdldERlQnJ1aWpuU2NvcGUoOFtQQ10sIG1hY3JvIChzY29w
ZSwgc2NyYXRjaCkgZW5kKQotICAgIGxvYWRpIDEyW1BDXSwgdDEKLSAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHQxLCB0MywgdDIpCi0gICAgbG9hZGkgNFtQQ10sIHQxCi0gICAgd3JpdGVCYXJy
aWVyKHQzLCB0MikKLSAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0s
IHQwCi0gICAgc3RvcmVpIHQzLCBUYWdPZmZzZXRbdDAsIHQxLCA4XQotICAgIHN0b3JlaSB0Miwg
UGF5bG9hZE9mZnNldFt0MCwgdDEsIDhdCi0gICAgZGlzcGF0Y2goNCkKLQogX2xsaW50X29wX2Vu
ZDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3Vl
KCkKQEAgLTE4OTksMyArMTg0NywyMzggQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhl
Y3V0YWJsZU9mZgogICAgIGptcCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGlu
ZQogZW5kCiAKKworbWFjcm8gZ2V0R2xvYmFsT2JqZWN0KGRzdCkKKyAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgdDAKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAK
KyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oZHN0LCB0MSkKKyAgICBzdG9yZWkgQ2VsbFRhZywg
VGFnT2Zmc2V0W2NmciwgdDEsIDhdCisgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2Nmciwg
dDEsIDhdCitlbmQKKworbWFjcm8gdmFySW5qZWN0aW9uQ2hlY2soc2xvd1BhdGgpCisgICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCisgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVj
dFt0MF0sIHQwCisgICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fdmFySW5qZWN0aW9uV2F0Y2hw
b2ludFt0MF0sIHQwCisgICAgYnRibnogV2F0Y2hwb2ludFNldDo6bV9pc0ludmFsaWRhdGVkW3Qw
XSwgc2xvd1BhdGgKK2VuZAorCittYWNybyByZXNvbHZlU2NvcGUoKQorICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCB0MAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MikKKyAgICBidGJ6
IENvZGVCbG9jazo6bV9uZWVkc0FjdGl2YXRpb25bdDBdLCAucmVzb2x2ZVNjb3BlQWZ0ZXJBY3Rp
dmF0aW9uQ2hlY2sKKyAgICBsb2FkaXMgQ29kZUJsb2NrOjptX2FjdGl2YXRpb25SZWdpc3Rlclt0
MF0sIHQxCisgICAgYnRweiBQYXlsb2FkT2Zmc2V0W2NmciwgdDEsIDhdLCAucmVzb2x2ZVNjb3Bl
QWZ0ZXJBY3RpdmF0aW9uQ2hlY2sKKyAgICBhZGRpIDEsIHQyCisKKy5yZXNvbHZlU2NvcGVBZnRl
ckFjdGl2YXRpb25DaGVjazoKKyAgICBsb2FkcCBTY29wZUNoYWluW2Nmcl0sIHQwCisgICAgYnRp
eiB0MiwgLnJlc29sdmVTY29wZUxvb3BFbmQKKworLnJlc29sdmVTY29wZUxvb3A6CisgICAgbG9h
ZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKKyAgICBzdWJpIDEsIHQyCisgICAgYnRpbnogdDIs
IC5yZXNvbHZlU2NvcGVMb29wCisKKy5yZXNvbHZlU2NvcGVMb29wRW5kOgorICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigxLCB0MSkKKyAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zmc2V0W2Nmciwg
dDEsIDhdCisgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDEsIDhdCitlbmQKKwor
CitfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQorCisjckdsb2JhbFByb3BlcnR5OgorICAgIGJpbmVx
IHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxWYXIKKyAgICBnZXRHbG9iYWxPYmplY3QoMSkK
KyAgICBkaXNwYXRjaCg1KQorCisuckdsb2JhbFZhcjoKKyAgICBiaW5lcSB0MCwgR2xvYmFsVmFy
LCAuckNsb3N1cmVWYXIKKyAgICBnZXRHbG9iYWxPYmplY3QoMSkKKyAgICBkaXNwYXRjaCg1KQor
CisuckNsb3N1cmVWYXI6CisgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCisgICAgcmVzb2x2ZVNjb3BlKCkKKyAgICBkaXNwYXRj
aCg1KQorCisuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBiaW5l
cSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckdsb2JhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MKKyAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCisg
ICAgZ2V0R2xvYmFsT2JqZWN0KDEpCisgICAgZGlzcGF0Y2goNSkKKworLnJHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGJpbmVxIHQwLCBHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCisgICAgdmFySW5q
ZWN0aW9uQ2hlY2soLnJEeW5hbWljKQorICAgIGdldEdsb2JhbE9iamVjdCgxKQorICAgIGRpc3Bh
dGNoKDUpCisKKy5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgYmluZXEg
dDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKKyAgICB2YXJJ
bmplY3Rpb25DaGVjayguckR5bmFtaWMpCisgICAgcmVzb2x2ZVNjb3BlKCkKKyAgICBkaXNwYXRj
aCg1KQorCisuckR5bmFtaWM6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfcmVzb2x2ZV9z
Y29wZSkKKyAgICBkaXNwYXRjaCg1KQorCisKK21hY3JvIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2so
b3BlcmFuZCwgc2xvd1BhdGgpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKG9wZXJhbmQsIHQw
KQorICAgIGxvYWRwIFtjZnIsIHQwLCA4XSwgdDAKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1
LCB0MSkKKyAgICBicG5lcSBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDEsIHNsb3dQYXRoCitl
bmQKKworbWFjcm8gZ2V0UHJvcGVydHkoKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0
MykKKyAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQzLCB0MCwgdDEsIHQyKQorICAg
IHZhbHVlUHJvZmlsZSh0MSwgdDIsIDI4LCB0MCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
MSwgdDApCisgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KKyAgICBzdG9yZWkg
dDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KK2VuZAorCittYWNybyBnZXRHbG9iYWxWYXIo
KQorICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQorICAgIGxvYWRwIFRhZ09mZnNldFt0
MF0sIHQxCisgICAgbG9hZHAgUGF5bG9hZE9mZnNldFt0MF0sIHQyCisgICAgdmFsdWVQcm9maWxl
KHQxLCB0MiwgMjgsIHQwKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MCkKKyAgICBz
dG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQwLCA4XQorICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9m
ZnNldFtjZnIsIHQwLCA4XQorZW5kCisKK21hY3JvIGdldENsb3N1cmVWYXIoKQorICAgIGxvYWRw
IEpTVmFyaWFibGVPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKKyAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oNiwgdDMpCisgICAgbG9hZHAgVGFnT2Zmc2V0W3QwLCB0MywgOF0sIHQxCisgICAg
bG9hZHAgUGF5bG9hZE9mZnNldFt0MCwgdDMsIDhdLCB0MgorICAgIHZhbHVlUHJvZmlsZSh0MSwg
dDIsIDI4LCB0MCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCisgICAgc3RvcmVp
IHQxLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KKyAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRb
Y2ZyLCB0MCwgOF0KK2VuZAorCitfbGxpbnRfb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MCkKKyAgICBhbmRpIFJl
c29sdmVNb2RlTWFzaywgdDAKKworI2dHbG9iYWxQcm9wZXJ0eToKKyAgICBiaW5lcSB0MCwgR2xv
YmFsUHJvcGVydHksIC5nR2xvYmFsVmFyCisgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaygyLCAu
Z0R5bmFtaWMpCisgICAgZ2V0UHJvcGVydHkoKQorICAgIGRpc3BhdGNoKDgpCisKKy5nR2xvYmFs
VmFyOgorICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIsIC5nQ2xvc3VyZVZhcgorICAgIGdldEdsb2Jh
bFZhcigpCisgICAgZGlzcGF0Y2goOCkKKworLmdDbG9zdXJlVmFyOgorICAgIGJpbmVxIHQwLCBD
bG9zdXJlVmFyLCAuZ0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcworICAgIGxv
YWRWYXJpYWJsZSgyLCB0MiwgdDEsIHQwKQorICAgIGdldENsb3N1cmVWYXIoKQorICAgIGRpc3Bh
dGNoKDgpCisKKy5nR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGJp
bmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5nR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcworICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMiwgLmdE
eW5hbWljKQorICAgIGdldFByb3BlcnR5KCkKKyAgICBkaXNwYXRjaCg4KQorCisuZ0dsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIC5nQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKKyAgICB2
YXJJbmplY3Rpb25DaGVjayguZ0R5bmFtaWMpCisgICAgbG9hZFZhcmlhYmxlKDIsIHQyLCB0MSwg
dDApCisgICAgZ2V0R2xvYmFsVmFyKCkKKyAgICBkaXNwYXRjaCg4KQorCisuZ0Nsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgLmdEeW5hbWljCisgICAgdmFySW5qZWN0aW9uQ2hlY2soLmdEeW5hbWlj
KQorICAgIGxvYWRWYXJpYWJsZSgyLCB0MiwgdDEsIHQwKQorICAgIGdldENsb3N1cmVWYXIoKQor
ICAgIGRpc3BhdGNoKDgpCisKKy5nRHluYW1pYzoKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0
aF9nZXRfZnJvbV9zY29wZSkKKyAgICBkaXNwYXRjaCg4KQorCisKK21hY3JvIHB1dFByb3BlcnR5
KCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDEpCisgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MSwgdDIsIHQzKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKKyAg
ICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKK2VuZAorCitt
YWNybyBwdXRHbG9iYWxWYXIoKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKKyAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSwgdDIpCisgICAgbG9hZHBGcm9tSW5zdHJ1
Y3Rpb24oNiwgdDApCisgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbdDBdCisgICAgc3RvcmVpIHQy
LCBQYXlsb2FkT2Zmc2V0W3QwXQorZW5kCisKK21hY3JvIHB1dENsb3N1cmVWYXIoKQorICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MSkKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQx
LCB0MiwgdDMpCisgICAgbG9hZHAgSlNWYXJpYWJsZU9iamVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0
MAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKKyAgICBzdG9yZWkgdDIsIFRhZ09m
ZnNldFt0MCwgdDEsIDhdCisgICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0K
K2VuZAorCisKK19sbGludF9vcF9wdXRfdG9fc2NvcGU6CisgICAgdHJhY2VFeGVjdXRpb24oKQor
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MCkKKyAgICBhbmRpIFJlc29sdmVNb2RlTWFz
aywgdDAKKworI3BHbG9iYWxQcm9wZXJ0eToKKyAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHks
IC5wR2xvYmFsVmFyCisgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaygxLCAucER5bmFtaWMpCisg
ICAgcHV0UHJvcGVydHkoKQorICAgIGRpc3BhdGNoKDcpCisKKy5wR2xvYmFsVmFyOgorICAgIGJp
bmVxIHQwLCBHbG9iYWxWYXIsIC5wQ2xvc3VyZVZhcgorICAgIHB1dEdsb2JhbFZhcigpCisgICAg
ZGlzcGF0Y2goNykKKworLnBDbG9zdXJlVmFyOgorICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAu
cEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcworICAgIGxvYWRWYXJpYWJsZSgx
LCB0MiwgdDEsIHQwKQorICAgIHB1dENsb3N1cmVWYXIoKQorICAgIGRpc3BhdGNoKDcpCisKKy5w
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGJpbmVxIHQwLCBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5wR2xvYmFsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcworICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMSwgLnBEeW5hbWljKQorICAg
IHB1dFByb3BlcnR5KCkKKyAgICBkaXNwYXRjaCg3KQorCisucEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CisgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MsIC5wQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKKyAgICB2YXJJbmplY3Rpb25D
aGVjaygucER5bmFtaWMpCisgICAgcHV0R2xvYmFsVmFyKCkKKyAgICBkaXNwYXRjaCg3KQorCisu
cENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGJpbmVxIHQwLCBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnBEeW5hbWljCisgICAgdmFySW5qZWN0aW9uQ2hl
Y2soLnBEeW5hbWljKQorICAgIGxvYWRWYXJpYWJsZSgxLCB0MiwgdDEsIHQwKQorICAgIHB1dENs
b3N1cmVWYXIoKQorICAgIGRpc3BhdGNoKDcpCisKKy5wRHluYW1pYzoKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9wdXRfdG9fc2NvcGUpCisgICAgZGlzcGF0Y2goNykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOCBAQCBt
YWNybyBkaXNwYXRjaEFmdGVyQ2FsbCgpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAg
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1tQQl0sIFBCCiAgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDEsIHQxKQotICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDcsIHQyKQogICAg
IHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCi0gICAgdmFsdWVQcm9maWxlKHQwLCB0MikKKyAgICB2
YWx1ZVByb2ZpbGUodDAsIDcsIHQyKQogICAgIGRpc3BhdGNoKDgpCiBlbmQKIApAQCAtMTU1LDYg
KzE1NCwxMSBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgIGVuZCkK
IGVuZAogCittYWNybyBsb2FkVmFyaWFibGUob3BlcmFuZCwgdmFsdWUpCisgICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKG9wZXJhbmQsIHZhbHVlKQorICAgIGxvYWRxIFtjZnIsIHZhbHVlLCA4XSwg
dmFsdWUKK2VuZAorCiAjIEluZGV4IGFuZCB2YWx1ZSBtdXN0IGJlIGRpZmZlcmVudCByZWdpc3Rl
cnMuIEluZGV4IG1heSBiZSBjbG9iYmVyZWQuCiBtYWNybyBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KGluZGV4LCB2YWx1ZSkKICAgICBicGd0ZXEgaW5kZXgsIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4LCAuY29uc3RhbnQKQEAgLTE4Miw5ICsxODYsMTAgQEAgbWFjcm8gd3JpdGVCYXJyaWVyKHZh
bHVlKQogICAgICMgTm90aGluZyB0byBkbywgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGdlbmVyYXRp
b25hbCBvciBpbmNyZW1lbnRhbCBjb2xsZWN0b3IuCiBlbmQKIAotbWFjcm8gdmFsdWVQcm9maWxl
KHZhbHVlLCBwcm9maWxlKQorbWFjcm8gdmFsdWVQcm9maWxlKHZhbHVlLCBvcGVyYW5kLCBzY3Jh
dGNoKQogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0gICAgICAgIHN0b3JlcSB2YWx1ZSwgVmFsdWVQ
cm9maWxlOjptX2J1Y2tldHNbcHJvZmlsZV0KKyAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24o
b3BlcmFuZCwgc2NyYXRjaCkKKyAgICAgICAgc3RvcmVxIHZhbHVlLCBWYWx1ZVByb2ZpbGU6Om1f
YnVja2V0c1tzY3JhdGNoXQogICAgIGVuZAogZW5kCiAKQEAgLTI3Miw5ICsyNzcsOCBAQCBfbGxp
bnRfb3BfY3JlYXRlX3RoaXM6CiBfbGxpbnRfb3BfZ2V0X2NhbGxlZToKICAgICB0cmFjZUV4ZWN1
dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQotICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDIsIHQyKQogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MQotICAgIHZhbHVlUHJv
ZmlsZSh0MSwgdDIpCisgICAgdmFsdWVQcm9maWxlKHQxLCAyLCB0MikKICAgICBzdG9yZXAgdDEs
IFtjZnIsIHQwLCA4XQogICAgIGRpc3BhdGNoKDMpCiAKQEAgLTI4Niw4ICsyOTAsNyBAQCBfbGxp
bnRfb3BfdG9fdGhpczoKICAgICBidHFueiB0MCwgdGFnTWFzaywgLm9wVG9UaGlzU2xvdwogICAg
IGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MAogICAgIGJibmVxIFN0cnVjdHVyZTo6
bV90eXBlSW5mbyArIFR5cGVJbmZvOjptX3R5cGVbdDBdLCBGaW5hbE9iamVjdFR5cGUsIC5vcFRv
VGhpc1Nsb3cKLSAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigyLCB0MSkKLSAgICB2YWx1ZVByb2Zp
bGUodDAsIHQxKQorICAgIHZhbHVlUHJvZmlsZSh0MCwgMiwgdDEpCiAgICAgZGlzcGF0Y2goMykK
IAogLm9wVG9UaGlzU2xvdzoKQEAgLTc5NywxNCArODAwLDIwIEBAIF9sbGludF9vcF9pc19zdHJp
bmc6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zm
c2V0S25vd25Ob3RJbmxpbmUocHJvcGVydHlPZmZzZXRBc1BvaW50ZXIsIG9iamVjdEFuZFN0b3Jh
Z2UsIHZhbHVlKQotICAgIGFzc2VydChtYWNybyAob2spIGJpZ3RlcSBwcm9wZXJ0eU9mZnNldEFz
UG9pbnRlciwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIG9rIGVuZCkKLSAgICBuZWdwIHByb3BlcnR5
T2Zmc2V0QXNQb2ludGVyCittYWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3Bl
cnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFuZFN0b3JhZ2UsIHZhbHVlKQorICAgIGJpbHQgcHJvcGVy
dHlPZmZzZXRBc0ludCwgZmlyc3RPdXRPZkxpbmVPZmZzZXQsIC5pc0lubGluZQogICAgIGxvYWRw
IEpTT2JqZWN0OjptX2J1dHRlcmZseVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFn
ZQotICAgIGxvYWRxIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogOFtvYmplY3RBbmRTdG9y
YWdlLCBwcm9wZXJ0eU9mZnNldEFzUG9pbnRlciwgOF0sIHZhbHVlCisgICAgbmVnaSBwcm9wZXJ0
eU9mZnNldEFzSW50CisgICAgc3hpMnEgcHJvcGVydHlPZmZzZXRBc0ludCwgcHJvcGVydHlPZmZz
ZXRBc0ludAorICAgIGptcCAucmVhZHkKKy5pc0lubGluZToKKyAgICBhZGRwIHNpemVvZiBKU09i
amVjdCAtIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQor
LnJlYWR5OgorICAgIGxvYWRxIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogOFtvYmplY3RB
bmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFzSW50LCA4XSwgdmFsdWUKIGVuZAogCi1tYWNybyBs
b2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFu
ZFN0b3JhZ2UsIHZhbHVlKQorCittYWNybyBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldChw
cm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0IHBy
b3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKICAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFuZFN0
b3JhZ2UKICAgICBuZWdpIHByb3BlcnR5T2Zmc2V0QXNJbnQKQEAgLTgxMyw3ICs4MjIsNyBAQCBt
YWNybyBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlCiAuaXNJbmxpbmU6CiAgICAg
YWRkcCBzaXplb2YgSlNPYmplY3QgLSAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDgsIG9i
amVjdEFuZFN0b3JhZ2UKIC5yZWFkeToKLSAgICBsb2FkcSAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIDhbb2JqZWN0QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVl
CisgICAgc3RvcmVxIHZhbHVlLCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDhbb2JqZWN0
QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0KIGVuZAogCiBfbGxpbnRfb3BfaW5p
dF9nbG9iYWxfY29uc3Q6CkBAIC04MjYsMjAgKzgzNSw2IEBAIF9sbGludF9vcF9pbml0X2dsb2Jh
bF9jb25zdDoKICAgICBkaXNwYXRjaCg1KQogCiAKLV9sbGludF9vcF9pbml0X2dsb2JhbF9jb25z
dF9jaGVjazoKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24o
MywgdDIpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQotICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDEsIHQwKQotICAgIGJ0Ym56IFt0Ml0sIC5vcEluaXRHbG9iYWxDb25zdENoZWNr
U2xvdwotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQotICAgIHdyaXRlQmFycmll
cih0MikKLSAgICBzdG9yZXEgdDIsIFt0MF0KLSAgICBkaXNwYXRjaCg1KQotLm9wSW5pdEdsb2Jh
bENvbnN0Q2hlY2tTbG93OgotICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2luaXRf
Z2xvYmFsX2NvbnN0X2NoZWNrKQotICAgIGRpc3BhdGNoKDUpCi0KIG1hY3JvIGdldEJ5SWQoZ2V0
UHJvcGVydHlTdG9yYWdlKQogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICAjIFdlIG9ubHkgZG8g
bW9ub21vcnBoaWMgZ2V0X2J5X2lkIGNhY2hpbmcgZm9yIG5vdywgYW5kIHdlIGRvIG5vdCBtb2Rp
ZnkgdGhlCkBAIC04NTksOCArODU0LDcgQEAgbWFjcm8gZ2V0QnlJZChnZXRQcm9wZXJ0eVN0b3Jh
Z2UpCiAgICAgICAgICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCiAgICAgICAgICAg
ICBsb2FkcSBbcHJvcGVydHlTdG9yYWdlLCB0Ml0sIHNjcmF0Y2gKICAgICAgICAgICAgIHN0b3Jl
cSBzY3JhdGNoLCBbY2ZyLCB0MSwgOF0KLSAgICAgICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9u
KDgsIHQxKQotICAgICAgICAgICAgdmFsdWVQcm9maWxlKHNjcmF0Y2gsIHQxKQorICAgICAgICAg
ICAgdmFsdWVQcm9maWxlKHNjcmF0Y2gsIDgsIHQxKQogICAgICAgICAgICAgZGlzcGF0Y2goOSkK
ICAgICAgICAgZW5kKQogICAgICAgICAgICAgCkBAIC04ODcsMTIgKzg4MSwxMSBAQCBfbGxpbnRf
b3BfZ2V0X2FycmF5X2xlbmd0aDoKICAgICBidGl6IHQyLCBJc0FycmF5LCAub3BHZXRBcnJheUxl
bmd0aFNsb3cKICAgICBidGl6IHQyLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0QXJyYXlMZW5n
dGhTbG93CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQotICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDgsIHQyKQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZseVt0M10sIHQw
CiAgICAgbG9hZGkgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjptX3B1
YmxpY0xlbmd0aFt0MF0sIHQwCiAgICAgYmlsdCB0MCwgMCwgLm9wR2V0QXJyYXlMZW5ndGhTbG93
CiAgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCi0gICAgdmFsdWVQcm9maWxlKHQwLCB0MikKKyAg
ICB2YWx1ZVByb2ZpbGUodDAsIDgsIHQyKQogICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCiAg
ICAgZGlzcGF0Y2goOSkKIApAQCAtMTA0OCw4ICsxMDQxLDcgQEAgX2xsaW50X29wX2dldF9ieV92
YWw6CiAKIC5vcEdldEJ5VmFsRG9uZToKICAgICBzdG9yZXEgdDIsIFtjZnIsIHQwLCA4XQotICAg
IGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQwKQotICAgIHZhbHVlUHJvZmlsZSh0MiwgdDApCisg
ICAgdmFsdWVQcm9maWxlKHQyLCA1LCB0MCkKICAgICBkaXNwYXRjaCg2KQogCiAub3BHZXRCeVZh
bE91dE9mQm91bmRzOgpAQCAtMTA3NiwxMCArMTA2OCw5IEBAIF9sbGludF9vcF9nZXRfYXJndW1l
bnRfYnlfdmFsOgogICAgIG5lZ2kgdDIKICAgICBzeGkycSB0MiwgdDIKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMSwgdDMpCi0gICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCiAgICAg
bG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2NmciwgdDIsIDhdLCB0MAogICAgIHN0b3JlcSB0MCwg
W2NmciwgdDMsIDhdCi0gICAgdmFsdWVQcm9maWxlKHQwLCB0MSkKKyAgICB2YWx1ZVByb2ZpbGUo
dDAsIDQsIHQxKQogICAgIGRpc3BhdGNoKDYpCiAKIC5vcEdldEFyZ3VtZW50QnlWYWxTbG93OgpA
QCAtMTU5OCw2NyArMTU4OSw2IEBAIF9sbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5l
OgogICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JUaHJvd1t0MV0sIHQwCiAgICAgam1wIFZNOjp0
YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIAotIyBHaXZlcyB5b3UgdGhlIHNjb3BlIGluIHQw
LCB3aGlsZSBhbGxvd2luZyB5b3UgdG8gb3B0aW9uYWxseSBwZXJmb3JtIGFkZGl0aW9uYWwgY2hl
Y2tzIG9uIHRoZQotIyBzY29wZXMgYXMgdGhleSBhcmUgdHJhdmVyc2VkLiBzY29wZUNoZWNrKCkg
aXMgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogdGhlIHJlZ2lzdGVyCi0jIGhvbGRpbmcgdGhl
IHNjb3BlLCBhbmQgYSByZWdpc3RlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBzY3JhdGNoLiBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdAotIyB1c2UgdDMsIHNvIHlvdSBjYW4gaG9sZCBzdHVmZiBpbiB0
MyBpZiBuZWVkIGJlLgotbWFjcm8gZ2V0RGVCcnVpam5TY29wZShkZUJydWlqaW5JbmRleE9wZXJh
bmQsIHNjb3BlQ2hlY2spCi0gICAgbG9hZHAgU2NvcGVDaGFpbltjZnJdLCB0MAotICAgIGxvYWRp
cyBkZUJydWlqaW5JbmRleE9wZXJhbmQsIHQyCi0KLSAgICBidGl6IHQyLCAuZG9uZQotCi0gICAg
bG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCi0gICAgYmluZXEgQ29kZUJsb2NrOjptX2NvZGVUeXBl
W3QxXSwgRnVuY3Rpb25Db2RlLCAubG9vcAotICAgIGJ0YnogQ29kZUJsb2NrOjptX25lZWRzQWN0
aXZhdGlvblt0MV0sIC5sb29wCi0KLSAgICBsb2FkaXMgQ29kZUJsb2NrOjptX2FjdGl2YXRpb25S
ZWdpc3Rlclt0MV0sIHQxCi0KLSAgICAjIE5lZWQgdG8gY29uZGl0aW9uYWxseSBza2lwIG92ZXIg
b25lIHNjb3BlLgotICAgIGJ0cHogW2NmciwgdDEsIDhdLCAubm9BY3RpdmF0aW9uCi0gICAgc2Nv
cGVDaGVjayh0MCwgdDEpCi0gICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKLS5ub0Fj
dGl2YXRpb246Ci0gICAgc3ViaSAxLCB0MgotCi0gICAgYnRpeiB0MiwgLmRvbmUKLS5sb29wOgot
ICAgIHNjb3BlQ2hlY2sodDAsIHQxKQotICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MF0sIHQw
Ci0gICAgc3ViaSAxLCB0MgotICAgIGJ0aW56IHQyLCAubG9vcAotCi0uZG9uZToKLWVuZAotCi1f
bGxpbnRfb3BfZ2V0X3Njb3BlZF92YXI6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgICMgT3Bl
cmFuZHMgYXJlIGFzIGZvbGxvd3M6Ci0gICAgIyBwY1sxXTogRGVzdGluYXRpb24gZm9yIHRoZSBs
b2FkCi0gICAgIyBwY1syXTogSW5kZXggb2YgcmVnaXN0ZXIgaW4gdGhlIHNjb3BlCi0gICAgIyAy
NFtQQiwgUEMsIDhdICBEZSBCcnVpamluIGluZGV4LgotICAgIGdldERlQnJ1aWpuU2NvcGUoMjRb
UEIsIFBDLCA4XSwgbWFjcm8gKHNjb3BlLCBzY3JhdGNoKSBlbmQpCi0gICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDEsIHQxKQotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MikKLQotICAg
IGxvYWRwIEpTVmFyaWFibGVPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKLSAgICBsb2FkcCBb
dDAsIHQyLCA4XSwgdDMKLSAgICBzdG9yZXAgdDMsIFtjZnIsIHQxLCA4XQotICAgIGxvYWRwIDMy
W1BCLCBQQywgOF0sIHQxCi0gICAgdmFsdWVQcm9maWxlKHQzLCB0MSkKLSAgICBkaXNwYXRjaCg1
KQotCi0KLV9sbGludF9vcF9wdXRfc2NvcGVkX3ZhcjoKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0g
ICAgZ2V0RGVCcnVpam5TY29wZSgxNltQQiwgUEMsIDhdLCBtYWNybyAoc2NvcGUsIHNjcmF0Y2gp
IGVuZCkKLSAgICBsb2FkaXMgMjRbUEIsIFBDLCA4XSwgdDEKLSAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHQxLCB0MykKLSAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MQotICAgIHdyaXRlQmFy
cmllcih0MykKLSAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQw
Ci0gICAgc3RvcmVwIHQzLCBbdDAsIHQxLCA4XQotICAgIGRpc3BhdGNoKDQpCiAKIG1hY3JvIG5h
dGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKQogICAgIHN0b3Jl
cCAwLCBDb2RlQmxvY2tbY2ZyXQpAQCAtMTcxNSwzICsxNjQ1LDIyOSBAQCBtYWNybyBuYXRpdmVD
YWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Ns
b3dfcGF0aF90cmFtcG9saW5lCiBlbmQKIAorCittYWNybyBnZXRHbG9iYWxPYmplY3QoZHN0KQor
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAorICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9i
YWxPYmplY3RbdDBdLCB0MAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbihkc3QsIHQxKQorICAg
IHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCitlbmQKKworbWFjcm8gdmFySW5qZWN0aW9uQ2hlY2so
c2xvd1BhdGgpCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCisgICAgbG9hZHAgQ29kZUJs
b2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCisgICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1f
dmFySW5qZWN0aW9uV2F0Y2hwb2ludFt0MF0sIHQwCisgICAgYnRibnogV2F0Y2hwb2ludFNldDo6
bV9pc0ludmFsaWRhdGVkW3QwXSwgc2xvd1BhdGgKK2VuZAorCittYWNybyByZXNvbHZlU2NvcGUo
KQorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
big0LCB0MikKKyAgICBidGJ6IENvZGVCbG9jazo6bV9uZWVkc0FjdGl2YXRpb25bdDBdLCAucmVz
b2x2ZVNjb3BlQWZ0ZXJBY3RpdmF0aW9uQ2hlY2sKKyAgICBsb2FkaXMgQ29kZUJsb2NrOjptX2Fj
dGl2YXRpb25SZWdpc3Rlclt0MF0sIHQxCisgICAgYnRweiBbY2ZyLCB0MSwgOF0sIC5yZXNvbHZl
U2NvcGVBZnRlckFjdGl2YXRpb25DaGVjaworICAgIGFkZGkgMSwgdDIKKworLnJlc29sdmVTY29w
ZUFmdGVyQWN0aXZhdGlvbkNoZWNrOgorICAgIGxvYWRwIFNjb3BlQ2hhaW5bY2ZyXSwgdDAKKyAg
ICBidGl6IHQyLCAucmVzb2x2ZVNjb3BlTG9vcEVuZAorCisucmVzb2x2ZVNjb3BlTG9vcDoKKyAg
ICBsb2FkcCBKU1Njb3BlOjptX25leHRbdDBdLCB0MAorICAgIHN1YmkgMSwgdDIKKyAgICBidGlu
eiB0MiwgLnJlc29sdmVTY29wZUxvb3AKKworLnJlc29sdmVTY29wZUxvb3BFbmQ6CisgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQorICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCitl
bmQKKworCitfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQorCisjckdsb2JhbFByb3BlcnR5OgorICAg
IGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxWYXIKKyAgICBnZXRHbG9iYWxPYmpl
Y3QoMSkKKyAgICBkaXNwYXRjaCg1KQorCisuckdsb2JhbFZhcjoKKyAgICBiaW5lcSB0MCwgR2xv
YmFsVmFyLCAuckNsb3N1cmVWYXIKKyAgICBnZXRHbG9iYWxPYmplY3QoMSkKKyAgICBkaXNwYXRj
aCg1KQorCisuckNsb3N1cmVWYXI6CisgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCisgICAgcmVzb2x2ZVNjb3BlKCkKKyAgICBk
aXNwYXRjaCg1KQorCisuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAg
ICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKKyAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFt
aWMpCisgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCisgICAgZGlzcGF0Y2goNSkKKworLnJHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGJpbmVxIHQwLCBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCisgICAg
dmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQorICAgIGdldEdsb2JhbE9iamVjdCgxKQorICAg
IGRpc3BhdGNoKDUpCisKKy5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAg
YmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKKyAg
ICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCisgICAgcmVzb2x2ZVNjb3BlKCkKKyAgICBk
aXNwYXRjaCg1KQorCisuckR5bmFtaWM6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfcmVz
b2x2ZV9zY29wZSkKKyAgICBkaXNwYXRjaCg1KQorCisKK21hY3JvIGxvYWRXaXRoU3RydWN0dXJl
Q2hlY2sob3BlcmFuZCwgc2xvd1BhdGgpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKG9wZXJh
bmQsIHQwKQorICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKKyAgICBsb2FkcEZyb21JbnN0cnVj
dGlvbig1LCB0MSkKKyAgICBicG5lcSBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDEsIHNsb3dQ
YXRoCitlbmQKKworbWFjcm8gZ2V0UHJvcGVydHkoKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
big2LCB0MSkKKyAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCisg
ICAgdmFsdWVQcm9maWxlKHQyLCA3LCB0MCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwg
dDApCisgICAgc3RvcmVxIHQyLCBbY2ZyLCB0MCwgOF0KK2VuZAorCittYWNybyBnZXRHbG9iYWxW
YXIoKQorICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQorICAgIGxvYWRxIFt0MF0sIHQw
CisgICAgdmFsdWVQcm9maWxlKHQwLCA3LCB0MSkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
MSwgdDEpCisgICAgc3RvcmVxIHQwLCBbY2ZyLCB0MSwgOF0KK2VuZAorCittYWNybyBnZXRDbG9z
dXJlVmFyKCkKKyAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQw
CisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQorICAgIGxvYWRxIFt0MCwgdDEsIDhd
LCB0MAorICAgIHZhbHVlUHJvZmlsZSh0MCwgNywgdDEpCisgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDEsIHQxKQorICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhdCitlbmQKKworX2xsaW50X29w
X2dldF9mcm9tX3Njb3BlOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oNCwgdDApCisgICAgYW5kaSBSZXNvbHZlTW9kZU1hc2ssIHQwCisKKyNnR2xvYmFs
UHJvcGVydHk6CisgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuZ0dsb2JhbFZhcgorICAg
IGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soMiwgLmdEeW5hbWljKQorICAgIGdldFByb3BlcnR5KCkK
KyAgICBkaXNwYXRjaCg4KQorCisuZ0dsb2JhbFZhcjoKKyAgICBiaW5lcSB0MCwgR2xvYmFsVmFy
LCAuZ0Nsb3N1cmVWYXIKKyAgICBnZXRHbG9iYWxWYXIoKQorICAgIGRpc3BhdGNoKDgpCisKKy5n
Q2xvc3VyZVZhcjoKKyAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLmdHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MKKyAgICBsb2FkVmFyaWFibGUoMiwgdDApCisgICAgZ2V0Q2xv
c3VyZVZhcigpCisgICAgZGlzcGF0Y2goOCkKKworLmdHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CisgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcywgLmdHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCisgICAgbG9hZFdpdGhT
dHJ1Y3R1cmVDaGVjaygyLCAuZ0R5bmFtaWMpCisgICAgZ2V0UHJvcGVydHkoKQorICAgIGRpc3Bh
dGNoKDgpCisKKy5nR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBiaW5lcSB0
MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLmdDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcworICAgIHZhckluamVjdGlvbkNoZWNrKC5nRHluYW1pYykKKyAgICBsb2Fk
VmFyaWFibGUoMiwgdDApCisgICAgZ2V0R2xvYmFsVmFyKCkKKyAgICBkaXNwYXRjaCg4KQorCisu
Z0Nsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGJpbmVxIHQwLCBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLmdEeW5hbWljCisgICAgdmFySW5qZWN0aW9uQ2hl
Y2soLmdEeW5hbWljKQorICAgIGxvYWRWYXJpYWJsZSgyLCB0MCkKKyAgICBnZXRDbG9zdXJlVmFy
KCkKKyAgICBkaXNwYXRjaCg4KQorCisuZ0R5bmFtaWM6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfZ2V0X2Zyb21fc2NvcGUpCisgICAgZGlzcGF0Y2goOCkKKworCittYWNybyBwdXRQcm9w
ZXJ0eSgpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQxKQorICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUodDEsIHQyKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKKyAg
ICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQorZW5kCisKK21hY3Jv
IHB1dEdsb2JhbFZhcigpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQorICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUodDAsIHQxKQorICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYs
IHQwKQorICAgIHN0b3JlcSB0MSwgW3QwXQorZW5kCisKK21hY3JvIHB1dENsb3N1cmVWYXIoKQor
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MSkKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQxLCB0MikKKyAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0s
IHQwCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQorICAgIHN0b3JlcSB0MiwgW3Qw
LCB0MSwgOF0KK2VuZAorCisKK19sbGludF9vcF9wdXRfdG9fc2NvcGU6CisgICAgdHJhY2VFeGVj
dXRpb24oKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MCkKKyAgICBhbmRpIFJlc29s
dmVNb2RlTWFzaywgdDAKKworI3BHbG9iYWxQcm9wZXJ0eToKKyAgICBiaW5lcSB0MCwgR2xvYmFs
UHJvcGVydHksIC5wR2xvYmFsVmFyCisgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjaygxLCAucER5
bmFtaWMpCisgICAgcHV0UHJvcGVydHkoKQorICAgIGRpc3BhdGNoKDcpCisKKy5wR2xvYmFsVmFy
OgorICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIsIC5wQ2xvc3VyZVZhcgorICAgIHB1dEdsb2JhbFZh
cigpCisgICAgZGlzcGF0Y2goNykKKworLnBDbG9zdXJlVmFyOgorICAgIGJpbmVxIHQwLCBDbG9z
dXJlVmFyLCAucEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcworICAgIGxvYWRW
YXJpYWJsZSgxLCB0MCkKKyAgICBwdXRDbG9zdXJlVmFyKCkKKyAgICBkaXNwYXRjaCg3KQorCisu
cEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBiaW5lcSB0MCwgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MKKyAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKDEsIC5wRHluYW1pYykKKyAg
ICBwdXRQcm9wZXJ0eSgpCisgICAgZGlzcGF0Y2goNykKKworLnBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgorICAgIGJpbmVxIHQwLCBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCAucENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCisgICAgdmFySW5qZWN0aW9u
Q2hlY2soLnBEeW5hbWljKQorICAgIHB1dEdsb2JhbFZhcigpCisgICAgZGlzcGF0Y2goNykKKwor
LnBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBiaW5lcSB0MCwgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5wRHluYW1pYworICAgIHZhckluamVjdGlvbkNo
ZWNrKC5wRHluYW1pYykKKyAgICBsb2FkVmFyaWFibGUoMSwgdDApCisgICAgcHV0Q2xvc3VyZVZh
cigpCisgICAgZGlzcGF0Y2goNykKKworLnBEeW5hbWljOgorICAgIGNhbGxTbG93UGF0aChfc2xv
d19wYXRoX3B1dF90b19zY29wZSkKKyAgICBkaXNwYXRjaCg3KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNp
b24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMjggKzEyNCwxNiBAQCBjb25zdCBIYXNo
RmxhZ3M4Qml0QnVmZmVyID0gNjQKICMgQ29waWVkIGZyb20gUHJvcGVydHlPZmZzZXQuaAogY29u
c3QgZmlyc3RPdXRPZkxpbmVPZmZzZXQgPSAxMDAKIAotIyBGcm9tIFJlc29sdmVPcGVyYXRpb25z
LmgKLWNvbnN0IFJlc29sdmVPcGVyYXRpb25GYWlsID0gMAotY29uc3QgUmVzb2x2ZU9wZXJhdGlv
blNldEJhc2VUb1VuZGVmaW5lZCA9IDEKLWNvbnN0IFJlc29sdmVPcGVyYXRpb25SZXR1cm5TY29w
ZUFzQmFzZSA9IDIKLWNvbnN0IFJlc29sdmVPcGVyYXRpb25TZXRCYXNlVG9TY29wZSA9IDMKLWNv
bnN0IFJlc29sdmVPcGVyYXRpb25TZXRCYXNlVG9HbG9iYWwgPSA0Ci1jb25zdCBSZXNvbHZlT3Bl
cmF0aW9uR2V0QW5kUmV0dXJuU2NvcGVkVmFyID0gNQotY29uc3QgUmVzb2x2ZU9wZXJhdGlvbkdl
dEFuZFJldHVybkdsb2JhbFZhciA9IDYKLWNvbnN0IFJlc29sdmVPcGVyYXRpb25HZXRBbmRSZXR1
cm5HbG9iYWxWYXJXYXRjaGFibGUgPSA3Ci1jb25zdCBSZXNvbHZlT3BlcmF0aW9uU2tpcFRvcFNj
b3BlTm9kZSA9IDgKLWNvbnN0IFJlc29sdmVPcGVyYXRpb25Ta2lwU2NvcGVzID0gOQotY29uc3Qg
UmVzb2x2ZU9wZXJhdGlvblJldHVybkdsb2JhbE9iamVjdEFzQmFzZSA9IDEwCi1jb25zdCBSZXNv
bHZlT3BlcmF0aW9uR2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHkgPSAxMQotY29uc3QgUmVzb2x2
ZU9wZXJhdGlvbkNoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZSA9IDEyCi0K
LWNvbnN0IFB1dFRvQmFzZU9wZXJhdGlvbktpbmRVbmluaXRpYWxpc2VkID0gMAotY29uc3QgUHV0
VG9CYXNlT3BlcmF0aW9uS2luZEdlbmVyaWMgPSAxCi1jb25zdCBQdXRUb0Jhc2VPcGVyYXRpb25L
aW5kUmVhZG9ubHkgPSAyCi1jb25zdCBQdXRUb0Jhc2VPcGVyYXRpb25LaW5kR2xvYmFsVmFyaWFi
bGVQdXQgPSAzCi1jb25zdCBQdXRUb0Jhc2VPcGVyYXRpb25LaW5kR2xvYmFsVmFyaWFibGVQdXRD
aGVja2VkID0gNAotY29uc3QgUHV0VG9CYXNlT3BlcmF0aW9uS2luZEdsb2JhbFByb3BlcnR5UHV0
ID0gNQotY29uc3QgUHV0VG9CYXNlT3BlcmF0aW9uS2luZFZhcmlhYmxlUHV0ID0gNgorIyBSZXNv
bHZlVHlwZQorY29uc3QgR2xvYmFsUHJvcGVydHkgPSAwCitjb25zdCBHbG9iYWxWYXIgPSAxCitj
b25zdCBDbG9zdXJlVmFyID0gMgorY29uc3QgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzID0gMworY29uc3QgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA9IDQKK2Nv
bnN0IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzID0gNQorY29uc3QgRHluYW1pYyA9
IDYKKworY29uc3QgUmVzb2x2ZU1vZGVNYXNrID0gMHhmZmZmCiAKICMgQWxsb2NhdGlvbiBjb25z
dGFudHMKIGlmIEpTVkFMVUU2NApAQCAtMTYyLDcgKzE1MCw2IEBAIGVsc2UKICAgICBjb25zdCBW
ZWN0b3JCdWZmZXJPZmZzZXQgPSA0CiBlbmQKIAotCiAjIFNvbWUgY29tbW9uIHV0aWxpdGllcy4K
IG1hY3JvIGNyYXNoKCkKICAgICBpZiBDX0xPT1AKQEAgLTUyNCw0MTYgKzUxMSwxMSBAQCBfbGxp
bnRfb3BfaW46CiAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfaW4pCiAgICAgZGlzcGF0Y2go
NCkKIAotbWFjcm8gZ2V0UHV0VG9CYXNlT3BlcmF0aW9uRmllbGQoc2NyYXRjaCwgc2NyYXRjaDEs
IGZpZWxkT2Zmc2V0LCBmaWVsZEdldHRlcikKLSAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCBz
Y3JhdGNoKQotICAgIGZpZWxkR2V0dGVyKGZpZWxkT2Zmc2V0W3NjcmF0Y2hdKQotZW5kCi0KLW1h
Y3JvIG1vdmVKU1ZhbHVlRnJvbVJlZ2lzdGVyV2l0aG91dFByb2ZpbGluZyh2YWx1ZSwgZGVzdEJ1
ZmZlciwgZGVzdE9mZnNldFJlZykKLSAgICBzdG9yZXEgdmFsdWUsIFtkZXN0QnVmZmVyLCBkZXN0
T2Zmc2V0UmVnLCA4XQotZW5kCi0KLQotbWFjcm8gbW92ZUpTVmFsdWVGcm9tUmVnaXN0ZXJzV2l0
aG91dFByb2ZpbGluZyh0YWcsIHBheWxvYWQsIGRlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcpCi0g
ICAgc3RvcmVpIHRhZywgVGFnT2Zmc2V0W2Rlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcsIDhdCi0g
ICAgc3RvcmVpIHBheWxvYWQsIFBheWxvYWRPZmZzZXRbZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJl
ZywgOF0KLWVuZAotCi1tYWNybyBwdXRUb0Jhc2VWYXJpYWJsZUJvZHkodmFyaWFibGVPZmZzZXQs
IHNjcmF0Y2gxLCBzY3JhdGNoMiwgc2NyYXRjaDMpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDEsIHNjcmF0Y2gxKQotICAgIGxvYWRwIFBheWxvYWRPZmZzZXRbY2ZyLCBzY3JhdGNoMSwgOF0s
IHNjcmF0Y2gxCi0gICAgbG9hZHAgSlNWYXJpYWJsZU9iamVjdDo6bV9yZWdpc3RlcnNbc2NyYXRj
aDFdLCBzY3JhdGNoMQotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCBzY3JhdGNoMikKLSAg
ICBpZiBKU1ZBTFVFNjQKLSAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzY3JhdGNoMiwg
c2NyYXRjaDMpCi0gICAgICAgIG1vdmVKU1ZhbHVlRnJvbVJlZ2lzdGVyV2l0aG91dFByb2ZpbGlu
ZyhzY3JhdGNoMywgc2NyYXRjaDEsIHZhcmlhYmxlT2Zmc2V0KQotICAgIGVsc2UKLSAgICAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2NyYXRjaDIsIHNjcmF0Y2gzLCBzY3JhdGNoMikg
IyBzY3JhdGNoMz10YWcsIHNjcmF0Y2gyPXBheWxvYWQKLSAgICAgICAgbW92ZUpTVmFsdWVGcm9t
UmVnaXN0ZXJzV2l0aG91dFByb2ZpbGluZyhzY3JhdGNoMywgc2NyYXRjaDIsIHNjcmF0Y2gxLCB2
YXJpYWJsZU9mZnNldCkKLSAgICBlbmQKLWVuZAotCi1fbGxpbnRfb3BfcHV0X3RvX2Jhc2VfdmFy
aWFibGU6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGdldFB1dFRvQmFzZU9wZXJhdGlvbkZp
ZWxkKHQwLCB0MSwgUHV0VG9CYXNlT3BlcmF0aW9uOjptX29mZnNldCwgbWFjcm8oYWRkcikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaXMgIGFkZHIs
IHQwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQpCi0gICAg
cHV0VG9CYXNlVmFyaWFibGVCb2R5KHQwLCB0MSwgdDIsIHQzKQotICAgIGRpc3BhdGNoKDUpCi0K
LV9sbGludF9vcF9wdXRfdG9fYmFzZToKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgZ2V0UHV0
VG9CYXNlT3BlcmF0aW9uRmllbGQodDAsIHQxLCAwLCBtYWNybyhhZGRyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXAgYWRkciwgdDAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYm5lcSBQdXRUb0Jhc2VPcGVy
YXRpb246Om1fa2luZEFzVWludDhbdDBdLCBQdXRUb0Jhc2VPcGVyYXRpb25LaW5kVmFyaWFibGVQ
dXQsIC5ub3RQdXRUb0Jhc2VWYXJpYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvYWRpcyBQdXRUb0Jhc2VPcGVyYXRpb246Om1fb2Zmc2V0W3QwXSwg
dDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jh
c2VWYXJpYWJsZUJvZHkodDAsIHQxLCB0MiwgdDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goNSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAubm90UHV0VG9CYXNlVmFyaWFibGU6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQpCi0gICAgY2FsbFNsb3dQYXRoKF9s
bGludF9zbG93X3BhdGhfcHV0X3RvX2Jhc2UpCi0gICAgZGlzcGF0Y2goNSkKLQotbWFjcm8gZ2V0
UmVzb2x2ZU9wZXJhdGlvbihyZXNvbHZlT3BlcmF0aW9uSW5kZXgsIGRlc3QpCi0gICAgbG9hZHBG
cm9tSW5zdHJ1Y3Rpb24ocmVzb2x2ZU9wZXJhdGlvbkluZGV4LCBkZXN0KQotICAgIGxvYWRwIFZl
Y3RvckJ1ZmZlck9mZnNldFtkZXN0XSwgZGVzdAotZW5kCi0KLW1hY3JvIGdldFNjb3BlKGxvYWRJ
bml0aWFsU2NvcGUsIHNjb3BlQ291bnQsIGRlc3QsIHNjcmF0Y2gpCi0gICAgbG9hZEluaXRpYWxT
Y29wZShkZXN0KQotICAgIGxvYWRpIHNjb3BlQ291bnQsIHNjcmF0Y2gKLQotICAgIGJ0aXogc2Ny
YXRjaCwgLmRvbmUKLS5sb29wOgotICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFtkZXN0XSwgZGVz
dAotICAgIHN1YmkgMSwgc2NyYXRjaAotICAgIGJ0aW56IHNjcmF0Y2gsIC5sb29wCi0KLS5kb25l
OgotZW5kCi0KLW1hY3JvIG1vdmVKU1ZhbHVlKHNvdXJjZUJ1ZmZlciwgc291cmNlT2Zmc2V0UmVn
LCBkZXN0QnVmZmVyLCBkZXN0T2Zmc2V0UmVnLCBwcm9maWxlT2Zmc2V0LCBzY3JhdGNoUmVnaXN0
ZXIpCi0gICAgaWYgSlNWQUxVRTY0Ci0gICAgICAgIGxvYWRxIFtzb3VyY2VCdWZmZXIsIHNvdXJj
ZU9mZnNldFJlZywgOF0sIHNjcmF0Y2hSZWdpc3RlcgotICAgICAgICBzdG9yZXEgc2NyYXRjaFJl
Z2lzdGVyLCBbZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJlZywgOF0KLSAgICAgICAgbG9hZHBGcm9t
SW5zdHJ1Y3Rpb24ocHJvZmlsZU9mZnNldCwgZGVzdE9mZnNldFJlZykKLSAgICAgICAgdmFsdWVQ
cm9maWxlKHNjcmF0Y2hSZWdpc3RlciwgZGVzdE9mZnNldFJlZykKLSAgICBlbHNlCi0gICAgICAg
IGxvYWRpIFBheWxvYWRPZmZzZXRbc291cmNlQnVmZmVyLCBzb3VyY2VPZmZzZXRSZWcsIDhdLCBz
Y3JhdGNoUmVnaXN0ZXIKLSAgICAgICAgc3RvcmVpIHNjcmF0Y2hSZWdpc3RlciwgUGF5bG9hZE9m
ZnNldFtkZXN0QnVmZmVyLCBkZXN0T2Zmc2V0UmVnLCA4XQotICAgICAgICBsb2FkaSBUYWdPZmZz
ZXRbc291cmNlQnVmZmVyLCBzb3VyY2VPZmZzZXRSZWcsIDhdLCBzb3VyY2VPZmZzZXRSZWcKLSAg
ICAgICAgc3RvcmVpIHNvdXJjZU9mZnNldFJlZywgVGFnT2Zmc2V0W2Rlc3RCdWZmZXIsIGRlc3RP
ZmZzZXRSZWcsIDhdCi0gICAgICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKHByb2ZpbGVPZmZzZXQs
IGRlc3RPZmZzZXRSZWcpCi0gICAgICAgIHZhbHVlUHJvZmlsZShzb3VyY2VPZmZzZXRSZWcsIHNj
cmF0Y2hSZWdpc3RlciwgZGVzdE9mZnNldFJlZykKLSAgICBlbmQKLWVuZAotCi1tYWNybyBtb3Zl
SlNWYWx1ZUZyb21TbG90KHNsb3QsIGRlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcsIHByb2ZpbGVP
ZmZzZXQsIHNjcmF0Y2hSZWdpc3RlcikKLSAgICBpZiBKU1ZBTFVFNjQKLSAgICAgICAgbG9hZHEg
W3Nsb3RdLCBzY3JhdGNoUmVnaXN0ZXIKLSAgICAgICAgc3RvcmVxIHNjcmF0Y2hSZWdpc3Rlciwg
W2Rlc3RCdWZmZXIsIGRlc3RPZmZzZXRSZWcsIDhdCi0gICAgICAgIGxvYWRwRnJvbUluc3RydWN0
aW9uKHByb2ZpbGVPZmZzZXQsIGRlc3RPZmZzZXRSZWcpCi0gICAgICAgIHZhbHVlUHJvZmlsZShz
Y3JhdGNoUmVnaXN0ZXIsIGRlc3RPZmZzZXRSZWcpCi0gICAgZWxzZQotICAgICAgICBsb2FkaSBQ
YXlsb2FkT2Zmc2V0W3Nsb3RdLCBzY3JhdGNoUmVnaXN0ZXIKLSAgICAgICAgc3RvcmVpIHNjcmF0
Y2hSZWdpc3RlciwgUGF5bG9hZE9mZnNldFtkZXN0QnVmZmVyLCBkZXN0T2Zmc2V0UmVnLCA4XQot
ICAgICAgICBsb2FkaSBUYWdPZmZzZXRbc2xvdF0sIHNsb3QKLSAgICAgICAgc3RvcmVpIHNsb3Qs
IFRhZ09mZnNldFtkZXN0QnVmZmVyLCBkZXN0T2Zmc2V0UmVnLCA4XQotICAgICAgICBsb2FkcEZy
b21JbnN0cnVjdGlvbihwcm9maWxlT2Zmc2V0LCBkZXN0T2Zmc2V0UmVnKQotICAgICAgICB2YWx1
ZVByb2ZpbGUoc2xvdCwgc2NyYXRjaFJlZ2lzdGVyLCBkZXN0T2Zmc2V0UmVnKQotICAgIGVuZAot
ZW5kCi0KLW1hY3JvIG1vdmVKU1ZhbHVlRnJvbVJlZ2lzdGVyKHZhbHVlLCBkZXN0QnVmZmVyLCBk
ZXN0T2Zmc2V0UmVnLCBwcm9maWxlT2Zmc2V0KQotICAgIHN0b3JlcSB2YWx1ZSwgW2Rlc3RCdWZm
ZXIsIGRlc3RPZmZzZXRSZWcsIDhdCi0gICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24ocHJvZmlsZU9m
ZnNldCwgZGVzdE9mZnNldFJlZykKLSAgICB2YWx1ZVByb2ZpbGUodmFsdWUsIGRlc3RPZmZzZXRS
ZWcpCi1lbmQKLQotbWFjcm8gbW92ZUpTVmFsdWVGcm9tUmVnaXN0ZXJzKHRhZywgcGF5bG9hZCwg
ZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJlZywgcHJvZmlsZU9mZnNldCkKLSAgICBzdG9yZWkgdGFn
LCBUYWdPZmZzZXRbZGVzdEJ1ZmZlciwgZGVzdE9mZnNldFJlZywgOF0KLSAgICBzdG9yZWkgcGF5
bG9hZCwgUGF5bG9hZE9mZnNldFtkZXN0QnVmZmVyLCBkZXN0T2Zmc2V0UmVnLCA4XQotICAgIGxv
YWRwRnJvbUluc3RydWN0aW9uKHByb2ZpbGVPZmZzZXQsIGRlc3RPZmZzZXRSZWcpCi0gICAgdmFs
dWVQcm9maWxlKHRhZywgcGF5bG9hZCwgZGVzdE9mZnNldFJlZykKLWVuZAotCi1fbGxpbnRfb3Bf
cmVzb2x2ZV9nbG9iYWxfcHJvcGVydHk6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGdldFJl
c29sdmVPcGVyYXRpb24oMywgdDApCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCi0gICAg
bG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MV0sIHQxCi0gICAgbG9hZHAgUmVzb2x2
ZU9wZXJhdGlvbjo6bV9zdHJ1Y3R1cmVbdDBdLCB0MgotICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1
Y3R1cmVbdDFdLCB0MiwgLmxsaW50X29wX3Jlc29sdmVfbG9jYWwKLSAgICBsb2FkaXMgUmVzb2x2
ZU9wZXJhdGlvbjo6bV9vZmZzZXRbdDBdLCB0MAotICAgIGlmIEpTVkFMVUU2NAotICAgICAgICBs
b2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0S25vd25Ob3RJbmxpbmUodDAsIHQxLCB0MikKLSAg
ICAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQotICAgICAgICBtb3ZlSlNWYWx1ZUZy
b21SZWdpc3Rlcih0MiwgY2ZyLCB0MCwgNCkKLSAgICBlbHNlCi0gICAgICAgIGxvYWRQcm9wZXJ0
eUF0VmFyaWFibGVPZmZzZXRLbm93bk5vdElubGluZSh0MCwgdDEsIHQyLCB0MykKLSAgICAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQotICAgICAgICBtb3ZlSlNWYWx1ZUZyb21SZWdp
c3RlcnModDIsIHQzLCBjZnIsIHQwLCA0KQotICAgIGVuZAotICAgIGRpc3BhdGNoKDUpCi0KLV9s
bGludF9vcF9yZXNvbHZlX2dsb2JhbF92YXI6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGdl
dFJlc29sdmVPcGVyYXRpb24oMywgdDApCi0gICAgbG9hZHAgUmVzb2x2ZU9wZXJhdGlvbjo6bV9y
ZWdpc3RlckFkZHJlc3NbdDBdLCB0MAotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkK
LSAgICBtb3ZlSlNWYWx1ZUZyb21TbG90KHQwLCBjZnIsIHQxLCA0LCB0MykKLSAgICBkaXNwYXRj
aCg1KQotCi1tYWNybyByZXNvbHZlU2NvcGVkVmFyQm9keShyZXNvbHZlT3BlcmF0aW9ucykKLSAg
ICAjIEZpcnN0IFJlc29sdmVPcGVyYXRpb24gaXMgdG8gc2tpcCBzY29wZSBjaGFpbiBub2Rlcwot
ICAgIGdldFNjb3BlKG1hY3JvKGRlc3QpCi0gICAgICAgICAgICAgICAgIGxvYWRwIFNjb3BlQ2hh
aW4gKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIGRlc3QKLSAgICAgICAgICAgICBlbmQsCi0gICAgICAg
ICAgICAgUmVzb2x2ZU9wZXJhdGlvbjo6bV9zY29wZXNUb1NraXBbcmVzb2x2ZU9wZXJhdGlvbnNd
LCB0MSwgdDIpCi0gICAgbG9hZHAgSlNWYXJpYWJsZU9iamVjdDo6bV9yZWdpc3RlcnNbdDFdLCB0
MSAjIHQxIG5vdyBjb250YWlucyB0aGUgYWN0aXZhdGlvbiByZWdpc3RlcnMKLSAgICAKLSAgICAj
IFNlY29uZCBSZXNvbHZlT3BlcmF0aW9uIHRlbGxzIHVzIHdoYXQgb2Zmc2V0IHRvIHVzZQotICAg
IGxvYWRpcyBSZXNvbHZlT3BlcmF0aW9uOjptX29mZnNldCArIHNpemVvZiBSZXNvbHZlT3BlcmF0
aW9uW3Jlc29sdmVPcGVyYXRpb25zXSwgdDIKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwg
dDMpCi0gICAgbW92ZUpTVmFsdWUodDEsIHQyLCBjZnIsIHQzLCA0LCB0MCkKLWVuZAotCi1fbGxp
bnRfb3BfcmVzb2x2ZV9zY29wZWRfdmFyOgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBnZXRS
ZXNvbHZlT3BlcmF0aW9uKDMsIHQwKQotICAgIHJlc29sdmVTY29wZWRWYXJCb2R5KHQwKQotICAg
IGRpc3BhdGNoKDUpCi0gICAgCi1fbGxpbnRfb3BfcmVzb2x2ZV9zY29wZWRfdmFyX29uX3RvcF9z
Y29wZToKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgZ2V0UmVzb2x2ZU9wZXJhdGlvbigzLCB0
MCkKLQotICAgICMgTG9hZCBkZXN0aW5hdGlvbiBpbmRleAotICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigxLCB0MykKLQotICAgICMgV2Uga25vdyB3ZSB3YW50IHRoZSB0b3Agc2NvcGUgY2hhaW4g
ZW50cnkKLSAgICBsb2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MQotICAg
IGxvYWRwIEpTVmFyaWFibGVPYmplY3Q6Om1fcmVnaXN0ZXJzW3QxXSwgdDEgIyB0MSBub3cgY29u
dGFpbnMgdGhlIGFjdGl2YXRpb24gcmVnaXN0ZXJzCi0gICAgCi0gICAgIyBTZWNvbmQgUmVzb2x2
ZU9wZXJhdGlvbiB0ZWxscyB1cyB3aGF0IG9mZnNldCB0byB1c2UKLSAgICBsb2FkaXMgUmVzb2x2
ZU9wZXJhdGlvbjo6bV9vZmZzZXQgKyBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvblt0MF0sIHQyCi0K
LSAgICBtb3ZlSlNWYWx1ZSh0MSwgdDIsIGNmciwgdDMsIDQsIHQwKQotICAgIGRpc3BhdGNoKDUp
Ci0KLV9sbGludF9vcF9yZXNvbHZlX3Njb3BlZF92YXJfd2l0aF90b3Bfc2NvcGVfY2hlY2s6Ci0g
ICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGdldFJlc29sdmVPcGVyYXRpb24oMywgdDApCi0gICAg
IyBGaXJzdCBSZXNvbHZlT3BlcmF0aW9uIHRlbGxzIHVzIHdoYXQgcmVnaXN0ZXIgdG8gY2hlY2sK
LSAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlvbjo6bV9hY3RpdmF0aW9uUmVnaXN0ZXJbdDBdLCB0
MQotCi0gICAgbG9hZHAgUGF5bG9hZE9mZnNldFtjZnIsIHQxLCA4XSwgdDEKLQotICAgIGdldFNj
b3BlKG1hY3JvKGRlc3QpCi0gICAgICAgICAgICAgICAgIGJ0cHogdDEsIC5zY29wZUNoYWluTm90
Q3JlYXRlZAotICAgICAgICAgICAgICAgICAgICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QxXSwg
ZGVzdAotICAgICAgICAgICAgICAgICBqbXAgLmRvbmUKLSAgICAgICAgICAgICAgICAgLnNjb3Bl
Q2hhaW5Ob3RDcmVhdGVkOgotICAgICAgICAgICAgICAgICAgICAgbG9hZHAgU2NvcGVDaGFpbiAr
IFBheWxvYWRPZmZzZXRbY2ZyXSwgZGVzdAotICAgICAgICAgICAgICAgICAuZG9uZToKLSAgICAg
ICAgICAgICBlbmQsIAotICAgICAgICAgICAgICMgU2Vjb25kIFJlc29sdmVPcGVyYXRpb24gdGVs
bHMgdXMgaG93IG1hbnkgbW9yZSBub2RlcyB0byBza2lwCi0gICAgICAgICAgICAgUmVzb2x2ZU9w
ZXJhdGlvbjo6bV9zY29wZXNUb1NraXAgKyBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvblt0MF0sIHQx
LCB0MikKLSAgICBsb2FkcCBKU1ZhcmlhYmxlT2JqZWN0OjptX3JlZ2lzdGVyc1t0MV0sIHQxICMg
dDEgbm93IGNvbnRhaW5zIHRoZSBhY3RpdmF0aW9uIHJlZ2lzdGVycwotICAgIAotICAgICMgVGhp
cmQgb3BlcmF0aW9uIHRlbGxzIHVzIHdoYXQgb2Zmc2V0IHRvIHVzZQotICAgIGxvYWRpcyBSZXNv
bHZlT3BlcmF0aW9uOjptX29mZnNldCArIDIgKiBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvblt0MF0s
IHQyCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQzKQotICAgIG1vdmVKU1ZhbHVlKHQx
LCB0MiwgY2ZyLCB0MywgNCwgdDApCi0gICAgZGlzcGF0Y2goNSkKLQotX2xsaW50X29wX3Jlc29s
dmU6Ci0ubGxpbnRfb3BfcmVzb2x2ZV9sb2NhbDoKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAg
Z2V0UmVzb2x2ZU9wZXJhdGlvbigzLCB0MCkKLSAgICBidHB6IHQwLCAubm9JbnN0cnVjdGlvbnMK
LSAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlvbjo6bV9vcGVyYXRpb25bdDBdLCB0MQotICAgIGJp
bmVxIHQxLCBSZXNvbHZlT3BlcmF0aW9uU2tpcFNjb3BlcywgLm5vdFNraXBTY29wZXMKLSAgICAg
ICAgcmVzb2x2ZVNjb3BlZFZhckJvZHkodDApCi0gICAgICAgIGRpc3BhdGNoKDUpCi0ubm90U2tp
cFNjb3BlczoKLSAgICBiaW5lcSB0MSwgUmVzb2x2ZU9wZXJhdGlvbkdldEFuZFJldHVybkdsb2Jh
bFZhciwgLm5vdEdldEFuZFJldHVybkdsb2JhbFZhcgotICAgICAgICBsb2FkcCBSZXNvbHZlT3Bl
cmF0aW9uOjptX3JlZ2lzdGVyQWRkcmVzc1t0MF0sIHQwCi0gICAgICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbigxLCB0MSkKLSAgICAgICAgbW92ZUpTVmFsdWVGcm9tU2xvdCh0MCwgY2ZyLCB0MSwg
NCwgdDMpCi0gICAgICAgIGRpc3BhdGNoKDUpCi0ubm90R2V0QW5kUmV0dXJuR2xvYmFsVmFyOgot
Ci0ubm9JbnN0cnVjdGlvbnM6Ci0gICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVz
b2x2ZSkKLSAgICBkaXNwYXRjaCg1KQotCi1fbGxpbnRfb3BfcmVzb2x2ZV9iYXNlX3RvX2dsb2Jh
bDoKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCi0g
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MV0sIHQxCi0gICAgbG9hZGlzRnJv
bUluc3RydWN0aW9uKDEsIHQzKQotICAgIGlmIEpTVkFMVUU2NAotICAgICAgICBtb3ZlSlNWYWx1
ZUZyb21SZWdpc3Rlcih0MSwgY2ZyLCB0MywgNikKLSAgICBlbHNlCi0gICAgICAgIG1vdmUgQ2Vs
bFRhZywgdDIKLSAgICAgICAgbW92ZUpTVmFsdWVGcm9tUmVnaXN0ZXJzKHQyLCB0MSwgY2ZyLCB0
MywgNikKLSAgICBlbmQKLSAgICBkaXNwYXRjaCg3KQotCi1fbGxpbnRfb3BfcmVzb2x2ZV9iYXNl
X3RvX2dsb2JhbF9keW5hbWljOgotICAgIGptcCBfbGxpbnRfb3BfcmVzb2x2ZV9iYXNlCi0KLV9s
bGludF9vcF9yZXNvbHZlX2Jhc2VfdG9fc2NvcGU6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAg
IGdldFJlc29sdmVPcGVyYXRpb24oNCwgdDApCi0gICAgIyBGaXJzdCBSZXNvbHZlT3BlcmF0aW9u
IGlzIHRvIHNraXAgc2NvcGUgY2hhaW4gbm9kZXMKLSAgICBnZXRTY29wZShtYWNybyhkZXN0KQot
ICAgICAgICAgICAgICAgICBsb2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdLCBk
ZXN0Ci0gICAgICAgICAgICAgZW5kLAotICAgICAgICAgICAgIFJlc29sdmVPcGVyYXRpb246Om1f
c2NvcGVzVG9Ta2lwW3QwXSwgdDEsIHQyKQotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0
MykKLSAgICBpZiBKU1ZBTFVFNjQKLSAgICAgICAgbW92ZUpTVmFsdWVGcm9tUmVnaXN0ZXIodDEs
IGNmciwgdDMsIDYpCi0gICAgZWxzZQotICAgICAgICBtb3ZlIENlbGxUYWcsIHQyCi0gICAgICAg
IG1vdmVKU1ZhbHVlRnJvbVJlZ2lzdGVycyh0MiwgdDEsIGNmciwgdDMsIDYpCi0gICAgZW5kCi0g
ICAgZGlzcGF0Y2goNykKLQotX2xsaW50X29wX3Jlc29sdmVfYmFzZV90b19zY29wZV93aXRoX3Rv
cF9zY29wZV9jaGVjazoKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgZ2V0UmVzb2x2ZU9wZXJh
dGlvbig0LCB0MCkKLSAgICAjIEZpcnN0IFJlc29sdmVPcGVyYXRpb24gdGVsbHMgdXMgd2hhdCBy
ZWdpc3RlciB0byBjaGVjawotICAgIGxvYWRpcyBSZXNvbHZlT3BlcmF0aW9uOjptX2FjdGl2YXRp
b25SZWdpc3Rlclt0MF0sIHQxCi0KLSAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0W2NmciwgdDEsIDhd
LCB0MQotCi0gICAgZ2V0U2NvcGUobWFjcm8oZGVzdCkKLSAgICAgICAgICAgICAgICAgYnRweiB0
MSwgLnNjb3BlQ2hhaW5Ob3RDcmVhdGVkCi0gICAgICAgICAgICAgICAgICAgICBsb2FkcCBKU1Nj
b3BlOjptX25leHRbdDFdLCBkZXN0Ci0gICAgICAgICAgICAgICAgIGptcCAuZG9uZQotICAgICAg
ICAgICAgICAgICAuc2NvcGVDaGFpbk5vdENyZWF0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICBs
b2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFtjZnJdLCBkZXN0Ci0gICAgICAgICAgICAg
ICAgIC5kb25lOgotICAgICAgICAgICAgIGVuZCwgCi0gICAgICAgICAgICAgIyBTZWNvbmQgUmVz
b2x2ZU9wZXJhdGlvbiB0ZWxscyB1cyBob3cgbWFueSBtb3JlIG5vZGVzIHRvIHNraXAKLSAgICAg
ICAgICAgICBSZXNvbHZlT3BlcmF0aW9uOjptX3Njb3Blc1RvU2tpcCArIHNpemVvZiBSZXNvbHZl
T3BlcmF0aW9uW3QwXSwgdDEsIHQyKQotCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQz
KQotICAgIGlmIEpTVkFMVUU2NAotICAgICAgICBtb3ZlSlNWYWx1ZUZyb21SZWdpc3Rlcih0MSwg
Y2ZyLCB0MywgNikKLSAgICBlbHNlCi0gICAgICAgIG1vdmUgQ2VsbFRhZywgdDIKLSAgICAgICAg
bW92ZUpTVmFsdWVGcm9tUmVnaXN0ZXJzKHQyLCB0MSwgY2ZyLCB0MywgNikKLSAgICBlbmQKLSAg
ICBkaXNwYXRjaCg3KQotCi1fbGxpbnRfb3BfcmVzb2x2ZV9iYXNlOgotICAgIHRyYWNlRXhlY3V0
aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9yZXNvbHZlX2Jhc2UpCi0g
ICAgZGlzcGF0Y2goNykKLQogX2xsaW50X29wX2Vuc3VyZV9wcm9wZXJ0eV9leGlzdHM6CiAgICAg
dHJhY2VFeGVjdXRpb24oKQogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2Vuc3Vy
ZV9wcm9wZXJ0eV9leGlzdHMpCiAgICAgZGlzcGF0Y2goMykKIAotbWFjcm8gaW50ZXJwcmV0UmVz
b2x2ZVdpdGhCYXNlKG9wY29kZUxlbmd0aCwgc2xvd1BhdGgpCi0gICAgdHJhY2VFeGVjdXRpb24o
KQotICAgIGdldFJlc29sdmVPcGVyYXRpb24oNCwgdDApCi0gICAgYnRweiB0MCwgLnNsb3dQYXRo
Ci0KLSAgICBsb2FkcCBTY29wZUNoYWluW2Nmcl0sIHQzCi0gICAgIyBHZXQgdGhlIGJhc2UKLSAg
ICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlvbjo6bV9vcGVyYXRpb25bdDBdLCB0MgotCi0gICAgYmlu
ZXEgdDIsIFJlc29sdmVPcGVyYXRpb25Ta2lwU2NvcGVzLCAubm90U2tpcFNjb3BlcwotICAgICAg
ICBnZXRTY29wZShtYWNybyhkZXN0KSBtb3ZlIHQzLCBkZXN0IGVuZCwKLSAgICAgICAgICAgICAg
ICAgUmVzb2x2ZU9wZXJhdGlvbjo6bV9zY29wZXNUb1NraXBbdDBdLCB0MSwgdDIpCi0gICAgICAg
IG1vdmUgdDEsIHQzCi0gICAgICAgIGFkZHAgc2l6ZW9mIFJlc29sdmVPcGVyYXRpb24sIHQwLCB0
MAotICAgICAgICBqbXAgLmhhdmVDb3JyZWN0U2NvcGUKLQotICAgIC5ub3RTa2lwU2NvcGVzOgot
Ci0gICAgYmluZXEgdDIsIFJlc29sdmVPcGVyYXRpb25Ta2lwVG9wU2NvcGVOb2RlLCAubm90U2tp
cFRvcFNjb3BlTm9kZQotICAgICAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlvbjo6bV9hY3RpdmF0
aW9uUmVnaXN0ZXJbdDBdLCB0MQotICAgICAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0W2NmciwgdDEs
IDhdLCB0MQotCi0gICAgICAgIGdldFNjb3BlKG1hY3JvKGRlc3QpCi0gICAgICAgICAgICAgICAg
ICAgICBidHB6IHQxLCAuc2NvcGVDaGFpbk5vdENyZWF0ZWQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2FkcCBKU1Njb3BlOjptX25leHRbdDFdLCBkZXN0Ci0gICAgICAgICAgICAgICAgICAg
ICBqbXAgLmRvbmUKLSAgICAgICAgICAgICAgICAgICAgIC5zY29wZUNoYWluTm90Q3JlYXRlZDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkcCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNl
dFtjZnJdLCBkZXN0Ci0gICAgICAgICAgICAgICAgICAgICAuZG9uZToKLSAgICAgICAgICAgICAg
ICAgZW5kLAotICAgICAgICAgICAgICAgICBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvbiArIFJlc29s
dmVPcGVyYXRpb246Om1fc2NvcGVzVG9Ta2lwW3QwXSwgdDEsIHQyKQotICAgICAgICBtb3ZlIHQx
LCB0MwotICAgICAgICAjIFdlJ3ZlIGhhbmRsZWQgdHdvIG9wY29kZXMgaGVyZQotICAgICAgICBh
ZGRwIDIgKiBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvbiwgdDAsIHQwCi0KLSAgICAubm90U2tpcFRv
cFNjb3BlTm9kZToKLQotICAgIC5oYXZlQ29ycmVjdFNjb3BlOgotCi0gICAgIyB0MyBub3cgY29u
dGFpbnMgdGhlIGNvcnJlY3QgU2NvcGUKLSAgICAjIHQwIGNvbnRhaW5zIGEgcG9pbnRlciB0byB0
aGUgY3VycmVudCBSZXNvbHZlT3BlcmF0aW9uCi0KLSAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlv
bjo6bV9vcGVyYXRpb25bdDBdLCB0MgotICAgICMgdDIgY29udGFpbnMgdGhlIG5leHQgaW5zdHJ1
Y3Rpb24KLQotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICAjIHQxIG5vdyBj
b250YWlucyB0aGUgaW5kZXggZm9yIHRoZSBiYXNlIHJlZ2lzdGVyCi0KLSAgICBiaW5lcSB0Miwg
UmVzb2x2ZU9wZXJhdGlvblNldEJhc2VUb1Njb3BlLCAubm90U2V0QmFzZVRvU2NvcGUKLSAgICAg
ICAgaWYgSlNWQUxVRTY0Ci0gICAgICAgICAgICBzdG9yZXEgdDMsIFtjZnIsIHQxLCA4XQotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MSwg
OF0KLSAgICAgICAgICAgIHN0b3JlaSBDZWxsVGFnLCBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0KLSAg
ICAgICAgZW5kCi0gICAgICAgIGptcCAuaGF2ZVNldEJhc2UKLQotICAgIC5ub3RTZXRCYXNlVG9T
Y29wZToKLQotICAgIGJpbmVxIHQyLCBSZXNvbHZlT3BlcmF0aW9uU2V0QmFzZVRvVW5kZWZpbmVk
LCAubm90U2V0QmFzZVRvVW5kZWZpbmVkCi0gICAgICAgIGlmIEpTVkFMVUU2NAotICAgICAgICAg
ICAgc3RvcmVxIFZhbHVlVW5kZWZpbmVkLCBbY2ZyLCB0MSwgOF0KLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3RvcmVpIDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MSwgOF0KLSAgICAgICAgICAg
IHN0b3JlaSBVbmRlZmluZWRUYWcsIFRhZ09mZnNldFtjZnIsIHQxLCA4XQotICAgICAgICBlbmQK
LSAgICAgICAgam1wIC5oYXZlU2V0QmFzZQotCi0gICAgLm5vdFNldEJhc2VUb1VuZGVmaW5lZDoK
LSAgICBiaW5lcSB0MiwgUmVzb2x2ZU9wZXJhdGlvblNldEJhc2VUb0dsb2JhbCwgLnNsb3dQYXRo
Ci0gICAgICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDNdLCB0MgotICAgICAgICBsb2Fk
cCBTdHJ1Y3R1cmU6Om1fZ2xvYmFsT2JqZWN0W3QyXSwgdDIKLSAgICAgICAgaWYgSlNWQUxVRTY0
Ci0gICAgICAgICAgICBzdG9yZXEgdDIsIFtjZnIsIHQxLCA4XQotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MSwgOF0KLSAgICAgICAgICAg
IHN0b3JlaSBDZWxsVGFnLCBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0KLSAgICAgICAgZW5kCi0KLSAg
ICAuaGF2ZVNldEJhc2U6Ci0KLSAgICAjIEdldCB0aGUgdmFsdWUKLQotICAgICMgTG9hZCB0aGUg
b3BlcmF0aW9uIGludG8gdDIKLSAgICBsb2FkaXMgUmVzb2x2ZU9wZXJhdGlvbjo6bV9vcGVyYXRp
b24gKyBzaXplb2YgUmVzb2x2ZU9wZXJhdGlvblt0MF0sIHQyCi0KLSAgICAjIExvYWQgdGhlIGlu
ZGV4IGZvciB0aGUgdmFsdWUgcmVnaXN0ZXIgaW50byB0MQotICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigyLCB0MSkKLQotICAgIGJpbmVxIHQyLCBSZXNvbHZlT3BlcmF0aW9uR2V0QW5kUmV0dXJu
U2NvcGVkVmFyLCAubm90R2V0QW5kUmV0dXJuU2NvcGVkVmFyCi0gICAgICAgIGxvYWRwIEpTVmFy
aWFibGVPYmplY3Q6Om1fcmVnaXN0ZXJzW3QzXSwgdDMgIyB0MyBub3cgY29udGFpbnMgdGhlIGFj
dGl2YXRpb24gcmVnaXN0ZXJzCi0KLSAgICAgICAgIyBTZWNvbmQgUmVzb2x2ZU9wZXJhdGlvbiB0
ZWxscyB1cyB3aGF0IG9mZnNldCB0byB1c2UKLSAgICAgICAgbG9hZGlzIFJlc29sdmVPcGVyYXRp
b246Om1fb2Zmc2V0ICsgc2l6ZW9mIFJlc29sdmVPcGVyYXRpb25bdDBdLCB0MgotICAgICAgICBt
b3ZlSlNWYWx1ZSh0MywgdDIsIGNmciwgdDEsIG9wY29kZUxlbmd0aCAtIDEsIHQwKQotICAgICAg
ICBkaXNwYXRjaChvcGNvZGVMZW5ndGgpCi0KLSAgICAubm90R2V0QW5kUmV0dXJuU2NvcGVkVmFy
OgotICAgIGJpbmVxIHQyLCBSZXNvbHZlT3BlcmF0aW9uR2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVy
dHksIC5zbG93UGF0aAotICAgICAgICBjYWxsU2xvd1BhdGgoc2xvd1BhdGgpCi0gICAgICAgIGRp
c3BhdGNoKG9wY29kZUxlbmd0aCkKLQotLnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93
UGF0aCkKLSAgICBkaXNwYXRjaChvcGNvZGVMZW5ndGgpCi1lbmQKLQotX2xsaW50X29wX3Jlc29s
dmVfd2l0aF9iYXNlOgotICAgIGludGVycHJldFJlc29sdmVXaXRoQmFzZSg3LCBfbGxpbnRfc2xv
d19wYXRoX3Jlc29sdmVfd2l0aF9iYXNlKQotCi0KLV9sbGludF9vcF9yZXNvbHZlX3dpdGhfdGhp
czoKLSAgICBpbnRlcnByZXRSZXNvbHZlV2l0aEJhc2UoNiwgX2xsaW50X3Nsb3dfcGF0aF9yZXNv
bHZlX3dpdGhfdGhpcykKLQotCiBtYWNybyB3aXRoSW5saW5lU3RvcmFnZShvYmplY3QsIHByb3Bl
cnR5U3RvcmFnZSwgY29udGludWF0aW9uKQogICAgICMgSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0
IGlzIHRoZSBwcm9wZXJ0eSBzdG9yYWdlLCBhbmQgdGhhdCB0aGUKICAgICAjIHByb3BlcnR5IHN0
b3JhZ2UgcmVnaXN0ZXIgaXMgdW51c2VkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTUxMzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NjQsNyArNDY0LDcgQEAgSlNWYWx1ZSBDTG9vcDo6ZXhlY3V0ZShD
YWxsRnJhbWUqIGNhbGxGcgogICAgICAgICAvLyBmcm9tIEFyZ3VtZW50Q291bnQudGFnKCkgKHNl
ZSB0aGUgZGlzcGF0Y2hBZnRlckNhbGwoKSBtYWNybyB1c2VkIGluCiAgICAgICAgIC8vIHRoZSBj
YWxsVGFyZ2V0RnVuY3Rpb24oKSBtYWNybyBpbiB0aGUgbGxpbnQgYXNtIGZpbGVzKS4KICAgICAg
ICAgLy8KLSAgICAgICAgLy8gRm9yIHRoZSBDIGxvb3AsIHdlIGRvbid0IGhhdmUgdGhlIEpJVCBz
dHViIHRvIHRoaXMgd29yayBmb3IgdXMuIFNvLAorICAgICAgICAvLyBGb3IgdGhlIEMgbG9vcCwg
d2UgZG9uJ3QgaGF2ZSB0aGUgSklUIHN0dWIgdG8gZG8gdGhpcyB3b3JrIGZvciB1cy4gU28sCiAg
ICAgICAgIC8vIHdlIGp1bXAgdG8gbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQuCiAKICAgICAg
ICAgdlBDID0gY2FsbEZyYW1lLT5jdXJyZW50VlBDKCk7CkBAIC00OTAsMTEgKzQ5MCwxMiBAQCBK
U1ZhbHVlIENMb29wOjpleGVjdXRlKENhbGxGcmFtZSogY2FsbEZyCiAgICAgICAgIHJCYXNlUEMu
dnAgPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkKIAotICAgICAgICBnb3RvIG9wX2dlbmVyaWNfcmV0dXJuX3BvaW50OworICAgICAg
ICBnb3RvIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50OwogCiAgICAgfSAvLyBFTkQgZG9SZXR1
cm5IZWxwZXIuCiAKIAorI2lmIEVOQUJMRShDT01QVVRFRF9HT1RPX09QQ09ERVMpCiAgICAgLy8g
S2VlcCB0aGUgY29tcGlsZXIgaGFwcHkgc28gdGhhdCBpdCBkb2Vzbid0IGNvbXBsYWluIGFib3V0
IHVudXNlZAogICAgIC8vIGxhYmVscyBmb3IgdGhlIExMSW50IHRyYW1wb2xpbmUgZ2x1ZS4gVGhl
IGxhYmVscyBhcmUgYXV0b21hdGljYWxseQogICAgIC8vIGVtaXR0ZWQgYnkgbGFiZWwgbWFjcm9z
IGFib3ZlLCBhbmQgc29tZSBvZiB0aGVtIGFyZSByZWZlcmVuY2VkIGJ5CkBAIC01MDUsNyArNTA2
LDcgQEAgSlNWYWx1ZSBDTG9vcDo6ZXhlY3V0ZShDYWxsRnJhbWUqIGNhbGxGcgogICAgICAgICBV
TlVTRURfTEFCRUwoX19vcGNvZGUpOwogICAgICAgICBGT1JfRUFDSF9PUENPREVfSUQoTExJTlRf
T1BDT0RFX0VOVFJZKTsKICAgICAjdW5kZWYgTExJTlRfT1BDT0RFX0VOVFJZCi0KKyNlbmRpZgog
CiAgICAgI3VuZGVmIE5FWFRfSU5TVFJVQ1RJT04KICAgICAjdW5kZWYgREVGSU5FX09QQ09ERQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMTUx
MzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5n
IGNvcHkpCkBAIC00OTEsOSArNDkxLDkgQEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAKICAgICBk
ZWYgaGFuZGxlWDg2SW50Q29tcGFyZShvcGNvZGVTdWZmaXgsIGtpbmQpCiAgICAgICAgIGlmIG9w
ZXJhbmRzWzBdLmlzX2E/IEltbWVkaWF0ZSBhbmQgb3BlcmFuZHNbMF0udmFsdWUgPT0gMCBhbmQg
b3BlcmFuZHNbMV0uaXNfYT8gUmVnaXN0ZXJJRCBhbmQgKG9wY29kZVN1ZmZpeCA9PSAiZSIgb3Ig
b3Bjb2RlU3VmZml4ID09ICJuZSIpCi0gICAgICAgICAgICAkYXNtLnB1dHMgInRlc3Qje3g4NlN1
ZmZpeChraW5kKX0gI3tvcGVyYW5kc1sxXS54ODZPcGVyYW5kKGtpbmQpfSIKKyAgICAgICAgICAg
ICRhc20ucHV0cyAidGVzdCN7eDg2U3VmZml4KGtpbmQpfSAje29wZXJhbmRzWzFdLng4Nk9wZXJh
bmQoa2luZCl9LCAje29wZXJhbmRzWzFdLng4Nk9wZXJhbmQoa2luZCl9IgogICAgICAgICBlbHNp
ZiBvcGVyYW5kc1sxXS5pc19hPyBJbW1lZGlhdGUgYW5kIG9wZXJhbmRzWzFdLnZhbHVlID09IDAg
YW5kIG9wZXJhbmRzWzBdLmlzX2E/IFJlZ2lzdGVySUQgYW5kIChvcGNvZGVTdWZmaXggPT0gImUi
IG9yIG9wY29kZVN1ZmZpeCA9PSAibmUiKQotICAgICAgICAgICAgJGFzbS5wdXRzICJ0ZXN0I3t4
ODZTdWZmaXgoa2luZCl9ICN7b3BlcmFuZHNbMF0ueDg2T3BlcmFuZChraW5kKX0iCisgICAgICAg
ICAgICAkYXNtLnB1dHMgInRlc3Qje3g4NlN1ZmZpeChraW5kKX0gICN7b3BlcmFuZHNbMF0ueDg2
T3BlcmFuZChraW5kKX0sICN7b3BlcmFuZHNbMF0ueDg2T3BlcmFuZChraW5kKX0iCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICRhc20ucHV0cyAiY21wI3t4ODZTdWZmaXgoa2luZCl9ICN7b3Bl
cmFuZHNbMV0ueDg2T3BlcmFuZChraW5kKX0sICN7b3BlcmFuZHNbMF0ueDg2T3BlcmFuZChraW5k
KX0iCiAgICAgICAgIGVuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzEsNyArMjcxLDcgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVG9TdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRv
VGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIC8vIDEuIExldCBhcnJheSBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRoaXMgdmFsdWUuCiAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CkBAIC0zNjYsMTEgKzM2Niwx
MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTQXJy
YXk6OnNfaW5mbykpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAg
IEpTT2JqZWN0KiB0aGlzT2JqID0gYXNBcnJheSh0aGlzVmFsdWUpOworICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCkBAIC00MDksNyArNDA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
Sm9pbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4
ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC00NTUsNyArNDU1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jQ29uY2F0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAgICAgSlNBcnJheSogYXJyID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCAwKTsKICAgICB1bnNpZ25lZCBuID0gMDsKICAgICBKU1ZhbHVlIGN1
ckFyZyA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKQEAgLTQ5MCw3ICs0OTAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQb3AoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsK
IAogICAgIGlmIChpc0pTQXJyYXkodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShhc0FycmF5KHRoaXNWYWx1ZSktPnBvcChleGVjKSk7CkBAIC01MTksNyArNTE5LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpOwogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzVmFsdWUpICYmIGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA9PSAxKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzVmFs
dWUpOwpAQCAtNTUyLDcgKzU1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1Jl
dmVyc2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChl
eGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTkwLDcgKzU5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTYxMiw3ICs2MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2xpY2UoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIubmV0c2NhcGUuY29tL2RvY3Mv
bWFudWFscy9qcy9jbGllbnQvanNyZWYvYXJyYXkuaHRtIzExOTM3MTMgb3IgMTUuNC40LjEwCi0g
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhl
Yyk7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQz
MihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MjIsNyArNzIyLDcgQEAgc3RhdGlj
IGJvb2wgcGVyZm9ybVNsb3dTb3J0KEV4ZWNTdGF0ZSogZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU29ydChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNP
YmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7Cisg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMs
IFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNP
YmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVj
KTsKICAgICBpZiAoIWxlbmd0aCB8fCBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqKTsKQEAgLTc5Nyw3ICs3OTcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiB7CiAgICAgLy8gMTUuNC40LjEyCiAK
LSAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b09iamVjdChl
eGVjKTsKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTg1NSw3ICs4NTUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiB7CiAgICAgLy8gMTUuNC40LjEz
CiAKLSAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b09iamVj
dChleGVjKTsKKyAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50
b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTg3OCw3ICs4NzgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvT2JqZWN0KGV4
ZWMpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhp
cyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50
MzIoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtOTM3LDcgKzkzNyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNP
YmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7Cisg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMs
IFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNP
YmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVj
KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC05OTksNyArOTk5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTT2JqZWN0
KiB0aGlzT2JqID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpT
T2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTA1Nyw3ICsxMDU3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jRm9yRWFjaChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNPYmplY3Qq
IHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNP
YmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMTA3LDcgKzExMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogdGhp
c09iaiA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVj
dCogdGhpc09iaiA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSkudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTExNjQsNyArMTE2NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRnVuY1JlZHVjZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNPYmplY3QqIHRoaXNP
YmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3Qq
IHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
LnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC0xMjQxLDcgKzEyNDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNSZWR1Y2VSaWdodChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNPYmplY3QqIHRo
aXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmpl
Y3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmotPmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gMTUuNC40LjE0Ci0g
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9PYmplY3QoZXhl
Yyk7CisgICAgSlNPYmplY3QqIHRoaXNPYmogPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS50b1VJbnQz
MihleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xMzQxLDcgKzEzNDEsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIC8vIDE1LjQuNC4xNQotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+aG9zdFRoaXNW
YWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNyArNzUsNyBAQCB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ2FjaGVUeXBlczxVbmxpbmtlZEV2
CiB9OwogCiB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBjbGFzcyBFeGVj
dXRhYmxlVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2RlQmxv
Y2soVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNv
bnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNl
ckVycm9yJiBlcnJvcikKK1VubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRDb2Rl
QmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YWJsZSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBKU1BhcnNlclN0cmljdG5lc3Mgc3RyaWN0bmVzcywgRGVidWdnZXJNb2RlIGRl
YnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9y
KQogewogICAgIFNvdXJjZUNvZGVLZXkga2V5ID0gU291cmNlQ29kZUtleShzb3VyY2UsIFN0cmlu
ZygpLCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46OmNvZGVUeXBlLCBzdHJpY3Ru
ZXNzKTsKICAgICBDb2RlQ2FjaGVNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3NvdXJjZUNv
ZGUuYWRkKGtleSwgU291cmNlQ29kZVZhbHVlKCkpOwpAQCAtOTcsNyArOTcsNyBAQCBVbmxpbmtl
ZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAKICAgICBVbmxpbmtlZENvZGVCbG9j
a1R5cGUqIHVubGlua2VkQ29kZSA9IFVubGlua2VkQ29kZUJsb2NrVHlwZTo6Y3JlYXRlKCZ2bSwg
ZXhlY3V0YWJsZS0+ZXhlY3V0YWJsZUluZm8oKSk7CiAgICAgdW5saW5rZWRDb2RlLT5yZWNvcmRQ
YXJzZShyb290Tm9kZS0+ZmVhdHVyZXMoKSwgcm9vdE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVz
KCksIHJvb3ROb2RlLT5saW5lTm8oKSAtIHNvdXJjZS5maXJzdExpbmUoKSwgcm9vdE5vZGUtPmxh
c3RMaW5lKCkgLSByb290Tm9kZS0+bGluZU5vKCkpOwotICAgIE93blB0cjxCeXRlY29kZUdlbmVy
YXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcih2bSwgc2NvcGUs
IHJvb3ROb2RlLmdldCgpLCB1bmxpbmtlZENvZGUsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2Rl
KSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5l
dyBCeXRlY29kZUdlbmVyYXRvcih2bSwgcm9vdE5vZGUuZ2V0KCksIHVubGlua2VkQ29kZSwgZGVi
dWdnZXJNb2RlLCBwcm9maWxlck1vZGUpKSk7CiAgICAgZXJyb3IgPSBnZW5lcmF0b3ItPmdlbmVy
YXRlKCk7CiAgICAgcm9vdE5vZGUtPmRlc3Ryb3lEYXRhKCk7CiAgICAgaWYgKGVycm9yLm1fdHlw
ZSAhPSBQYXJzZXJFcnJvcjo6RXJyb3JOb25lKSB7CkBAIC0xMTYsMTIgKzExNiwxMiBAQCBVbmxp
bmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0Q29kCiAKIFVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9jayogQ29kZUNhY2hlOjpnZXRQcm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgUHJvZ3JhbUV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJT
dHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVy
TW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKLSAgICByZXR1cm4gZ2V0
Q29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4odm0sIDAsIGV4ZWN1dGFibGUsIHNv
dXJjZSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9yKTsKKyAg
ICByZXR1cm4gZ2V0Q29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4odm0sIGV4ZWN1
dGFibGUsIHNvdXJjZSwgc3RyaWN0bmVzcywgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVy
cm9yKTsKIH0KIAotVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldEV2YWxDb2Rl
QmxvY2soVk0mIHZtLCBKU1Njb3BlKiBzY29wZSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3Ms
IERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBh
cnNlckVycm9yJiBlcnJvcikKK1VubGlua2VkRXZhbENvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRF
dmFsQ29kZUJsb2NrKFZNJiB2bSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MsIERlYnVnZ2Vy
TW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9y
JiBlcnJvcikKIHsKLSAgICByZXR1cm4gZ2V0Q29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9j
az4odm0sIHNjb3BlLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9k
ZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgcmV0dXJuIGdldENvZGVCbG9jazxVbmxpbmtl
ZEV2YWxDb2RlQmxvY2s+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIHN0cmljdG5lc3MsIGRlYnVn
Z2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7CiB9CiAKIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKFZN
JiB2bSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQ
YXJzZXJFcnJvciYgZXJyb3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b2RlQ2FjaGUuaAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw3ICsyMzUsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8Q29kZUNhY2hlPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgQ29kZUNhY2hlKTsgfQogCiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiBnZXRQcm9ncmFtQ29kZUJsb2NrKFZNJiwgUHJvZ3JhbUV4ZWN1dGFibGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJiwgSlNQYXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwg
UGFyc2VyRXJyb3ImKTsKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGdldEV2YWxDb2RlQmxv
Y2soVk0mLCBKU1Njb3BlKiwgRXZhbEV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQ
YXJzZXJTdHJpY3RuZXNzLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3Im
KTsKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGdldEV2YWxDb2RlQmxvY2soVk0mLCBFdmFs
RXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVn
Z2VyTW9kZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOwogICAgIFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiBnZXRGdW5jdGlvbkV4ZWN1dGFibGVGcm9tR2xvYmFsQ29kZShWTSYsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBTb3VyY2VDb2RlJiwgUGFyc2VyRXJyb3ImKTsKICAgICB+
Q29kZUNhY2hlKCk7CiAKQEAgLTI0OCw3ICsyNDgsNyBAQCBwcml2YXRlOgogICAgIENvZGVDYWNo
ZSgpOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3Mg
RXhlY3V0YWJsZVR5cGU+IAotICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2V0Q29kZUJsb2Nr
KFZNJiwgSlNTY29wZSosIEV4ZWN1dGFibGVUeXBlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFy
c2VyU3RyaWN0bmVzcywgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBhcnNlckVycm9yJik7
CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRDb2RlQmxvY2soVk0mLCBFeGVjdXRhYmxl
VHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlclN0cmljdG5lc3MsIERlYnVnZ2VyTW9k
ZSwgUHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYpOwogCiAgICAgQ29kZUNhY2hlTWFwIG1fc291
cmNlQ29kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
OCw2ICs0NjgsNjcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKICAg
ICBSRVRVUk4oT1BfQygyKS5qc1ZhbHVlKCkudG9QcmltaXRpdmUoZXhlYykpOwogfQogCitTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKK3sKKyAgICBCRUdJTigpOworICAg
IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbMl0u
dS5vcGVyYW5kKTsKKyAgICBSRVRVUk4oSlNTY29wZTo6cmVzb2x2ZShleGVjLCBleGVjLT5zY29w
ZSgpLCBpZGVudCkpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fc2Nv
cGUpCit7CisgICAgQkVHSU4oKTsKKyAgICBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCk7CisgICAgSlNPYmplY3QqIHNjb3Bl
ID0ganNDYXN0PEpTT2JqZWN0Kj4oT1AoMikuanNWYWx1ZSgpKTsKKyAgICBSZXNvbHZlTW9kZUFu
ZFR5cGUgbW9kZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKKworICAgIFByb3BlcnR5U2xvdCBz
bG90KHNjb3BlKTsKKyAgICBpZiAoIXNjb3BlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQs
IHNsb3QpKSB7CisgICAgICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkgPT0gVGhyb3dJZk5vdEZv
dW5kKQorICAgICAgICAgICAgUkVUVVJOKHRocm93RXJyb3IoZXhlYywgY3JlYXRlVW5kZWZpbmVk
VmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpKTsKKyAgICAgICAgUkVUVVJOKGpzVW5kZWZpbmVk
KCkpOworICAgIH0KKworICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5
IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93
IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgorICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgp
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgaWYgKG1vZGVBbmRU
eXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgICAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgcGNbNV0u
dS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHNjb3BlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOworICAgICAgICB9CisgICAgfQorCisgICAgUkVUVVJOKHNsb3QuZ2V0
VmFsdWUoZXhlYywgaWRlbnQpKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90
b19zY29wZSkKK3sKKyAgICBCRUdJTigpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CisgICAgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50
aWZpZXIocGNbMl0udS5vcGVyYW5kKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNP
YmplY3QqPihPUCgxKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBPUF9DKDMpLmpz
VmFsdWUoKTsKKyAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPSBSZXNvbHZlTW9k
ZUFuZFR5cGUocGNbNF0udS5vcGVyYW5kKTsKKworICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkg
PT0gVGhyb3dJZk5vdEZvdW5kICYmICFzY29wZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKQor
ICAgICAgICBUSFJPVyhjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KSk7
CisKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsK
KyAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOworCisgICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9u
J3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8g
Y2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCisgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9
PSBHbG9iYWxQcm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlKCkg
JiYgc2xvdC5iYXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJl
LnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEVORCgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpIHx8IEVOQUJMRShMTElOVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZp
c2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSw5IEBAIFNMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfaW4pOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9k
ZWxfYnlfdmFsKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3RyY2F0KTsKIFNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKK1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29wZSk7CitTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2dldF9mcm9tX3Njb3BlKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfcHV0X3RvX3Njb3BlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNTEz
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiwyNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmRl
c3Ryb3koSlNDZWxsKiBjCiAKIGNvbnN0IENsYXNzSW5mbyBFdmFsRXhlY3V0YWJsZTo6c19pbmZv
ID0geyAiRXZhbEV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEV2YWxFeGVjdXRhYmxlKSB9OwogCitFdmFsRXhlY3V0YWJsZSog
RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCkgCit7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBpZiAoIWds
b2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZUV2YWxFcnJvcihleGVjLCBnbG9iYWxPYmplY3QtPmV2YWxEaXNhYmxlZEVycm9yTWVzc2Fn
ZSgpKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEV2YWxFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbEV4ZWN1dGFibGU+KCpl
eGVjLT5oZWFwKCkpKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250
ZXh0KTsKKyAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKKworICAg
IFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZSA9IGdsb2JhbE9iamVjdC0+
Y3JlYXRlRXZhbENvZGVCbG9jayhleGVjLCBleGVjdXRhYmxlKTsKKyAgICBpZiAoIXVubGlua2Vk
RXZhbENvZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtl
ZEV2YWxDb2RlQmxvY2suc2V0KGV4ZWMtPnZtKCksIGV4ZWN1dGFibGUsIHVubGlua2VkRXZhbENv
ZGUpOworCisgICAgcmV0dXJuIGV4ZWN1dGFibGU7Cit9CisKIEV2YWxFeGVjdXRhYmxlOjpFdmFs
RXhlY3V0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9v
bCBpblN0cmljdENvbnRleHQpCiAgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMtPnZtKCkuZXZh
bEV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMsIHNvdXJjZSwgaW5TdHJpY3RDb250ZXh0
KQogewpAQCAtMTk5LDUwICsyMTksMzEgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21w
aWxlSW50ZXJuYQogICAgIGlmIChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlv
bkZhaWxlZDsKICAgICAKLSNpZiAhRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0oaml0VHlw
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotI2VuZGlmCi0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgCiAgICAgUmVmUHRyPEV2YWxDb2Rl
QmxvY2s+IG5ld0NvZGVCbG9jazsKICAgICAKICAgICBpZiAoISFtX2V2YWxDb2RlQmxvY2spIHsK
ICAgICAgICAgbmV3Q29kZUJsb2NrID0gYWRvcHRSZWYobmV3IEV2YWxDb2RlQmxvY2soQ29kZUJs
b2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX2V2YWxDb2RlQmxvY2spKTsKICAgICAgICAgbmV3Q29k
ZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4obV9l
dmFsQ29kZUJsb2NrKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjb3Bl
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxleGlj
YWxHbG9iYWxPYmplY3QpOwotICAgICAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QtPmV2YWxF
bmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFdmFs
RXJyb3IoZXhlYywgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdl
KCkpKTsKLQotICAgICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKLSAgICAgICAgVW5saW5r
ZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+
Y3JlYXRlRXZhbENvZGVCbG9jayhleGVjLCBzY29wZSwgdGhpcywgJmV4Y2VwdGlvbik7Ci0gICAg
ICAgIGlmICghdW5saW5rZWRFdmFsQ29kZSkKLSAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247
Ci0KLSAgICAgICAgbV91bmxpbmtlZEV2YWxDb2RlQmxvY2suc2V0KCp2bSwgdGhpcywgdW5saW5r
ZWRFdmFsQ29kZSk7CisgICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBFdmFsQ29k
ZUJsb2NrKHRoaXMsIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdldCgpLCBzY29wZSwgc291cmNl
KCkucHJvdmlkZXIoKSkpOwogICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90
dG9tVGllckpJVCgpKSA9PSAhbV9ldmFsQ29kZUJsb2NrKTsKLQotICAgICAgICBuZXdDb2RlQmxv
Y2sgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCB1bmxpbmtlZEV2YWxDb2RlLCBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZS0+bG9jYWxEZXB0
aCgpKSk7CiAgICAgfQogCiAgICAgQ29tcGlsYXRpb25SZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFy
ZUZvckV4ZWN1dGlvbigKICAgICAgICAgZXhlYywgbV9ldmFsQ29kZUJsb2NrLCBuZXdDb2RlQmxv
Y2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwogICAg
IGlmIChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSB0aGVSZXN1bHQ7CisKICAgICByZXR1cm4g
MDsKIH0KIAorI2lmIEVOQUJMRShKSVQpCiBDb21waWxhdGlvblJlc3VsdCBFdmFsRXhlY3V0YWJs
ZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+
IHBsYW4pCiB7CiAgICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoCiAgICAgICAgIHBsYW4sIG1fZXZhbENvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgMCwg
MCk7CiB9CiAKLSNpZiBFTkFCTEUoSklUKQogdm9pZCBFdmFsRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlKFZNJiB2bSkKIHsKICAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9ldmFs
Q29kZUJsb2NrKTsKQEAgLTMxOSwzNiArMzIwLDMwIEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0
YWJsZTo6Y29tcGlsZUludGUKICAgICBpZiAocmVzdWx0KQogICAgICAgICAqcmVzdWx0ID0gQ29t
cGlsYXRpb25GYWlsZWQ7CiAgICAgCi0jaWYgIUVOQUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwotICAgIFVOVVNFRF9QQVJBTShqaXRUeXBlKTsKLSAgICBVTlVTRURfUEFSQU0oYnl0
ZWNvZGVJbmRleCk7Ci0jZW5kaWYKLSAgICAKICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4g
bmV3Q29kZUJsb2NrOwogICAgIAogICAgIGlmICghIW1fcHJvZ3JhbUNvZGVCbG9jaykgewogICAg
ICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb2RlQmxv
Y2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fcHJvZ3JhbUNvZGVCbG9jaykpOwogICAgICAgICBuZXdD
b2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPiht
X3Byb2dyYW1Db2RlQmxvY2spKTsKICAgICB9IGVsc2UgewotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBuZXdDb2Rl
QmxvY2sgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBtX3VubGlua2VkUHJv
Z3JhbUNvZGVCbG9jay5nZXQoKSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpKSk7
CisgICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRo
aXMsIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwgc291cmNlKCkucHJv
dmlkZXIoKSkpOwogICAgIH0KIAogICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHBy
ZXBhcmVGb3JFeGVjdXRpb24oCiAgICAgICAgIGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jaywgbmV3
Q29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRlY29kZUluZGV4
KTsKICAgICBpZiAocmVzdWx0KQogICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OworCiAgICAg
cmV0dXJuIDA7CiB9CiAKKyNpZiBFTkFCTEUoSklUKQogQ29tcGlsYXRpb25SZXN1bHQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8
REZHOjpQbGFuPiBwbGFuKQogewogICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVmZXJyZWRP
cHRpbWl6ZWRDb2RlKAogICAgICAgICBwbGFuLCBtX3Byb2dyYW1Db2RlQmxvY2ssIG1faml0Q29k
ZUZvckNhbGwsIDAsIDApOwogfQogCi0jaWYgRU5BQkxFKEpJVCkKIHZvaWQgUHJvZ3JhbUV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7CiAgICAgamV0dGlzb25Db2Rl
QmxvY2sodm0sIG1fcHJvZ3JhbUNvZGVCbG9jayk7CkBAIC01MTksNyArNTE0LDcgQEAgUGFzc1Jl
ZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeAogICAgIFBhcnNlckVycm9yIGVycm9y
OwogICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0RlYnVn
Z2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CiAgICAgUHJvZmlsZXJNb2RlIHByb2Zp
bGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9m
aWxlck9mZjsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
ayA9IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKnZtLCBzY29wZSwgbV9zb3Vy
Y2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9y
KTsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1f
dW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKnZtLCBtX3NvdXJjZSwgc3BlY2lhbGl6
YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOwogICAgIHJlY29y
ZFBhcnNlKG1fdW5saW5rZWRFeGVjdXRhYmxlLT5mZWF0dXJlcygpLCBtX3VubGlua2VkRXhlY3V0
YWJsZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgbGluZU5vKCksIGxhc3RMaW5lKCkpOwogCiAg
ICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgewpAQCAtNTI3LDcgKzUyMiw3IEBAIFBhc3NSZWZQ
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlz
LCB1bmxpbmtlZENvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
b3VyY2UoKS5zdGFydE9mZnNldCgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlv
bkNvZGVCbG9jayh0aGlzLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZSgpLnByb3Zp
ZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCkpKTsKIH0KIAogCkBAIC01MzgsMTIgKzUzMyw2
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBpZiAocmVz
dWx0KQogICAgICAgICAqcmVzdWx0ID0gQ29tcGlsYXRpb25GYWlsZWQ7CiAgICAgCi0jaWYgIUVO
QUJMRShKSVQpCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFVOVVNFRF9QQVJBTShqaXRU
eXBlKTsKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2Rl
SW5kZXgpOwotI2VuZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRp
ZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlv
bjsKICAgICAKQEAgLTU2MCwxMiArNTQ5LDE0IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVGb3IKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIEVOQUJMRShKSVQpCiBDb21w
aWxhdGlvblJlc3VsdCBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRp
bWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikKIHsKICAgICByZXR1
cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKICAgICAgICAgcGxhbiwg
bV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCAmbV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrLAogICAgICAgICAmbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCk7CiB9CisjZW5k
aWYKIAogSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdElu
dGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJVENvZGU6OkpJVFR5cGUg
aml0VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKIHsKQEAgLTU3NCwxMiArNTY1LDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvcgogICAgIGlmIChyZXN1bHQpCiAgICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlv
bkZhaWxlZDsKICAgICAKLSNpZiAhRU5BQkxFKEpJVCkKLSAgICBVTlVTRURfUEFSQU0oaml0VHlw
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwotICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUlu
ZGV4KTsKLSNlbmRpZgotICAgIAogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0
b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbjsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9
IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QsIGV4Y2VwdGlvbik7
CkBAIC01OTIsOSArNTc3LDExIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICAgICAgICAgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgaWYg
KHJlc3VsdCkKICAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKKwogICAgIHJldHVybiAwOwog
fQogCisjaWYgRU5BQkxFKEpJVCkKIENvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoUGFzc1JlZlB0
cjxERkc6OlBsYW4+IHBsYW4pCiB7CiAgICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJl
ZE9wdGltaXplZENvZGUoCkBAIC02MDIsNyArNTg5LDYgQEAgQ29tcGlsYXRpb25SZXN1bHQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpyZQogICAgICAgICAmbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFy
aXR5Q2hlY2ssICZtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QpOwogfQogCi0jaWYgRU5BQkxF
KEpJVCkKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JD
YWxsKFZNJiB2bSkKIHsKICAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tGb3JD
YWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDEyICsyNTAsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBtX3ByZXY7CiAgICAgICAgIEV4ZWN1dGFibGVC
YXNlKiBtX25leHQ7CiAKLSNpZiBFTkFCTEUoSklUKQogICAgICAgICBSZWZQdHI8SklUQ29kZT4g
bV9qaXRDb2RlRm9yQ2FsbDsKICAgICAgICAgUmVmUHRyPEpJVENvZGU+IG1faml0Q29kZUZvckNv
bnN0cnVjdDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjazsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrOwotI2VuZGlmCiAgICAgfTsKIAogICAgIGNsYXNzIE5h
dGl2ZUV4ZWN1dGFibGUgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewpAQCAtNDUzLDEyICs0NTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAqbV9ldmFsQ29kZUJsb2Nr
OwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENv
bnRleHQpIAotICAgICAgICB7Ci0gICAgICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxFeGVjdXRhYmxlPigqZXhlYy0+aGVh
cCgpKSkgRXZhbEV4ZWN1dGFibGUoZXhlYywgc291cmNlLCBpc0luU3RyaWN0Q29udGV4dCk7Ci0g
ICAgICAgICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbihleGVjLT52bSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBleGVjdXRhYmxlOwotICAgICAgICB9CisgICAgICAgIHN0YXRpYyBFdmFs
RXhlY3V0YWJsZSogY3JlYXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sIGlz
SW5TdHJpY3RDb250ZXh0KTsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIFBhc3NSZWZQdHI8
SklUQ29kZT4gZ2VuZXJhdGVkSklUQ29kZSgpCkBAIC00NzksNiArNDcyLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7
IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNT
dHJpY3RNb2RlKCksIGZhbHNlKTsgfQogCisgICAgICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygp
IHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQorICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7IHJldHVybiBtX3VubGlua2Vk
RXZhbENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7IH0KKwogICAgIHByaXZhdGU6
CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAg
ICAgRXZhbEV4ZWN1dGFibGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5l
c3MuaAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0aW9uSGFybmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBACiAKICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAotI2lmIEVOQUJMRShKSVQpCi0KICNpbmNsdWRlICJD
b21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRG
R1BsYW4uaCIKQEAgLTQzLDYgKzQxLDcgQEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBh
cmVGb3JFeGVjdQogICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2Nr
LCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCiAgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBl
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogeworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUlu
ZGV4KTsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGppdFR5cGUpKSB7CiAgICAgICAgIC8vIFN0YXJ0IG9mZiBpbiB0aGUgbG93IGxldmVsIGludGVy
cHJldGVyLgpAQCAtNjYsNiArNjUsOCBAQCBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFy
ZUZ1bmN0aW9uCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVj
b2RlSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwogI2lm
IEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkp
IHsKICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2ZWwgaW50ZXJwcmV0ZXIuCkBA
IC05MiwxMSArOTMsMTQgQEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGluc3RhbGxPcHRpbWl6
ZQogICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGppdENvZGVXaXRoQXJpdHlDaGVjaywKICAgICBpbnQqIG51bVBhcmFtZXRlcnMpCiB7CisgICAg
VU5VU0VEX1BBUkFNKGppdENvZGVXaXRoQXJpdHlDaGVjayk7CiAgICAgaWYgKHJlc3VsdCAhPSBD
b21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgCisjaWYg
RU5BQkxFKEpJVCkKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdp
dGhBcml0eUNoZWNrKTsKLSAgICAKKyNlbmRpZgorCiAgICAgc2luayA9IGNvZGVCbG9jazsKICAg
ICAKICAgICBpZiAobnVtUGFyYW1ldGVycykKQEAgLTEzOSw2ICsxNDMsNyBAQCBpbmxpbmUgQ29t
cGlsYXRpb25SZXN1bHQgcHJlcGFyZUZ1bmN0aW9uCiAgICAgICAgIHNpbmssIGNvZGVCbG9jaywg
aml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCAmbnVtUGFyYW1ldGVycyk7CiB9CiAKKyNp
ZiBFTkFCTEUoSklUKQogdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KIGlubGluZSBD
b21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKICAgICBQ
YXNzUmVmUHRyPERGRzo6UGxhbj4gcGFzc2VkUGxhbiwgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBz
aW5rLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCkBAIC0xNTgsMTAgKzE2Myw5IEBAIGlubGlu
ZSBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmUKICAgICAgICAgaml0Q29kZVdpdGhB
cml0eUNoZWNrID8gKmppdENvZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpLAogICAgICAgICBudW1QYXJhbWV0ZXJzKTsKIH0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KICNlbmRpZiAvLyBFeGVjdXRpb25IYXJu
ZXNzX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmgJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw4ICs2Miw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKIAotICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVz
RHluYW1pY0NoZWNrcykgY29uc3Q7Ci0KICAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKQEAgLTEzOCwxMiArMTM2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVy
biBhc0FjdGl2YXRpb24oanNWYWx1ZSgpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU0Fj
dGl2YXRpb246OmlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IHN5bWJvbFRhYmxlKCkt
PnVzZXNOb25TdHJpY3RFdmFsKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAg
ICBpbmxpbmUgaW50IEpTQWN0aXZhdGlvbjo6cmVnaXN0ZXJzT2Zmc2V0KFNoYXJlZFN5bWJvbFRh
YmxlKiBzeW1ib2xUYWJsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBzdG9yYWdlT2Zmc2V0KCkg
LSAoc3ltYm9sVGFibGUtPmNhcHR1cmVTdGFydCgpICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5
LDcgQEAgSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KFZNJiB2bSwgUwogICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlLCAwKQogICAgICwgbV9tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChJbml0aWFsaXplZFdhdGNoaW5nKSkpCiAg
ICAgLCBtX2hhdmluZ0FCYWRUaW1lV2F0Y2hwb2ludChhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNl
dChJbml0aWFsaXplZFdhdGNoaW5nKSkpCisgICAgLCBtX3ZhckluamVjdGlvbldhdGNocG9pbnQo
YWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSW5pdGlhbGl6ZWRXYXRjaGluZykpKQogICAgICwg
bV93ZWFrUmFuZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQoKSA/IE9wdGlvbnM6OmZv
cmNlZFdlYWtSYW5kb21TZWVkKCkgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVy
KCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCiAgICAg
LCBtX2V2YWxFbmFibGVkKHRydWUpCiAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGds
b2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSkKQEAgLTYyMiwxOSArNjIzLDE5IEBAIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayogSlNHbG9iYWxPYmplY3QKICAgICByZXR1cm4gdW5saW5rZWRDb2RlOwogfQog
Ci1VbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVFdmFsQ29kZUJs
b2NrKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1Njb3BlKiBzY29wZSwgRXZhbEV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQorVW5saW5rZWRFdmFsQ29kZUJsb2Nr
KiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRXZhbENvZGVCbG9jayhDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCiB7CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7
CiAgICAgSlNQYXJzZXJTdHJpY3RuZXNzIHN0cmljdG5lc3MgPSBleGVjdXRhYmxlLT5pc1N0cmlj
dE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsOwogICAgIERlYnVnZ2VyTW9k
ZSBkZWJ1Z2dlck1vZGUgPSBoYXNEZWJ1Z2dlcigpID8gRGVidWdnZXJPbiA6IERlYnVnZ2VyT2Zm
OwogICAgIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUgPSBoYXNQcm9maWxlcigpID8gUHJvZmls
ZXJPbiA6IFByb2ZpbGVyT2ZmOwotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRD
b2RlID0gdm0oKS5jb2RlQ2FjaGUoKS0+Z2V0RXZhbENvZGVCbG9jayh2bSgpLCBzY29wZSwgZXhl
Y3V0YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIHN0cmljdG5lc3MsIGRlYnVnZ2VyTW9kZSwg
cHJvZmlsZXJNb2RlLCBlcnJvcik7CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGUgPSB2bSgpLmNvZGVDYWNoZSgpLT5nZXRFdmFsQ29kZUJsb2NrKHZtKCksIGV4ZWN1dGFi
bGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBzdHJpY3RuZXNzLCBkZWJ1Z2dlck1vZGUsIHByb2Zp
bGVyTW9kZSwgZXJyb3IpOwogCiAgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCiAgICAgICAgIGRlYnVn
Z2VyKCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3Zp
ZGVyKCksIGVycm9yLm1fbGluZSwgZXJyb3IubV9tZXNzYWdlKTsKIAogICAgIGlmIChlcnJvci5t
X3R5cGUgIT0gUGFyc2VyRXJyb3I6OkVycm9yTm9uZSkgewotICAgICAgICAqZXhjZXB0aW9uID0g
ZXJyb3IudG9FcnJvck9iamVjdCh0aGlzLCBleGVjdXRhYmxlLT5zb3VyY2UoKSk7CisgICAgICAg
IHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIGVycm9yLnRvRXJyb3JPYmplY3QodGhpcywgZXhlY3V0
YWJsZS0+c291cmNlKCkpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDE1MTM0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBS
ZWZQdHI8V2F0Y2hwb2ludFNldD4gbV9tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludDsK
ICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gbV9oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQ7Cisg
ICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fdmFySW5qZWN0aW9uV2F0Y2hwb2ludDsKIAogICAg
IE93blB0cjxKU0dsb2JhbE9iamVjdFJhcmVEYXRhPiBtX3JhcmVEYXRhOwogCkBAIC0zMzEsNiAr
MzMyLDcgQEAgcHVibGljOgogCiAgICAgV2F0Y2hwb2ludFNldCogbWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnQoKSB7IHJldHVybiBtX21hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50LmdldCgpOyB9CiAgICAgV2F0Y2hwb2ludFNldCogaGF2aW5nQUJhZFRpbWVXYXRjaHBvaW50
KCkgeyByZXR1cm4gbV9oYXZpbmdBQmFkVGltZVdhdGNocG9pbnQuZ2V0KCk7IH0KKyAgICBXYXRj
aHBvaW50U2V0KiB2YXJJbmplY3Rpb25XYXRjaHBvaW50KCkgeyByZXR1cm4gbV92YXJJbmplY3Rp
b25XYXRjaHBvaW50LmdldCgpOyB9CiAgICAgICAgIAogICAgIGJvb2wgaXNIYXZpbmdBQmFkVGlt
ZSgpIGNvbnN0CiAgICAgewpAQCAtMzYzLDggKzM2NSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Ym9vbCBzaG91bGRJbnRlcnJ1cHRTY3JpcHQoY29uc3QgSlNHbG9iYWxPYmplY3QqKSB7IHJldHVy
biB0cnVlOyB9CiAgICAgc3RhdGljIGJvb2wgamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZChj
b25zdCBKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBib29sIGlzRHlu
YW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7Ci0KICAgICBib29s
IGV2YWxFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsRW5hYmxlZDsgfQogICAgIGNvbnN0
IFN0cmluZyYgZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFs
RGlzYWJsZWRFcnJvck1lc3NhZ2U7IH0KICAgICB2b2lkIHNldEV2YWxFbmFibGVkKGJvb2wgZW5h
YmxlZCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoKSkKQEAgLTQwMCw3ICs0
MDAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgd2Vha1JhbmRvbUludGVnZXIoKSB7IHJldHVy
biBtX3dlYWtSYW5kb20uZ2V0VWludDMyKCk7IH0KIAogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVC
bG9jayogY3JlYXRlUHJvZ3JhbUNvZGVCbG9jayhDYWxsRnJhbWUqLCBQcm9ncmFtRXhlY3V0YWJs
ZSosIEpTT2JqZWN0KiogZXhjZXB0aW9uKTsKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIGNy
ZWF0ZUV2YWxDb2RlQmxvY2soQ2FsbEZyYW1lKiwgSlNTY29wZSosIEV2YWxFeGVjdXRhYmxlKiwg
SlNPYmplY3QqKiBleGNlcHRpb24pOworICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRl
RXZhbENvZGVCbG9jayhDYWxsRnJhbWUqLCBFdmFsRXhlY3V0YWJsZSopOwogCiBwcm90ZWN0ZWQ6
CiAKQEAgLTUxMywxMSArNTEzLDYgQEAgcHJpdmF0ZToKICAgICBKU0dsb2JhbE9iamVjdCogbV9z
YXZlZER5bmFtaWNHbG9iYWxPYmplY3Q7CiB9OwogCi1pbmxpbmUgYm9vbCBKU0dsb2JhbE9iamVj
dDo6aXNEeW5hbWljU2NvcGUoYm9vbCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IGlubGluZSBKU09iamVjdCogSlNTY29wZTo6Z2xvYmFsVGhpcygpCiB7IAogICAgIHJldHVybiBn
bG9iYWxPYmplY3QoKS0+Z2xvYmFsVGhpcygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2
aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTYsOSArNTE2LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGNhbGxlZUdsb2JhbE9iamVjdCA9IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKTsK
ICAgICBFdmFsRXhlY3V0YWJsZSogZXZhbCA9IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywg
bWFrZVNvdXJjZShzKSwgZmFsc2UpOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IGV2YWwtPmNvbXBp
bGUoZXhlYywgY2FsbGVlR2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgZXJyb3IpOworICAgIGlmICghZXZhbCkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMt
PmludGVycHJldGVyKCktPmV4ZWN1dGUoZXZhbCwgZXhlYywgY2FsbGVlR2xvYmFsT2JqZWN0LT5n
bG9iYWxUaGlzKCksIGNhbGxlZUdsb2JhbE9iamVjdCkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNOYW1lU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCShyZXZpc2lvbiAxNTEzNDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU05hbWVTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgYm9vbCBpc0R5bmFtaWNTY29w
ZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OwogICAgIHN0YXRpYyBKU1ZhbHVl
IHRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqLCBFQ01BTW9kZSk7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC04NCwxMSArODMsNiBA
QCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3JlZ2lzdGVyU3RvcmU7CiB9
OwogCi1pbmxpbmUgYm9vbCBKU05hbWVTY29wZTo6aXNEeW5hbWljU2NvcGUoYm9vbCYpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9CiAKICNlbmRpZiAvLyBKU05hbWVTY29wZV9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNp
b24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDU5NSArNDcsMTE4IEBAIHZvaWQgSlNTY29wZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9u
ZXh0KTsKIH0KIAotYm9vbCBKU1Njb3BlOjppc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5
bmFtaWNDaGVja3MpIGNvbnN0CisvLyBSZXR1cm5zIHRydWUgaWYgd2UgZm91bmQgZW5vdWdoIGlu
Zm9ybWF0aW9uIHRvIHRlcm1pbmF0ZSBvcHRpbWl6YXRpb24uCitzdGF0aWMgaW5saW5lIGJvb2wg
YWJzdHJhY3RBY2Nlc3MoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdldE9yUHV0LCBzaXplX3QgZGVwdGgsIGJvb2wmIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCBSZXNvbHZlT3AmIG9wKQogewotICAgIHN3aXRjaCAoc3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxPYmplY3RUeXBl
OgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNHbG9iYWxPYmplY3QqPih0aGlz
KS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKLSAgICBjYXNlIEFjdGl2
YXRpb25PYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNBY3Rp
dmF0aW9uKj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0g
ICAgY2FzZSBOYW1lU2NvcGVPYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNOYW1lU2NvcGUqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWlj
Q2hlY2tzKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUpT
T2JqZWN0KiBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKEpTU2NvcGUqIHNjb3BlKQotewotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBzY29wZTsKLSAgICBpZiAob2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gV2l0aFNjb3BlVHlwZSkKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxK
U1dpdGhTY29wZSo+KG9iamVjdCktPm9iamVjdCgpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0K
LQotaW50IEpTU2NvcGU6OmxvY2FsRGVwdGgoKQotewotICAgIGludCBzY29wZURlcHRoID0gMDsK
LSAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IHRoaXMtPmJlZ2luKCk7Ci0gICAgU2NvcGVD
aGFpbkl0ZXJhdG9yIGVuZCA9IHRoaXMtPmVuZCgpOwotICAgIHdoaWxlICghaXRlci0+aW5oZXJp
dHMoJkpTQWN0aXZhdGlvbjo6c19pbmZvKSkgewotICAgICAgICArK2l0ZXI7Ci0gICAgICAgIGlm
IChpdGVyID09IGVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICArK3Njb3BlRGVwdGg7
Ci0gICAgfQotICAgIHJldHVybiBzY29wZURlcHRoOwotfQotCi1zdHJ1Y3QgTG9va3VwUmVzdWx0
IHsKLSAgICBKU1ZhbHVlIGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KLSAgICBKU1Zh
bHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0QmFzZShK
U1ZhbHVlIGJhc2UpIHsgQVNTRVJUKGJhc2UpOyBtX2Jhc2UgPSBiYXNlOyB9Ci0gICAgdm9pZCBz
ZXRWYWx1ZShKU1ZhbHVlIHZhbHVlKSB7IEFTU0VSVCh2YWx1ZSk7IG1fdmFsdWUgPSB2YWx1ZTsg
fQotCi1wcml2YXRlOgotICAgIEpTVmFsdWUgbV9iYXNlOwotICAgIEpTVmFsdWUgbV92YWx1ZTsK
LX07Ci0KLQotc3RhdGljIHZvaWQgc2V0UHV0UHJvcGVydHlBY2Nlc3NPZmZzZXQoUHV0VG9CYXNl
T3BlcmF0aW9uKiBvcGVyYXRpb24sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBBU1NF
UlQoaXNPdXRPZkxpbmVPZmZzZXQob2Zmc2V0KSk7Ci0gICAgb3BlcmF0aW9uLT5tX29mZnNldCA9
IG9mZnNldDsKLSAgICBvcGVyYXRpb24tPm1fb2Zmc2V0SW5CdXR0ZXJmbHkgPSBvZmZzZXRJbkJ1
dHRlcmZseShvZmZzZXQpOwotfQotCi1zdGF0aWMgYm9vbCBleGVjdXRlUmVzb2x2ZU9wZXJhdGlv
bnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFJlc29sdmVPcGVyYXRpb24qIHBjLCBMb29rdXBSZXN1bHQmIHJlc3Vs
dCkKLXsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBzd2l0Y2ggKHBjLT5tX29wZXJhdGlv
bikgewotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkZhaWw6Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6Q2hlY2tGb3JEeW5h
bWljRW50cmllc0JlZm9yZUdsb2JhbFNjb3BlOiB7Ci0gICAgICAgICAgICB3aGlsZSAoSlNTY29w
ZSogbmV4dFNjb3BlID0gc2NvcGUtPm5leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChzY29w
ZS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkgJiYgc2NvcGUtPnN0cnVjdHVyZSgpICE9IHNjb3BlLT5n
bG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNjb3BlLT5pc05hbWVTY29w
ZU9iamVjdCgpIHx8IHNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkgfHwgc2NvcGUtPmlzR2xvYmFs
T2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIHNjb3BlID0gbmV4dFNjb3BlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcGMrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6U2V0QmFzZVRvVW5kZWZpbmVkOgotICAgICAg
ICAgICAgcmVzdWx0LnNldEJhc2UoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBwYysrOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZU9wZXJhdGlvbjo6U2V0
QmFzZVRvU2NvcGU6Ci0gICAgICAgICAgICByZXN1bHQuc2V0QmFzZShzY29wZSk7Ci0gICAgICAg
ICAgICBwYysrOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNhc2UgUmVzb2x2ZU9w
ZXJhdGlvbjo6UmV0dXJuU2NvcGVBc0Jhc2U6Ci0gICAgICAgICAgICByZXN1bHQuc2V0QmFzZShz
Y29wZSk7CisgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
SlNBY3RpdmF0aW9uKj4oc2NvcGUpKSB7CisgICAgICAgIGlmIChpZGVudCA9PSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuYXJndW1lbnRzKSB7CisgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9w
ZXJ0eSB3aWxsIGJlIGF0IHRoaXMgYWN0aXZhdGlvbiBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cg
aG93IHRvIGNhY2hlIGl0LgorICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwg
MCwgMCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBSZXNvbHZlT3Bl
cmF0aW9uOjpTZXRCYXNlVG9HbG9iYWw6Ci0gICAgICAgICAgICByZXN1bHQuc2V0QmFzZShzY29w
ZS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICAgICAgcGMrKzsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlNraXBTY29wZXM6IHsKLSAgICAg
ICAgICAgIGludCBjb3VudCA9IHBjLT5tX3Njb3Blc1RvU2tpcDsKLSAgICAgICAgICAgIHdoaWxl
IChjb3VudC0tKQotICAgICAgICAgICAgICAgIHNjb3BlID0gc2NvcGUtPm5leHQoKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzY29wZSk7Ci0gICAgICAgICAgICBwYysrOwotICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBSZXNvbHZlT3BlcmF0aW9uOjpTa2lwVG9w
U2NvcGVOb2RlOgotICAgICAgICAgICAgaWYgKGNhbGxGcmFtZS0+cihwYy0+bV9hY3RpdmF0aW9u
UmVnaXN0ZXIpLmpzVmFsdWUoKSkKLSAgICAgICAgICAgICAgICBzY29wZSA9IHNjb3BlLT5uZXh0
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoc2NvcGUpOwotICAgICAgICAgICAgcGMrKzsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJl
dHVyblNjb3BlZFZhcjoKLSAgICAgICAgICAgIEFTU0VSVChqc0Nhc3Q8SlNWYXJpYWJsZU9iamVj
dCo+KHNjb3BlKS0+cmVnaXN0ZXJBdChwYy0+bV9vZmZzZXQpLmdldCgpKTsKLSAgICAgICAgICAg
IHJlc3VsdC5zZXRWYWx1ZShqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KHNjb3BlKS0+cmVnaXN0
ZXJBdChwYy0+bV9vZmZzZXQpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFZhcjoKLSAgICAg
ICAgICAgIHJlc3VsdC5zZXRWYWx1ZShwYy0+bV9yZWdpc3RlckFkZHJlc3MtPmdldCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246Okdl
dEFuZFJldHVybkdsb2JhbFZhcldhdGNoYWJsZToKLSAgICAgICAgICAgIHJlc3VsdC5zZXRWYWx1
ZShwYy0+bV9yZWdpc3RlckFkZHJlc3MtPmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBjYXNlIFJlc29sdmVPcGVyYXRpb246OlJldHVybkdsb2JhbE9iamVjdEFzQmFz
ZToKLSAgICAgICAgICAgIHJlc3VsdC5zZXRCYXNlKGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIFJlc29sdmVP
cGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5OiB7Ci0gICAgICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgICAg
ICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCkgPT0gcGMtPm1fc3RydWN0dXJlLmdl
dCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnNldFZhbHVlKGdsb2JhbE9iamVjdC0+Z2V0
RGlyZWN0KHBjLT5tX29mZnNldCkpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxPYmplY3Qp
OwotICAgICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJh
bWUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLQotICAgICAgICAgICAgLy8g
RG9uJ3QgdHJ5IHRvIGNhY2hlIHByb3RvdHlwZSBsb29rdXBzCi0gICAgICAgICAgICBpZiAoZ2xv
YmFsT2JqZWN0ICE9IHNsb3Quc2xvdEJhc2UoKSB8fCAhc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkg
fHwgIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcGMtPm1fc3RydWN0dXJlLnNldChj
YWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcGMtPm1fb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQu
aW1wbCgpKTsKKyAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSAmJiBnZXRPclB1dCA9PSBQ
dXQpIHsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgdGhp
cyBhY3RpdmF0aW9uIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUgaXQuCisg
ICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CiAKLXRlbXBsYXRl
IDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2NvcGU6OlJldHVyblZhbHVlcyByZXR1cm5W
YWx1ZXM+IEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlSW50ZXJuYWwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3Bl
cnR5U2xvdCYgc2xvdCwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9w
ZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9uLCBib29sICkKLXsKLSAgICBKU1Njb3BlKiBzY29w
ZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICBBU1NFUlQoc2NvcGUpOwotICAgIGludCBzY29w
ZUNvdW50ID0gMDsKLSAgICBib29sIHNlZW5HZW5lcmljT2JqZWN0U2NvcGUgPSBmYWxzZTsKLSAg
ICBib29sIHJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNlOwotICAgIGJvb2wgc2tpcFRvcFNj
b3BlTm9kZSA9IGZhbHNlOwotICAgIGludCBhY3RpdmF0aW9uUmVnaXN0ZXIgPSAwOwotICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBpZiAobW9k
ZSA9PSBVbmtub3duUmVzb2x2ZSkgewotICAgICAgICBBU1NFUlQob3BlcmF0aW9ucy0+aXNFbXB0
eSgpKTsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUg
JiYgY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSkgewotICAgICAgICAgICAgYWN0aXZhdGlv
blJlZ2lzdGVyID0gY29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKTsKLSAgICAgICAgICAg
IEpTVmFsdWUgYWN0aXZhdGlvbiA9IGNhbGxGcmFtZS0+cihhY3RpdmF0aW9uUmVnaXN0ZXIpLmpz
VmFsdWUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2YXRpb24g
cmVnaXN0ZXIgZG9lc24ndCBtYXRjaCBvdXIgYWN0dWFsIHNjb3BlLCBhIGR5bmFtaWMKLSAgICAg
ICAgICAgIC8vIHNjb3BlIGhhcyBiZWVuIGluc2VydGVkIHNvIHdlIHNob3VsZG4ndCBza2lwIHRo
ZSB0b3Agc2NvcGUgbm9kZS4KLSAgICAgICAgICAgIGlmIChhY3RpdmF0aW9uID09IHNjb3BlKSB7
Ci0gICAgICAgICAgICAgICAganNDYXN0PEpTQWN0aXZhdGlvbio+KGFjdGl2YXRpb24uYXNDZWxs
KCkpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgICAgICAgICAg
ICAgIGlmICghcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChqc0Nhc3Q8SlNBY3RpdmF0aW9uKj4oYWN0aXZhdGlvbi5hc0NlbGwoKSktPnN5bWJvbFRh
YmxlKCktPmdldChpZGVudGlmaWVyLmltcGwoKSkuaXNOdWxsKCkpOwotICAgICAgICAgICAgICAg
ICAgICBzY29wZSA9IHNjb3BlLT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChz
Y29wZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNraXBUb3BTY29wZU5vZGUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFjdGl2YXRpb24pCi0gICAg
ICAgICAgICAgICAgc2tpcFRvcFNjb3BlTm9kZSA9IHRydWU7CisgICAgICAgIGlmICghZW50cnku
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVW
YXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGFjdGl2YXRpb24tPnN0cnVjdHVy
ZSgpLCBlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwogCi0g
ICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBFdmFsQ29kZSAmJiBzY29wZS0+bmV4dCgp
KQotICAgICAgICByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSB0cnVlOwotCi0gICAgaWYgKG1vZGUg
PT0gVW5rbm93blJlc29sdmUgJiYgcHV0VG9CYXNlT3BlcmF0aW9uKQotICAgICAgICBwdXRUb0Jh
c2VPcGVyYXRpb24tPm1fa2luZCA9IFB1dFRvQmFzZU9wZXJhdGlvbjo6R2VuZXJpYzsKKyAgICAg
ICAgaWYgKGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCktPnVzZXNOb25TdHJpY3RFdmFsKCkpCisg
ICAgICAgICAgICBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyA9IHRydWU7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CiAKLSAgICBkbyB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBK
U1Njb3BlOjpvYmplY3RBdFNjb3BlKHNjb3BlKTsKLSAgICAgICAgc2xvdCA9IFByb3BlcnR5U2xv
dChvYmplY3QpOwotCi0gICAgICAgIGJvb2wgY3VycmVudFNjb3BlTmVlZHNEeW5hbWljQ2hlY2tz
ID0gZmFsc2U7Ci0gICAgICAgIGlmICghKHNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkgfHwgc2Nv
cGUtPmlzTmFtZVNjb3BlT2JqZWN0KCkpIHx8IChzY29wZS0+bmV4dCgpICYmIHNjb3BlLT5pc0R5
bmFtaWNTY29wZShjdXJyZW50U2NvcGVOZWVkc0R5bmFtaWNDaGVja3MpKSkKLSAgICAgICAgICAg
IHNlZW5HZW5lcmljT2JqZWN0U2NvcGUgPSB0cnVlOwotCi0gICAgICAgIHJlcXVpcmVzRHluYW1p
Y0NoZWNrcyA9IHJlcXVpcmVzRHluYW1pY0NoZWNrcyB8fCBjdXJyZW50U2NvcGVOZWVkc0R5bmFt
aWNDaGVja3M7Ci0KLSAgICAgICAgaWYgKG9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFt
ZSwgaWRlbnRpZmllciwgc2xvdCkpIHsKLSAgICAgICAgICAgIGlmIChtb2RlID09IFVua25vd25S
ZXNvbHZlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlZW5HZW5lcmljT2JqZWN0U2NvcGUpCi0g
ICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAocHV0VG9C
YXNlT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1f
aXNEeW5hbWljID0gcmVxdWlyZXNEeW5hbWljQ2hlY2tzOwotICAgICAgICAgICAgICAgIGlmICgh
c2NvcGUtPm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBHbG9iYWwgbG9va3VwIG9m
IHNvbWUga2luZAotICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oc2NvcGUpOwotICAgICAgICAgICAgICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5n
ZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWVudHJ5Lmlz
TnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWlyZXNEeW5hbWljQ2hl
Y2tzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNv
bHZlT3BlcmF0aW9uOjpjaGVja0ZvckR5bmFtaWNFbnRyaWVzQmVmb3JlR2xvYmFsU2NvcGUoKSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdXRUb0Jhc2VPcGVyYXRpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1faXNEeW5hbWlj
ID0gcmVxdWlyZXNEeW5hbWljQ2hlY2tzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlbnRyeS5pc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5kID0gUHV0VG9CYXNlT3BlcmF0aW9uOjpSZWFkb25seTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbnRyeS5jb3VsZEJlV2F0Y2hl
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlv
bi0+bV9raW5kID0gUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxWYXJpYWJsZVB1dENoZWNrZWQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9w
cmVkaWNhdGVQb2ludGVyID0gZW50cnkuYWRkcmVzc09mSXNXYXRjaGVkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5kID0gUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxW
YXJpYWJsZVB1dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRp
b24tPm1fcmVnaXN0ZXJBZGRyZXNzID0gJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5n
ZXRJbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE92ZXJyaWRlIGN1c3RvbSBhY2Nlc3NvciBiZWhhdmlvdXIgdGhhdCB0aGUgRE9N
IGludHJvZHVjZXMgZm9yIHNvbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50IGhh
bmRsZXJzIGRlY2xhcmVkIG9uIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghcmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChyZXR1cm5WYWx1ZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmV0
dXJuVmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFwdXRUb0Jhc2VP
cGVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVu
ZChSZXNvbHZlT3BlcmF0aW9uOjpnZXRBbmRSZXR1cm5HbG9iYWxWYXIoJmdsb2JhbE9iamVjdC0+
cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKSwgZW50cnkuY291bGRCZVdhdGNoZWQoKSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBSZXR1cm5CYXNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChw
dXRUb0Jhc2VPcGVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpyZXR1cm5HbG9iYWxPYmplY3RBc0Jhc2UoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIFJldHVybkJhc2VBbmRWYWx1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQocHV0VG9CYXNlT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6c2V0QmFzZVRvR2xvYmFsKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZl
T3BlcmF0aW9uOjpnZXRBbmRSZXR1cm5HbG9iYWxWYXIoJmdsb2JhbE9iamVjdC0+cmVnaXN0ZXJB
dChlbnRyeS5nZXRJbmRleCgpKSwgZW50cnkuY291bGRCZVdhdGNoZWQoKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBS
ZXR1cm5UaGlzQW5kVmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFw
dXRUb0Jhc2VPcGVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpzZXRCYXNlVG9VbmRlZmluZWQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRp
b246OmdldEFuZFJldHVybkdsb2JhbFZhcigmZ2xvYmFsT2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLCBlbnRyeS5jb3VsZEJlV2F0Y2hlZCgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBnbG9iYWxPYmplY3QpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVxdWlyZXNEeW5hbWljQ2hlY2tzKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpjaGVja0ZvckR5bmFtaWNF
bnRyaWVzQmVmb3JlR2xvYmFsU2NvcGUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwdXRUb0Jhc2VPcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9pc0R5bmFtaWMgPSByZXF1aXJlc0R5bmFtaWNDaGVja3M7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQg
PSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5UHV0OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFt
ZS0+dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGdsb2Jh
bE9iamVjdC0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFB1
dFByb3BlcnR5QWNjZXNzT2Zmc2V0KHB1dFRvQmFzZU9wZXJhdGlvbiwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHJldHVyblZhbHVlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBS
ZXR1cm5WYWx1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXB1dFRvQmFz
ZU9wZXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBw
ZW5kKFJlc29sdmVPcGVyYXRpb246OmdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5KCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBSZXR1cm5CYXNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwdXRU
b0Jhc2VPcGVyYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMt
PmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpyZXR1cm5HbG9iYWxPYmplY3RBc0Jhc2UoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFJldHVybkJhc2VBbmRWYWx1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQocHV0VG9CYXNlT3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6c2V0QmFzZVRvR2xvYmFsKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3Bl
cmF0aW9uOjpnZXRBbmRSZXR1cm5HbG9iYWxQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmV0dXJuVGhp
c0FuZFZhbHVlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghcHV0VG9CYXNl
T3BlcmF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBl
bmQoUmVzb2x2ZU9wZXJhdGlvbjo6c2V0QmFzZVRvVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpnZXRB
bmRSZXR1cm5HbG9iYWxQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoIXJlcXVpcmVzRHluYW1pY0NoZWNrcykgewotICAgICAgICAgICAg
ICAgICAgICAvLyBOb3JtYWwgbGV4aWNhbCBsb29rdXAKLSAgICAgICAgICAgICAgICAgICAgSlNW
YXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+
KHNjb3BlKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlT2JqZWN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHZhcmlhYmxlT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnRpZmllci5pbXBsKCkpOwotICAgICAgICAgICAg
ICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgdmFyaWFibGUgYmVpbmcgYWN0dWFsbHkgaW5z
ZXJ0ZWQgYnkgZXZhbC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWpzRHluYW1pY0Nhc3Q8SlNOYW1lU2Nv
cGUqPih2YXJpYWJsZU9iamVjdCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWls
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3Jl
IGdldHRpbmcgdGhlICdhcmd1bWVudHMnIHRoZW4gZ2l2ZSB1cCBvbiBsaWZlLgotICAgICAgICAg
ICAgICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5h
cmd1bWVudHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHB1dFRvQmFzZU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
bV9sb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBQdXRU
b0Jhc2VPcGVyYXRpb246OlJlYWRvbmx5IDogUHV0VG9CYXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zdHJ1Y3R1
cmUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVj
dXRhYmxlKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5t
X29mZnNldCA9IGVudHJ5LmdldEluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXRU
b0Jhc2VPcGVyYXRpb24tPm1fc2NvcGVEZXB0aCA9IChza2lwVG9wU2NvcGVOb2RlID8gMSA6IDAp
ICsgc2NvcGVDb3VudDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChza2lwVG9wU2NvcGVOb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnNraXBUb3BTY29wZU5vZGUoYWN0aXZhdGlv
blJlZ2lzdGVyKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJl
c29sdmVPcGVyYXRpb246OnNraXBTY29wZXMoc2NvcGVDb3VudCkpOwotICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHJldHVyblZhbHVlcykgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFJl
dHVybkJhc2VBbmRWYWx1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFw
cGVuZChSZXNvbHZlT3BlcmF0aW9uOjpzZXRCYXNlVG9TY29wZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpnZXRBbmRSZXR1
cm5TY29wZWRWYXIoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXR1cm5CYXNlOgotICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnJldHVy
blNjb3BlQXNCYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBSZXR1cm5UaGlzQW5kVmFsdWU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6c2V0QmFzZVRvVW5k
ZWZpbmVkKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBSZXR1cm5WYWx1ZToKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpnZXRBbmRSZXR1cm5TY29wZWRW
YXIoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsK
KyAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNH
bG9iYWxPYmplY3QqPihzY29wZSkpIHsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7CisgICAgICAg
IGlmICghZW50cnkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmIChnZXRPclB1dCA9PSBQdXQp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3Bl
LCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUgaXQuCisgICAgICAgICAgICAgICAgICAg
IG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDApOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmYWlsOgotICAgICAg
ICAgICAgICAgIGlmICghb3BlcmF0aW9ucy0+c2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6cmVzb2x2ZUZhaWwoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICB9Ci0gICAgICAg
IHNjb3BlQ291bnQrKzsKLSAgICB9IHdoaWxlICgoc2NvcGUgPSBzY29wZS0+bmV4dCgpKSk7Ci0g
ICAgCi0gICAgaWYgKG1vZGUgPT0gVW5rbm93blJlc29sdmUpIHsKLSAgICAgICAgQVNTRVJUKG9w
ZXJhdGlvbnMtPmlzRW1wdHkoKSk7Ci0gICAgICAgIGlmIChzZWVuR2VuZXJpY09iamVjdFNjb3Bl
KSB7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6cmVz
b2x2ZUZhaWwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24t
Pm1faXNEeW5hbWljID0gcmVxdWlyZXNEeW5hbWljQ2hlY2tzOwotICAgICAgICAgICAgcHV0VG9C
YXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5
UHV0OwotICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5jbGVhcigp
OwotICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX29mZnNldCA9IC0xOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChyZXF1aXJlc0R5bmFtaWNDaGVja3MpCi0gICAgICAgICAgICBvcGVy
YXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Y2hlY2tGb3JEeW5hbWljRW50cmllc0Jl
Zm9yZUdsb2JhbFNjb3BlKCkpOwotICAgICAgICBzd2l0Y2ggKHJldHVyblZhbHVlcykgewotICAg
ICAgICBjYXNlIFJldHVyblZhbHVlOgotICAgICAgICAgICAgQVNTRVJUKCFwdXRUb0Jhc2VPcGVy
YXRpb24pOwotICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246
OmdldEFuZFJldHVybkdsb2JhbFByb3BlcnR5KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUmV0dXJuQmFzZToKLSAgICAgICAgICAgIEFTU0VSVChwdXRUb0Jhc2VPcGVyYXRp
b24pOwotICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246OnJl
dHVybkdsb2JhbE9iamVjdEFzQmFzZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFJldHVybkJhc2VBbmRWYWx1ZToKLSAgICAgICAgICAgIEFTU0VSVChwdXRUb0Jhc2VPcGVy
YXRpb24pOwotICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJlc29sdmVPcGVyYXRpb246
OnNldEJhc2VUb0dsb2JhbCgpKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNv
bHZlT3BlcmF0aW9uOjpnZXRBbmRSZXR1cm5HbG9iYWxQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFJldHVyblRoaXNBbmRWYWx1ZToKLSAgICAgICAgICAgIEFT
U0VSVCghcHV0VG9CYXNlT3BlcmF0aW9uKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVu
ZChSZXNvbHZlT3BlcmF0aW9uOjpzZXRCYXNlVG9VbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBv
cGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Z2V0QW5kUmV0dXJuR2xvYmFsUHJv
cGVydHkoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gMDsKLX0KIAotdGVtcGxhdGUgPEpTU2NvcGU6OlJldHVyblZhbHVlcyByZXR1cm5WYWx1ZXM+
IEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRv
QmFzZU9wZXJhdGlvbiwgYm9vbCBpc1N0cmljdCkKLXsKLSAgICBpZiAob3BlcmF0aW9ucy0+c2l6
ZSgpKQotICAgICAgICByZXR1cm4gcmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsPEtub3du
UmVzb2x2ZSwgcmV0dXJuVmFsdWVzPihjYWxsRnJhbWUsIGlkZW50aWZpZXIsIHNsb3QsIG9wZXJh
dGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbiwgaXNTdHJpY3QpOwotICAgIEpTT2JqZWN0KiByZXN1
bHQgPSByZXNvbHZlQ29udGFpbmluZ1Njb3BlSW50ZXJuYWw8VW5rbm93blJlc29sdmUsIHJldHVy
blZhbHVlcz4oY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90LCBvcGVyYXRpb25zLCBwdXRUb0Jh
c2VPcGVyYXRpb24sIGlzU3RyaWN0KTsKLSAgICBvcGVyYXRpb25zLT5zaHJpbmtUb0ZpdCgpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19CisgICAgICAgICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhh
dCB3ZSdsbCB3cml0ZSB0byB0aGlzIHZhciwgc28gbm90aWZ5IG5vdyBhbmQgYXZvaWQgdGhlIG92
ZXJoZWFkIG9mIGRvaW5nIHNvIGF0IHJ1bnRpbWUuCisgICAgICAgICAgICAgICAgZW50cnkubm90
aWZ5V3JpdGUoKTsKKyAgICAgICAgICAgIH0KIAotSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZXNvbHZl
T3BlcmF0aW9ucyogb3BlcmF0aW9ucykKLXsKLSAgICBBU1NFUlQob3BlcmF0aW9ucyk7Ci0gICAg
TG9va3VwUmVzdWx0IGZhc3RSZXN1bHQ7Ci0gICAgaWYgKG9wZXJhdGlvbnMtPnNpemUoKSAmJiBl
eGVjdXRlUmVzb2x2ZU9wZXJhdGlvbnMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnNjb3BlKCksIGlk
ZW50aWZpZXIsIG9wZXJhdGlvbnMtPmRhdGEoKSwgZmFzdFJlc3VsdCkpIHsKLSAgICAgICAgQVNT
RVJUKGZhc3RSZXN1bHQudmFsdWUoKSk7Ci0gICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRF
eGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiBmYXN0UmVzdWx0LnZhbHVlKCk7Ci0gICAgfQor
ICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsVmFyLCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyksIGRlcHRoLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLCAKKyAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ2xvYmFsT2JqZWN0LT5yZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNsb3QoKSkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KIAotICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChnbG9iYWxP
YmplY3QpOworICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90KGds
b2JhbE9iamVjdCwgZXhlYywgaWRlbnQsIHNsb3QpCisgICAgICAgICAgICB8fCAhc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgIHx8ICFnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgp
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKKyAgICAgICAgICAgIHx8IChnbG9iYWxP
YmplY3QtPnN0cnVjdHVyZSgpLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4
Y2x1ZGluZ1Byb3RvKCkgJiYgZ2V0T3JQdXQgPT0gUHV0KSkgeworICAgICAgICAgICAgLy8gV2Ug
a25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2NvcGUsIGJ1dCB3ZSBkb24ndCBr
bm93IGhvdyB0byBjYWNoZSBpdC4KKyAgICAgICAgICAgIEFTU0VSVCghc2NvcGUtPm5leHQoKSk7
CisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQogCi0gICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgaWYgKEpTU2Nv
cGU6OnJlc29sdmVDb250YWluaW5nU2NvcGU8UmV0dXJuVmFsdWU+KGNhbGxGcmFtZSwgaWRlbnRp
Zmllciwgc2xvdCwgb3BlcmF0aW9ucywgMCwgZmFsc2UpKSB7Ci0gICAgICAgIEFTU0VSVChvcGVy
YXRpb25zLT5zaXplKCkpOwotICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUs
IGlkZW50aWZpZXIpOworICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9w
ZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1
Y3R1cmUoKSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICBBU1NFUlQob3BlcmF0aW9ucy0+c2l6ZSgpKTsKIAotICAgIHJldHVybiB0aHJvd0Vy
cm9yKGNhbGxGcmFtZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlk
ZW50aWZpZXIpKTsKKyAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlQmFzZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgYm9vbCBpc1N0cmljdCwg
UmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9C
YXNlT3BlcmF0aW9ucykKK0pTT2JqZWN0KiBKU1Njb3BlOjpvYmplY3RBdFNjb3BlKEpTU2NvcGUq
IHNjb3BlKQogewotICAgIEFTU0VSVChvcGVyYXRpb25zKTsKLSAgICBBU1NFUlRfVU5VU0VEKHB1
dFRvQmFzZU9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbnMpOwotICAgIExvb2t1cFJlc3Vs
dCBmYXN0UmVzdWx0OwotICAgIGlmIChvcGVyYXRpb25zLT5zaXplKCkgJiYgZXhlY3V0ZVJlc29s
dmVPcGVyYXRpb25zKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5zY29wZSgpLCBpZGVudGlmaWVyLCBv
cGVyYXRpb25zLT5kYXRhKCksIGZhc3RSZXN1bHQpKSB7Ci0gICAgICAgIEFTU0VSVChmYXN0UmVz
dWx0LmJhc2UoKSk7Ci0gICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7
Ci0gICAgICAgIHJldHVybiBmYXN0UmVzdWx0LmJhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fs
bEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLQotICAg
IFByb3BlcnR5U2xvdCBzbG90OwotICAgIGlmIChKU09iamVjdCogYmFzZSA9IEpTU2NvcGU6OnJl
c29sdmVDb250YWluaW5nU2NvcGU8UmV0dXJuQmFzZT4oY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBz
bG90LCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zLCBpc1N0cmljdCkpIHsKLSAgICAg
ICAgQVNTRVJUKG9wZXJhdGlvbnMtPnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBiYXNlOwotICAg
IH0KLQotICAgIGlmICghaXNTdHJpY3QpCi0gICAgICAgIHJldHVybiBjYWxsRnJhbWUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gc2NvcGU7CisgICAgaWYg
KG9iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpID09IFdpdGhTY29wZVR5cGUp
CisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNXaXRoU2NvcGUqPihvYmplY3QpLT5vYmplY3QoKTsK
IAotICAgIHJldHVybiB0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY3JlYXRlRXJyb3JGb3JJbnZhbGlk
R2xvYmFsQXNzaWdubWVudChjYWxsRnJhbWUsIGlkZW50aWZpZXIuc3RyaW5nKCkpKTsKKyAgICBy
ZXR1cm4gb2JqZWN0OwogfQogCi1KU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXIq
IGJhc2UsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24q
IHB1dFRvQmFzZU9wZXJhdGlvbnMpCitpbnQgSlNTY29wZTo6ZGVwdGgoKQogewotICAgIEFTU0VS
VChvcGVyYXRpb25zKTsKLSAgICBBU1NFUlRfVU5VU0VEKHB1dFRvQmFzZU9wZXJhdGlvbnMsIHB1
dFRvQmFzZU9wZXJhdGlvbnMpOwotICAgIExvb2t1cFJlc3VsdCBmYXN0UmVzdWx0OwotICAgIGlm
IChvcGVyYXRpb25zLT5zaXplKCkgJiYgZXhlY3V0ZVJlc29sdmVPcGVyYXRpb25zKGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT5zY29wZSgpLCBpZGVudGlmaWVyLCBvcGVyYXRpb25zLT5kYXRhKCksIGZh
c3RSZXN1bHQpKSB7Ci0gICAgICAgIEFTU0VSVChmYXN0UmVzdWx0LmJhc2UoKSk7Ci0gICAgICAg
IEFTU0VSVChmYXN0UmVzdWx0LnZhbHVlKCkpOwotICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+
aGFkRXhjZXB0aW9uKCkpOwotICAgICAgICAqYmFzZSA9IGZhc3RSZXN1bHQuYmFzZSgpOwotICAg
ICAgICByZXR1cm4gZmFzdFJlc3VsdC52YWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChjYWxsRnJh
bWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotCi0gICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgaWYgKEpTT2JqZWN0KiBwcm9wZXJ0eUJhc2UgPSBKU1Njb3Bl
OjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlPFJldHVybkJhc2VBbmRWYWx1ZT4oY2FsbEZyYW1lLCBp
ZGVudGlmaWVyLCBzbG90LCBvcGVyYXRpb25zLCBwdXRUb0Jhc2VPcGVyYXRpb25zLCBmYWxzZSkp
IHsKLSAgICAgICAgQVNTRVJUKG9wZXJhdGlvbnMtPnNpemUoKSk7Ci0gICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIGlm
IChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKLQotICAgICAgICAqYmFzZSA9IHByb3BlcnR5QmFzZTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIH0KLSAgICBBU1NFUlQob3BlcmF0aW9ucy0+c2l6ZSgpKTsKLQotICAgIHJldHVybiB0
aHJvd0Vycm9yKGNhbGxGcmFtZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJh
bWUsIGlkZW50aWZpZXIpKTsKKyAgICBpbnQgZGVwdGggPSAwOworICAgIGZvciAoSlNTY29wZSog
c2NvcGUgPSB0aGlzOyBzY29wZTsgc2NvcGUgPSBzY29wZS0+bmV4dCgpKQorICAgICAgICArK2Rl
cHRoOworICAgIHJldHVybiBkZXB0aDsKIH0KIAotSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlV2l0
aFRoaXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIs
IFJlZ2lzdGVyKiBiYXNlLCBSZXNvbHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucykKK0pTVmFsdWUg
SlNTY29wZTo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBBU1NFUlQob3BlcmF0aW9ucyk7Ci0gICAgTG9va3Vw
UmVzdWx0IGZhc3RSZXN1bHQ7Ci0gICAgaWYgKG9wZXJhdGlvbnMtPnNpemUoKSAmJiBleGVjdXRl
UmVzb2x2ZU9wZXJhdGlvbnMoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnNjb3BlKCksIGlkZW50aWZp
ZXIsIG9wZXJhdGlvbnMtPmRhdGEoKSwgZmFzdFJlc3VsdCkpIHsKLSAgICAgICAgQVNTRVJUKGZh
c3RSZXN1bHQuYmFzZSgpKTsKLSAgICAgICAgQVNTRVJUKGZhc3RSZXN1bHQudmFsdWUoKSk7Ci0g
ICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgICpiYXNl
ID0gZmFzdFJlc3VsdC5iYXNlKCk7Ci0gICAgICAgIHJldHVybiBmYXN0UmVzdWx0LnZhbHVlKCk7
Ci0gICAgfQorICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBlbmQgPSBzY29wZS0+ZW5kKCk7CisgICAg
U2NvcGVDaGFpbkl0ZXJhdG9yIGl0ID0gc2NvcGUtPmJlZ2luKCk7CisgICAgd2hpbGUgKDEpIHsK
KyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGl0LmdldCgpOwogCi0gICAgaWYgKGNhbGxGcmFt
ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIGlm
ICgrK2l0ID09IGVuZCkgLy8gR2xvYmFsIHNjb3BlLgorICAgICAgICAgICAgcmV0dXJuIG9iamVj
dDsKIAotICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgIGlmIChKU09iamVjdCogcHJvcGVydHlC
YXNlID0gSlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZTxSZXR1cm5UaGlzQW5kVmFsdWU+
KGNhbGxGcmFtZSwgaWRlbnRpZmllciwgc2xvdCwgb3BlcmF0aW9ucywgMCwgZmFsc2UpKSB7Ci0g
ICAgICAgIEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGlkZW50aWZpZXIpOwotICAgICAgICBpZiAoY2Fs
bEZyYW1lLT52bSgpLmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0g
ICAgICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgICAgICpiYXNlID0gSlNWYWx1ZShwcm9wZXJ0eUJh
c2UpOwotICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIGlmIChvYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIGlkZW50KSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQotICAg
IEFTU0VSVChvcGVyYXRpb25zLT5zaXplKCkpOwotCi0gICAgcmV0dXJuIHRocm93RXJyb3IoY2Fs
bEZyYW1lLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnRpZmll
cikpOwogfQogCi12b2lkIEpTU2NvcGU6OnJlc29sdmVQdXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUgYmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIEpTVmFsdWUgdmFsdWUs
IFB1dFRvQmFzZU9wZXJhdGlvbiogb3BlcmF0aW9uKQorUmVzb2x2ZU9wIEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgR2V0T3JQdXQgZ2V0T3JQdXQsIFJlc29sdmVUeXBlIHVubGlua2VkVHlwZSkK
IHsKLSAgICBBU1NFUlRfVU5VU0VEKG9wZXJhdGlvbiwgb3BlcmF0aW9uKTsKLSAgICBBU1NFUlQo
YmFzZSk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+bV9raW5k
KSB7Ci0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlVuaW5pdGlhbGlzZWQ6Ci0gICAgICAg
IENSQVNIKCk7Ci0KLSAgICBjYXNlIFB1dFRvQmFzZU9wZXJhdGlvbjo6UmVhZG9ubHk6Ci0gICAg
ICAgIHJldHVybjsKLQotICAgIGNhc2UgUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxWYXJpYWJs
ZVB1dENoZWNrZWQ6Ci0gICAgICAgIGlmICgqb3BlcmF0aW9uLT5tX3ByZWRpY2F0ZVBvaW50ZXIp
Ci0gICAgICAgICAgICBnb3RvIGdlbmVyaWNIYW5kbGVyOwotICAgIGNhc2UgUHV0VG9CYXNlT3Bl
cmF0aW9uOjpHbG9iYWxWYXJpYWJsZVB1dDoKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+bV9pc0R5
bmFtaWMpIHsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oYmFzZSk7Ci0gICAgICAgICAgICBpZiAoYmFzZU9iamVjdCAhPSBjYWxsRnJhbWUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChiYXNlT2JqZWN0LT5p
c0dsb2JhbE9iamVjdCgpKQotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWpzQ2FzdDxKU0ds
b2JhbE9iamVjdCo+KGJhc2VPYmplY3QpLT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KG9w
ZXJhdGlvbi0+bV9yZWdpc3RlckFkZHJlc3MpKTsKLSAgICAgICAgICAgICAgICBnb3RvIGdlbmVy
aWNIYW5kbGVyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG9wZXJhdGlvbi0+
bV9yZWdpc3RlckFkZHJlc3MtPnNldChjYWxsRnJhbWUtPnZtKCksIGJhc2UuYXNDZWxsKCksIHZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OlZh
cmlhYmxlUHV0OiB7Ci0gICAgICAgIGlmIChvcGVyYXRpb24tPm1faXNEeW5hbWljKSB7Ci0gICAg
ICAgICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGJhc2UpOwot
ICAgICAgICAgICAgaWYgKGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpICE9IG9wZXJhdGlvbi0+bV9z
dHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICAgICAgZ290byBnZW5lcmljSGFuZGxlcjsKLSAg
ICAgICAgfQotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCA9IGpzQ2Fz
dDxKU1ZhcmlhYmxlT2JqZWN0Kj4oYmFzZSk7Ci0gICAgICAgIHZhcmlhYmxlT2JqZWN0LT5yZWdp
c3RlckF0KG9wZXJhdGlvbi0+bV9vZmZzZXQpLnNldChjYWxsRnJhbWUtPnZtKCksIHZhcmlhYmxl
T2JqZWN0LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVzb2x2ZU9wIG9w
KER5bmFtaWMsIDAsIDAsIDApOworICAgIGlmICh1bmxpbmtlZFR5cGUgPT0gRHluYW1pYykKKyAg
ICAgICAgcmV0dXJuIG9wOwogCi0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFBy
b3BlcnR5UHV0OiB7Ci0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihiYXNlKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuZ2V0KCkgIT0gb2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSkKKyAgICBzaXplX3QgZGVwdGggPSAwOworICAgIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MgPSBKU0M6Om5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHVubGlua2Vk
VHlwZSk7CisgICAgZm9yICg7IHNjb3BlOyBzY29wZSA9IHNjb3BlLT5uZXh0KCkpIHsKKyAgICAg
ICAgaWYgKGFic3RyYWN0QWNjZXNzKGV4ZWMsIHNjb3BlLCBpZGVudCwgZ2V0T3JQdXQsIGRlcHRo
LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgb3ApKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIG9iamVjdC0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+dm0oKSwgb3BlcmF0aW9uLT5tX29mZnNl
dCwgdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZ2VuZXJpY0hhbmRsZXI6
Ci0gICAgY2FzZSBQdXRUb0Jhc2VPcGVyYXRpb246OkdlbmVyaWM6Ci0gICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KG9wZXJhdGlvbi0+bV9pc1N0cmljdCk7Ci0gICAgICAgIGJhc2UucHV0KGNh
bGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICArK2RlcHRoOwogICAgIH0KLSAgICBBU1NFUlQob3BlcmF0aW9uLT5tX2tpbmQgPT0gUHV0VG9C
YXNlT3BlcmF0aW9uOjpHbG9iYWxQcm9wZXJ0eVB1dCk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNs
b3Qob3BlcmF0aW9uLT5tX2lzU3RyaWN0KTsKLSAgICBiYXNlLnB1dChjYWxsRnJhbWUsIHByb3Bl
cnR5LCB2YWx1ZSwgc2xvdCk7Ci0gICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oYmFzZSk7
Ci0gICAgaWYgKCFiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNh
Y2hlYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHNsb3QuYmFzZSgpICE9IGNhbGxG
cmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VPYmplY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIWJh
c2VPYmplY3QtPmhhc0lubGluZVN0b3JhZ2UoKSk7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKLSAgICAKLSAgICBvcGVyYXRp
b24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPm93bmVyRXhlY3V0YWJsZSgpLCBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgc2V0
UHV0UHJvcGVydHlBY2Nlc3NPZmZzZXQob3BlcmF0aW9uLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
LSAgICByZXR1cm47Ci19Ci0KLUpTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZUdsb2JhbChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVzb2x2ZU9wZXJhdGlvbiogcmVzb2x2ZU9wZXJhdGlvbikKLXsK
LSAgICBBU1NFUlQocmVzb2x2ZU9wZXJhdGlvbik7Ci0gICAgQVNTRVJUKHJlc29sdmVPcGVyYXRp
b24tPm1fb3BlcmF0aW9uID09IFJlc29sdmVPcGVyYXRpb246OkdldEFuZFJldHVybkdsb2JhbFBy
b3BlcnR5KTsKLSAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2JqZWN0KTsKLQotICAgIExvb2t1cFJlc3VsdCBm
YXN0UmVzdWx0OwotICAgIGlmIChleGVjdXRlUmVzb2x2ZU9wZXJhdGlvbnMoY2FsbEZyYW1lLCBj
YWxsRnJhbWUtPnNjb3BlKCksIGlkZW50aWZpZXIsIHJlc29sdmVPcGVyYXRpb24sIGZhc3RSZXN1
bHQpKSB7Ci0gICAgICAgIEFTU0VSVChmYXN0UmVzdWx0LnZhbHVlKCkpOwotICAgICAgICBBU1NF
UlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4gZmFzdFJlc3Vs
dC52YWx1ZSgpOwotICAgIH0KLQotICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCi0gICAgcmV0dXJuIHRocm93RXJyb3IoY2FsbEZy
YW1lLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnRpZmllcikp
OworICAgIHJldHVybiBvcDsKIH0KIAotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDE1MTM0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
MTIgKzI3LDEwOCBAQAogI2RlZmluZSBKU1Njb3BlX2gKIAogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiUmVzb2x2ZU9wZXJhdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xh
c3MgU2NvcGVDaGFpbkl0ZXJhdG9yOwogCitlbnVtIFJlc29sdmVNb2RlIHsKKyAgICBUaHJvd0lm
Tm90Rm91bmQsCisgICAgRG9Ob3RUaHJvd0lmTm90Rm91bmQKK307CisKK2VudW0gUmVzb2x2ZVR5
cGUgeworICAgIC8vIExleGljYWwgc2NvcGUgZ3VhcmFudGVlZCBhIGNlcnRhaW4gdHlwZSBvZiB2
YXJpYWJsZSBhY2Nlc3MuCisgICAgR2xvYmFsUHJvcGVydHksCisgICAgR2xvYmFsVmFyLAorICAg
IENsb3N1cmVWYXIsCisKKyAgICAvLyBEaXR0bywgYnV0IGF0IGxlYXN0IG9uZSBpbnRlcnZlbmlu
ZyBzY29wZSB1c2VkIG5vbi1zdHJpY3QgZXZhbCwgd2hpY2gKKyAgICAvLyBjYW4gaW5qZWN0IGFu
IGludGVyY2VwdGluZyB2YXIgZGVsY2FyYXRpb24gYXQgcnVudGltZS4KKyAgICBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsCisgICAgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywKKyAgICBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywKKworICAgIC8v
IExleGljYWwgc2NvcGUgZGlkbid0IHByb3ZlIGFueXRoaW5nIC0tIHByb2JhYmx5IGJlY2F1c2Ug
b2YgYSAnd2l0aCcgc2NvcGUuCisgICAgRHluYW1pYworfTsKKworaW5saW5lIFJlc29sdmVUeXBl
IG1ha2VUeXBlKFJlc29sdmVUeXBlIHR5cGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
Cit7CisgICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgcmV0dXJuIHR5
cGU7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgorICAg
ICAgICByZXR1cm4gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOworICAgIGNh
c2UgR2xvYmFsVmFyOgorICAgICAgICByZXR1cm4gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczsKKyAgICBjYXNlIENsb3N1cmVWYXI6CisgICAgICAgIHJldHVybiBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczsKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczoKKyAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Cisg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICBjYXNlIER5bmFt
aWM6CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MoUmVzb2x2ZVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgorICAgIGNhc2UgR2xvYmFsVmFyOgorICAgIGNh
c2UgQ2xvc3VyZVZhcjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczoKKyAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgorICAgIGNhc2UgRHluYW1pYzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitz
dHJ1Y3QgUmVzb2x2ZU9wIHsKKyAgICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90
IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludHB0cl90IG9wZXJhbmQpCisgICAgICAg
IDogdHlwZSh0eXBlKQorICAgICAgICAsIGRlcHRoKGRlcHRoKQorICAgICAgICAsIHN0cnVjdHVy
ZShzdHJ1Y3R1cmUpCisgICAgICAgICwgb3BlcmFuZChvcGVyYW5kKQorICAgIHsKKyAgICB9CisK
KyAgICBSZXNvbHZlVHlwZSB0eXBlOworICAgIHNpemVfdCBkZXB0aDsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZTsKKyAgICB1aW50cHRyX3Qgb3BlcmFuZDsKK307CisKK2NsYXNzIFJlc29sdmVN
b2RlQW5kVHlwZSB7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBPcGVyYW5kOworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc2hpZnQgPSBzaXplb2YoT3BlcmFuZCkgKiA4IC8gMjsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWFzayA9ICgxIDw8IHNoaWZ0KSAtIDE7CisKKyAgICBS
ZXNvbHZlTW9kZUFuZFR5cGUoUmVzb2x2ZU1vZGUgcmVzb2x2ZU1vZGUsIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlKQorICAgICAgICA6IG1fb3BlcmFuZCgocmVzb2x2ZU1vZGUgPDwgc2hpZnQpIHwg
cmVzb2x2ZVR5cGUpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFJlc29sdmVNb2RlQW5k
VHlwZSh1bnNpZ25lZCBvcGVyYW5kKQorICAgICAgICA6IG1fb3BlcmFuZChvcGVyYW5kKQorICAg
IHsKKyAgICB9CisKKyAgICBSZXNvbHZlTW9kZSBtb2RlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVzb2x2ZU1vZGU+KG1fb3BlcmFuZCA+PiBzaGlmdCk7IH0KKyAgICBSZXNvbHZlVHlwZSB0eXBl
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KG1fb3BlcmFuZCAmIG1hc2spOyB9
CisgICAgdW5zaWduZWQgb3BlcmFuZCgpIHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorCitwcml2YXRl
OgorICAgIE9wZXJhbmQgbV9vcGVyYW5kOworfTsKKworZW51bSBHZXRPclB1dCB7IEdldCwgUHV0
IH07CisKIGNsYXNzIEpTU2NvcGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC00MiwyMSArMTM4LDE1IEBA
IHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU09iamVjdCogb2JqZWN0
QXRTY29wZShKU1Njb3BlKik7CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSByZXNvbHZlKENhbGxGcmFt
ZSosIGNvbnN0IElkZW50aWZpZXImLCBSZXNvbHZlT3BlcmF0aW9ucyopOwotICAgIHN0YXRpYyBK
U1ZhbHVlIHJlc29sdmVCYXNlKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXImLCBib29sIGlz
U3RyaWN0LCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9wZXJhdGlvbiopOwotICAgIHN0
YXRpYyBKU1ZhbHVlIHJlc29sdmVXaXRoQmFzZShDYWxsRnJhbWUqLCBjb25zdCBJZGVudGlmaWVy
JiwgUmVnaXN0ZXIqIGJhc2UsIFJlc29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3BlcmF0aW9u
Kik7Ci0gICAgc3RhdGljIEpTVmFsdWUgcmVzb2x2ZVdpdGhUaGlzKENhbGxGcmFtZSosIGNvbnN0
IElkZW50aWZpZXImLCBSZWdpc3RlciogYmFzZSwgUmVzb2x2ZU9wZXJhdGlvbnMqKTsKLSAgICBz
dGF0aWMgSlNWYWx1ZSByZXNvbHZlR2xvYmFsKENhbGxGcmFtZSosIGNvbnN0IElkZW50aWZpZXIm
LCBKU0dsb2JhbE9iamVjdCosIFJlc29sdmVPcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgdm9pZCBy
ZXNvbHZlUHV0KENhbGxGcmFtZSosIEpTVmFsdWUgYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIEpT
VmFsdWUsIFB1dFRvQmFzZU9wZXJhdGlvbiopOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlc29sdmUo
RXhlY1N0YXRlKiwgSlNTY29wZSosIGNvbnN0IElkZW50aWZpZXImKTsKKyAgICBzdGF0aWMgUmVz
b2x2ZU9wIGFic3RyYWN0UmVzb2x2ZShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgY29uc3QgSWRlbnRp
ZmllciYsIEdldE9yUHV0LCBSZXNvbHZlVHlwZSk7CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBib29sIGlzRHluYW1pY1Njb3Bl
KGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7Ci0KICAgICBTY29wZUNoYWluSXRl
cmF0b3IgYmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kKCk7CiAgICAgSlNTY29w
ZSogbmV4dCgpOwotICAgIGludCBsb2NhbERlcHRoKCk7CisgICAgaW50IGRlcHRoKCk7CiAKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCk7CiAgICAgVk0qIHZtKCk7CkBAIC02OCwx
NiArMTU4LDYgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU1Nj
b3BlPiBtX25leHQ7Ci0gICAgZW51bSBSZXR1cm5WYWx1ZXMgewotICAgICAgICBSZXR1cm5WYWx1
ZSA9IDEsCi0gICAgICAgIFJldHVybkJhc2UgPSAyLAotICAgICAgICBSZXR1cm5UaGlzID0gNCwK
LSAgICAgICAgUmV0dXJuQmFzZUFuZFZhbHVlID0gUmV0dXJuVmFsdWUgfCBSZXR1cm5CYXNlLAot
ICAgICAgICBSZXR1cm5UaGlzQW5kVmFsdWUgPSBSZXR1cm5WYWx1ZSB8IFJldHVyblRoaXMsCi0g
ICAgfTsKLSAgICBlbnVtIExvb2t1cE1vZGUgeyBVbmtub3duUmVzb2x2ZSwgS25vd25SZXNvbHZl
IH07Ci0gICAgdGVtcGxhdGUgPExvb2t1cE1vZGUsIFJldHVyblZhbHVlcz4gc3RhdGljIEpTT2Jq
ZWN0KiByZXNvbHZlQ29udGFpbmluZ1Njb3BlSW50ZXJuYWwoQ2FsbEZyYW1lKiwgY29uc3QgSWRl
bnRpZmllciYsIFByb3BlcnR5U2xvdCYsIFJlc29sdmVPcGVyYXRpb25zKiwgUHV0VG9CYXNlT3Bl
cmF0aW9uKiwgYm9vbCBpc1N0cmljdCk7Ci0gICAgdGVtcGxhdGUgPFJldHVyblZhbHVlcz4gc3Rh
dGljIEpTT2JqZWN0KiByZXNvbHZlQ29udGFpbmluZ1Njb3BlKENhbGxGcmFtZSosIGNvbnN0IElk
ZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBSZXNvbHZlT3BlcmF0aW9ucyosIFB1dFRvQmFzZU9w
ZXJhdGlvbiosIGJvb2wgaXNTdHJpY3QpOwogfTsKIAogaW5saW5lIEpTU2NvcGU6OkpTU2NvcGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogbmV4dCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMTUxMzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTkgKzgwLDE5IEBAIE9iamVjdFByb3Rv
dHlwZSogT2JqZWN0UHJvdG90eXBlOjpjcmVhdGUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUudG9PYmplY3QoZXhlYykpOwogfQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3Bl
cnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhv
c3RUaGlzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4odGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpLT5oYXNPd25Qcm9wZXJ0eShleGVj
LCBJZGVudGlmaWVyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCiAgICAgaWYgKCFleGVj
LT5hcmd1bWVudCgwKS5pc09iamVjdCgpKQpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvT2JqZWN0KGV4
ZWMpOworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRv
VGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKQEAgLTEzMSw3ICsxMzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5j
RGVmaW5lU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSkudG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC0xNTEsNyArMTUx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMTY1LDcgKzE2NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMp
OworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhp
cyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKQEAgLTE3OSw3ICsxNzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jUHJv
cGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0aGlzVmFsdWUudG9PYmplY3QoZXhlYyktPnByb3Bl
cnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoZXhlYywgZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkpKTsKIH0KIApAQCAtMTg3LDcgKzE4Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIC8vIDEuIExldCBPIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb09iamVj
dCBwYXNzaW5nIHRoZSB0aGlzIHZhbHVlIGFzIHRoZSBhcmd1bWVudC4KLSAgICBKU09iamVjdCog
b2JqZWN0ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIApAQCAtMjA2LDcgKzIw
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzKGV4
ZWMsIFN0cmljdE1vZGUpOwogICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywg
U3RyaW5nKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZCgpID8gQVNDSUlMaXRlcmFsKCJbb2JqZWN0IFVu
ZGVmaW5lZF0iKSA6IEFTQ0lJTGl0ZXJhbCgiW29iamVjdCBOdWxsXSIpKSkpOwogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjMsMTAgKzY2MywyNCBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU0M6OmpzU3RyaW5nKGV4ZWMsIGxlZnRQYXJ0LCBtaWRkbGVQYXJ0LCByaWdodFBhcnQpKTsK
IH0KIAorc3RhdGljIGlubGluZSBib29sIGNoZWNrT2JqZWN0Q29lcmNpYmxlKEpTVmFsdWUgdGhp
c1ZhbHVlKQoreworICAgIGlmICh0aGlzVmFsdWUuaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICh0aGlzVmFsdWUuaXNDZWxsKCkgJiYgdGhpc1ZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pc0Vudmlyb25tZW50UmVjb3JkKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwot
ICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2Vy
Y2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMt
PmFyZ3VtZW50KDApOwpAQCAtNjkzLDcgKzcwNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jQ2hhckF0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgaWYgKCFjaGVja09iamVjdENvZXJj
aWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgdW5zaWduZWQgbGVuID0gcy5sZW5ndGgoKTsKQEAgLTcxMyw3ICs3MjcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY0NoYXJDb2RlQXQoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICB1bnNpZ25lZCBsZW4gPSBzLmxlbmd0aCgpOwpAQCAtNzM5
LDcgKzc1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICBpZiAodGhpc1ZhbHVlLmlzU3RyaW5nKCkgJiYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAx
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBhc1N0cmlu
Zyh0aGlzVmFsdWUpLCBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwogCi0gICAg
aWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJs
ZQorICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1N0cmluZ0Zyb21Bcmd1bWVudHMoZXhlYywgdGhpc1ZhbHVlKSk7CiB9CkBAIC03NDcsNyArNzYx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAg
ICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNp
YmxlCisgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAKQEAgLTc4Miw3ICs3OTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAodGhp
c1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgaW50IGxlbiA9IHMubGVuZ3RoKCk7CkBAIC04MDYsNyAr
ODIwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNNYXRjaChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0g
ICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSAvLyBDaGVja09iamVjdENvZXJj
aWJsZQorICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKTsKICAgICBTdHJpbmcgcyA9IHN0cmluZy0+dmFsdWUoZXhl
Yyk7CkBAIC04NjUsNyArODc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTZWFy
Y2goRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8g
Q2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTU3Ry
aW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIHMgPSBz
dHJpbmctPnZhbHVlKGV4ZWMpOwpAQCAtODk1LDcgKzkwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jU2xpY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0
Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKICAgICBpbnQgbGVuID0gcy5sZW5ndGgoKTsKQEAgLTk1Myw3ICs5NjcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiB7CiAgICAgLy8gMS4gQ2FsbCBDaGVj
a09iamVjdENvZXJjaWJsZSBwYXNzaW5nIHRoZSB0aGlzIHZhbHVlIGFzIGl0cyBhcmd1bWVudC4K
ICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAo
dGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKCFjaGVja09iamVjdENvZXJj
aWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
IAogICAgIC8vIDIuIExldCBTIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb1N0cmluZywgZ2l2
aW5nIGl0IHRoZSB0aGlzIHZhbHVlIGFzIGl0cyBhcmd1bWVudC4KQEAgLTExNjEsMTUgKzExNzUs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWJzdHIoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAg
IGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVuOwogICAgIEpTU3RyaW5nKiBq
c1N0cmluZyA9IDA7CiAgICAgU3RyaW5nIHVTdHJpbmc7CiAgICAgaWYgKHRoaXNWYWx1ZS5pc1N0
cmluZygpKSB7CiAgICAgICAgIGpzU3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4odGhpc1ZhbHVl
LmFzQ2VsbCgpKTsKICAgICAgICAgbGVuID0ganNTdHJpbmctPmxlbmd0aCgpOwotICAgIH0gZWxz
ZSBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgLy8gQ2hlY2tP
YmplY3RDb2VyY2libGUKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgdVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAgLTEyMDEs
NyArMTIxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vic3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2Jq
ZWN0Q29lcmNpYmxlCisgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKIAogICAgIEpTU3RyaW5nKiBq
c1N0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKQEAgLTEyNDAsNyArMTI1Myw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2UoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAg
IGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2li
bGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGV4ZWMpOwogICAgIGNvbnN0IFN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKGV4
ZWMpOwpAQCAtMTI1OSw3ICsxMjcyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNU
b1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSAvLyBDaGVja09iamVjdENvZXJjaWJsZQorICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2li
bGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAg
ICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7CiAgICAgY29uc3Qg
U3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CkBAIC0xMjgxLDcgKzEyOTQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKTsKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
Ly8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIFN0
cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIApAQCAtMTI5
Miw3ICsxMzA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwotICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RD
b2VyY2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxiaWc+IiwgcywgIjwvYmlnPiIpKTsK
QEAgLTEzMDEsNyArMTMxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21hbGwo
RXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hl
Y2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIFN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAi
PC9zbWFsbD4iKSk7CkBAIC0xMzEwLDcgKzEzMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgaWYgKCFjaGVja09iamVjdENvZXJj
aWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
ICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
Ymxpbms+IiwgcywgIjwvYmxpbms+IikpOwpAQCAtMTMxOSw3ICsxMzMyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNCb2xkKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgaWYgKCFjaGVj
a09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsKQEAgLTEzMjgsNyArMTM0MSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jRml4ZWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlzVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAo
IWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjx0dD4iLCBzLCAiPC90dD4iKSk7CkBAIC0xMzM3LDcgKzEzNTAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0l0YWxpY3MoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlm
ICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUK
KyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFr
ZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOwpAQCAtMTM0Niw3ICsx
MzU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdHJpa2UoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwot
ICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2Vy
Y2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIp
KTsKQEAgLTEzNTUsNyArMTM2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3Vi
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKLSAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENo
ZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFs
dWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBTdHJpbmcg
cyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8
L3N1Yj4iKSk7CkBAIC0xMzY0LDcgKzEzNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
RnVuY1N1cChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSAvLyBDaGVja09iamVjdENvZXJjaWJsZQorICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUo
dGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAgICAg
U3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4i
LCBzLCAiPC9zdXA+IikpOwpAQCAtMTM3Myw3ICsxMzg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNGb250Y29sb3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAoIWNoZWNrT2Jq
ZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xMzg2LDcgKzEz
OTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
LSAgICBpZiAodGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29l
cmNpYmxlCisgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFy
Z3VtZW50KDApOwpAQCAtMTQzNCw3ICsxNDQ3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
b0Z1bmNBbmNob3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNp
YmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKICAg
ICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xNDQ3LDcgKzE0NjAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xpbmsoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIGlmICh0aGlz
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgLy8gQ2hlY2tPYmplY3RDb2VyY2libGUKKyAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBA
IC0xNDkzLDcgKzE1MDYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNUcmltV2hpdGVzcGFjZShV
Q2hhCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB0aGlzVmFsdWUsIGludCB0cmltS2luZCkKIHsKLSAgICBpZiAodGhpc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIC8vIENoZWNrT2JqZWN0Q29lcmNpYmxlCisgICAgaWYgKCFjaGVj
a09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7CiAgICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShyZXZpc2lvbiAx
NTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgogCisjaW5jbHVkZSAiSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lv
biAxNTEzNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1NiwxMyArMjU2LDE1IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKIAogVk06On5WTSgpCiB7CisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
Ly8gTWFrZSBzdXJlIGNvbmN1cnJlbnQgY29tcGlsYXRpb25zIGFyZSBkb25lLCBidXQgZG9uJ3Qg
aW5zdGFsbCB0aGVtLCBzaW5jZSBpbnN0YWxsaW5nCiAgICAgLy8gdGhlbSBtaWdodCBjYXVzZSBh
IEdDLiBXZSBkb24ndCB3YW50IHRvIEdDIHJpZ2h0IG5vdy4KICAgICBpZiAod29ya2xpc3QpIHsK
ICAgICAgICAgd29ya2xpc3QtPndhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeSgqdGhpcyk7
CiAgICAgICAgIHdvcmtsaXN0LT5yZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oKnRoaXMpOwogICAg
IH0KLSAgICAKKyNlbmRpZgorCiAgICAgLy8gQ2xlYXIgdGhpcyBmaXJzdCB0byBlbnN1cmUgdGhh
dCBub2JvZHkgdHJpZXMgdG8gcmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSBpdC4KICAgICBtX3BlckJ5
dGVjb2RlUHJvZmlsZXIuY2xlYXIoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1dyaXRlQmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKSB7IG1fY2VsbCA9IDA7
IH0KICAgICAKLSAgICBKU0NlbGwqKiBzbG90KCkgeyByZXR1cm4gJm1fY2VsbDsgfQorICAgIFQq
KiBzbG90KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKio+KCZtX2NlbGwpOyB9CiAgICAg
CiAgICAgdHlwZWRlZiBUKiAoV3JpdGVCYXJyaWVyQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUp
OwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gbV9j
ZWxsID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWFj
Lm1tCShyZXZpc2lvbiAxNTEzNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5MSw3ICs1OTEsNyBAQCBzdGF0
aWMgU3RyaW5nIGxhbmd1YWdlSWRlbnRpZmllcihjb25zdCBTCiAKICAgICBTdHJpbmcgbG93ZXJj
YXNlTGFuZ3VhZ2VDb2RlID0gbGFuZ3VhZ2VDb2RlLmxvd2VyKCk7CiAgICAgCi0gICAgaWYgKGxv
d2VyY2FzZUxhbmd1YWdlQ29kZS5sZW5ndGgoKSA+PSAzICYmIChsb3dlcmNhc2VMYW5ndWFnZUNv
ZGVbMl0gPT0gJ18nIHx8IGxvd2VyY2FzZUxhbmd1YWdlQ29kZVsyXSA9PSAnLScpKQorICAgIGlm
IChsb3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkgPj0gMyAmJiAobG93ZXJjYXNlTGFuZ3Vh
Z2VDb2RlLmNoYXJhY3RlckF0KDIpID09ICdfJyB8fCBsb3dlcmNhc2VMYW5ndWFnZUNvZGUuY2hh
cmFjdGVyQXQoMikgPT0gJy0nKSkKICAgICAgICAgbG93ZXJjYXNlTGFuZ3VhZ2VDb2RlLnRydW5j
YXRlKDIpOwogICAgIAogICAgIHJldHVybiBsb3dlcmNhc2VMYW5ndWFnZUNvZGU7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNTEzNDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw1OCBAQAorMjAxMy0wNi0wOCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlLXdvcmtlZCBub24tbG9jYWwgdmFyaWFibGUgcmVzb2x1
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3
Mzc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCByZW1vdmVkIHNwZWNpYWwtY2FzZSAndGhpcycgcmVzb2x1dGlvbiBmcm9tIGJ5dGVj
b2RlLCBtYWtpbmcKKyAgICAgICAgc29tZSBwcmUtZXhpc3RpbmcgZWRnZSBjYXNlcyBpbiAndGhp
cycgdmFsdWUgdHJlYXRtZW50IG11Y2ggbW9yZSBjb21tb24uCisKKyAgICAgICAgSSB1cGRhdGVk
IHRoZSB0ZXN0IHJlc3VsdHMgYmVsb3csIGFuZCBhZGRlZCBzb21lIHRlc3RzLCB0byBtYXRjaCBi
dWcKKyAgICAgICAgZml4ZXMgZm9yIHRoZXNlIGNhc2VzLgorCisgICAgICAgICogZmFzdC9qcy9z
Y3JpcHQtdGVzdHMvYXJyYXktZnVuY3Rpb25zLW5vbi1hcnJheXMuanM6CisgICAgICAgICogZmFz
dC9qcy9hcnJheS1mdW5jdGlvbnMtbm9uLWFycmF5cy1leHBlY3RlZC50eHQ6IEFzIHNwZWNpZmll
ZCwgaXQncworICAgICAgICBub3QgYW4gZXJyb3IgdG8gcGFzcyBhIG5vbi1hcnJheSB0byB0b0xv
Y2FsZVN0cmluZy4gT3VyIG5ldyByZXN1bHQKKyAgICAgICAgbWF0Y2hlcyBGaXJlZm94IGFuZCBD
aHJvbWUuCisKKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LXByb3RvdHlwZS1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dDogVXBkYXRlZCBmb3Igc2xpZ2h0bHkKKyAgICAgICAgY2xlYXJlciBlcnJvciBt
ZXNzYWdlLgorCisgICAgICAgICogZmFzdC9qcy9iYXNpYy1zdHJpY3QtbW9kZS1leHBlY3RlZC50
eHQ6IFVwZGF0ZWQgZm9yIHNsaWdodGx5IG1vcmUKKyAgICAgICAgc3RhbmRhcmQgZXJyb3IgbWVz
c2FnZS4KKworICAgICAgICAqIGZhc3QvanMvb2JqZWN0LXByb3RvdHlwZS10b1N0cmluZy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvb2JqZWN0LXByb3RvdHlwZS10b1N0
cmluZy5odG1sOiBBZGRlZC4gVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcworICAgICAgICB3aHkgd2Ug
bm93IGZhaWwgYSBTcHV0bmlrIHRlc3QgYmVsb3csIHdoaWxlIEZpcmVmb3ggYW5kIENocm9tZSBw
YXNzIGl0LgorICAgICAgICAoVGhlIHRlc3QgZG9lc24ndCB0ZXN0IHdoYXQgaXQgdGhpbmtzIGl0
IHRlc3RzLCBhbmQgdGhpcyB0ZXN0IHZlcmlmaWVzCisgICAgICAgIHRoYXQgd2UgZ2V0IHJpZ2h0
IHdoYXQgaXQgZG9lcyB0aGluayBpdCB0ZXN0cy4pCisKKyAgICAgICAgKiBmYXN0L2pzL3N0cmlu
Zy1wcm90b3R5cGUtZnVuY3Rpb24tdGhpcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvc3RyaW5nLXByb3RvdHlwZS1mdW5jdGlvbi10aGlzLmh0bWw6IEFkZGVkLiBUaGlz
IHRlc3Qgc2hvd3MKKyAgICAgICAgdGhhdCB3ZSBDaGVja09iamVjdENvZXJjaWJsZSBpbiBzdHJp
bmcgcHJvdG90eXBlIGZ1bmN0aW9ucy4gKFdlIHVzZWQKKyAgICAgICAgdG8gZ2V0IHRoaXMgd3Jv
bmcsIGJ1dCBTcHV0bmlrIHRlc3RzIG1hZGUgaXQgc2VlbSBsaWtlIHdlIGdvdCBpdCByaWdodAor
ICAgICAgICBiZWNhdXNlIHRoZXkgZGlkbid0IHRlc3QgdGhlIGR5bmFtaWMgc2NvcGUgY2FzZS4p
CisKKyAgICAgICAgKiBzcHV0bmlrL0NvbmZvcm1hbmNlLzExX0V4cHJlc3Npb25zLzExLjFfUHJp
bWFyeV9FeHByZXNzaW9ucy8xMS4xLjFfVGhlX3RoaXNfS2V5d29yZC9TMTEuMS4xX0EyLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBzcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3Rz
LzE1LjRfQXJyYXkvMTUuNC40LzE1LjQuNC4zX0FycmF5X3Byb3RvdHlwZV90b0xvY2FsZVN0cmlu
Zy9TMTUuNC40LjNfQTJfVDEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHNwdXRuaWsvQ29uZm9y
bWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC4xMF9TdHJp
bmcucHJvdG90eXBlLm1hdGNoL1MxNS41LjQuMTBfQTFfVDMtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUu
NS40LzE1LjUuNC4xMV9TdHJpbmcucHJvdG90eXBlLnJlcGxhY2UvUzE1LjUuNC4xMV9BMV9UMy1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2Jq
ZWN0cy8xNS41X1N0cmluZy8xNS41LjQvMTUuNS40LjEyX1N0cmluZy5wcm90b3R5cGUuc2VhcmNo
L1MxNS41LjQuMTJfQTFfVDMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHNwdXRuaWsvQ29uZm9y
bWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC4xM19TdHJp
bmcucHJvdG90eXBlLnNsaWNlL1MxNS41LjQuMTNfQTFfVDMtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUu
NS40LzE1LjUuNC4xNF9TdHJpbmcucHJvdG90eXBlLnNwbGl0L1MxNS41LjQuMTRfQTFfVDMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVj
dHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC4xNV9TdHJpbmcucHJvdG90eXBlLnN1YnN0cmlu
Zy9TMTUuNS40LjE1X0ExX1QzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzcHV0bmlrL0NvbmZv
cm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjVfU3RyaW5nLzE1LjUuNC8xNS41LjQuNl9TdHJp
bmcucHJvdG90eXBlLmNvbmNhdC9TMTUuNS40LjZfQTFfVDMtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUu
NS40LzE1LjUuNC43X1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZi9TMTUuNS40LjdfQTFfVDMtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVj
dHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC44X1N0cmluZy5wcm90b3R5cGUubGFzdEluZGV4
T2YvUzE1LjUuNC44X0ExX1QzLWV4cGVjdGVkLnR4dDoKKworICAgICAgICBVcGRhdGVkIHRvIHNo
b3cgZmFpbGluZyByZXN1bHRzLiBGaXJlZm94IGFuZCBDaHJvbWUgYWxzbyBmYWlsIHRoZXNlCisg
ICAgICAgIHRlc3RzLCBhbmQgdGhlIEVTNSBzcGVjIHNlZW1zIHRvIG1hbmRhdGUgZmFpbHVyZS4g
QmVjYXVzZSB0aGVzZSB0ZXN0cworICAgICAgICByZXNvbHZlIGEgU3RyaW5nLnByb3RvdHlwZSBm
dW5jdGlvbiBhdCBnbG9iYWwgc2NvcGUsIHRoZSAndGhpcycgdmFsdWUKKyAgICAgICAgZm9yIHRo
ZSBjYWxsIGlzIGFuIGVudmlyb25tZW50IHJlY29yZC4gTG9naWNhbGx5LCBhbiBlbnZpcm9ubWVu
dCByZWNvcmQKKyAgICAgICAgY29udmVydHMgdG8gJ3VuZGVmaW5lZCcgYXQgdGhlIGNhbGwgc2l0
ZSwgYW5kIHNob3VsZCB0aGVuIGZhaWwgdGhlCisgICAgICAgIENoZWNrT2JqZWN0Q29lcmNpYmxl
IHRlc3QuCisKIDIwMTMtMDYtMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBmb3VydGhUaWVyOiBkb24ndCBpbnNlcnQgRm9yY2VPU1JFeGl0cyBleGNlcHQgZm9y
IGluYWRlcXVhdGUgY292ZXJhZ2UKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZnVu
Y3Rpb25zLW5vbi1hcnJheXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvanMvYXJyYXktZnVuY3Rpb25zLW5vbi1hcnJheXMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAxNTEzNDQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWZ1bmN0aW9ucy1ub24tYXJy
YXlzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcsNyArMTcsNyBAQCBQQVNTIEFy
cmF5LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHtfX3ByCiBQQVNTICh7X19wcm90b19fOiBBcnJh
eS5wcm90b3R5cGUsIDA6ICdhJywgMTogJ2InLCAyOiAnYycsIGxlbmd0aDogMywgam9pbjogZnVu
Y3Rpb24oKSB7IHJldHVybiAnam9pbicgfX0pLnRvU3RyaW5nKCkgaXMgImpvaW4iCiBQQVNTIEFy
cmF5LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKDQyKSBpcyAiTnVtYmVyLnByb3RvdHlwZS5qb2lu
OjQyIgogUEFTUyBbMCwgMSwgMl0udG9TdHJpbmcoKSBpcyAiYXJyYXktam9pbiIKLVBBU1MgQXJy
YXkucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoe30pIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIEFycmF5LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5j
YWxsKHt9KSBpcyAiIgogUEFTUyBBcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwoeCA9IHsgbGVu
Z3RoOjIsIDA6J2InLCAxOidhJyB9KSBpcyBbeF0KIFBBU1MgQXJyYXkucHJvdG90eXBlLmpvaW4u
Y2FsbCh7fSkgaXMgJycKIFBBU1MgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChbJ2InLCAnYSdd
KSBpcyAnYixhJwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1wcm90b3R5cGUtcHJv
cGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9h
cnJheS1wcm90b3R5cGUtcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1MTM0NCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktcHJvdG90eXBlLXByb3BlcnRpZXMtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBCiAKIAogUEFTUyBBcnJheS5wcm90b3R5cGUudG9TdHJpbmcu
Y2FsbCh1bmRlZmluZWQpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6ICd1bmRlZmluZWQnIGlz
IG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ0FycmF5LnByb3RvdHlwZS50b1N0cmluZy5jYWxs
KHVuZGVmaW5lZCknKS4KLVBBU1MgQXJyYXkucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwo
dW5kZWZpbmVkKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyBB
cnJheS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbCh1bmRlZmluZWQpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6ICd1bmRlZmluZWQnIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcg
J0FycmF5LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKHVuZGVmaW5lZCknKS4KIFBBU1Mg
QXJyYXkucHJvdG90eXBlLmNvbmNhdC5jYWxsKHVuZGVmaW5lZCwgW10pIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6ICd1bmRlZmluZWQnIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ0Fy
cmF5LnByb3RvdHlwZS5jb25jYXQuY2FsbCh1bmRlZmluZWQsIFtdKScpLgogUEFTUyBBcnJheS5w
cm90b3R5cGUuam9pbi5jYWxsKHVuZGVmaW5lZCwgW10pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6ICd1bmRlZmluZWQnIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ0FycmF5LnByb3Rv
dHlwZS5qb2luLmNhbGwodW5kZWZpbmVkLCBbXSknKS4KIFBBU1MgQXJyYXkucHJvdG90eXBlLnBv
cC5jYWxsKHVuZGVmaW5lZCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogJ3VuZGVmaW5lZCcg
aXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnQXJyYXkucHJvdG90eXBlLnBvcC5jYWxsKHVu
ZGVmaW5lZCknKS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMtc3RyaWN0LW1vZGUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYmFzaWMtc3Ry
aWN0LW1vZGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNTEzNDQpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL2Jhc2ljLXN0cmljdC1tb2RlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw3IEBAIFBBU1MgKGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnOyAoZnVuY3Rpb24K
IFBBU1MgKGZ1bmN0aW9uICgpeyAndXNlIHN0cmljdCc7IGRlbGV0ZSBzb21lRGVjbGFyZWRHbG9i
YWw7fSkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBDYW5ub3QgZGVsZXRlIHVucXVhbGlm
aWVkIHByb3BlcnR5ICdzb21lRGVjbGFyZWRHbG9iYWwnIGluIHN0cmljdCBtb2RlLgogUEFTUyAo
ZnVuY3Rpb24oKXsoZnVuY3Rpb24gKCl7ICd1c2Ugc3RyaWN0JzsgZGVsZXRlIHNvbWVEZWNsYXJl
ZEdsb2JhbDt9KX0pIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogQ2Fubm90IGRlbGV0ZSB1
bnF1YWxpZmllZCBwcm9wZXJ0eSAnc29tZURlY2xhcmVkR2xvYmFsJyBpbiBzdHJpY3QgbW9kZS4K
IFBBU1MgJ3VzZSBzdHJpY3QnOyBpZiAoMCkgeyBzb21lR2xvYmFsID0gJ1Nob3VsZG5cJ3QgYmUg
YWJsZSB0byBhc3NpZ24gdGhpcy4nOyB9OyB0cnVlOyBpcyB0cnVlCi1QQVNTICd1c2Ugc3RyaWN0
Jzsgc29tZUdsb2JhbCA9ICdTaG91bGRuXCd0IGJlIGFibGUgdG8gYXNzaWduIHRoaXMuJzsgIHRo
cmV3IGV4Y2VwdGlvbiBSZWZlcmVuY2VFcnJvcjogU3RyaWN0IG1vZGUgZm9yYmlkcyBpbXBsaWNp
dCBjcmVhdGlvbiBvZiBnbG9iYWwgcHJvcGVydHkgJ3NvbWVHbG9iYWwnLgorUEFTUyAndXNlIHN0
cmljdCc7IHNvbWVHbG9iYWwgPSAnU2hvdWxkblwndCBiZSBhYmxlIHRvIGFzc2lnbiB0aGlzLic7
ICB0aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IHNv
bWVHbG9iYWwuCiBQQVNTICd1c2Ugc3RyaWN0JzsgKGZ1bmN0aW9uIGYoKXsgZiA9ICdzaG91bGRu
XCd0IGJlIGFibGUgdG8gYXNzaWduIHRvIGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFtZSc7IH0pKCkg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQXR0ZW1wdGVkIHRvIGFzc2lnbiB0byByZWFkb25s
eSBwcm9wZXJ0eS4uCiBQQVNTICd1c2Ugc3RyaWN0JzsgZXZhbCgndmFyIGludHJvZHVjZWRWYXJp
YWJsZSA9ICJGQUlMOiB2YXJpYWJsZSBpbnRyb2R1Y2VkIGludG8gY29udGFpbmluZyBzY29wZSI7
Jyk7IGludHJvZHVjZWRWYXJpYWJsZSB0aHJldyBleGNlcHRpb24gUmVmZXJlbmNlRXJyb3I6IENh
bid0IGZpbmQgdmFyaWFibGU6IGludHJvZHVjZWRWYXJpYWJsZS4KIFBBU1MgJ3VzZSBzdHJpY3Qn
OyBvYmplY3RXaXRoUmVhZG9ubHlQcm9wZXJ0eS5wcm9wID0gJ2ZhaWwnIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byBhc3NpZ24gdG8gcmVhZG9ubHkgcHJvcGVydHkuLgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9vYmplY3QtcHJvdG90eXBlLXRvU3RyaW5nLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL29iamVjdC1wcm90b3R5
cGUtdG9TdHJpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9qcy9vYmplY3QtcHJvdG90eXBlLXRvU3RyaW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUgQEAKK1RoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IE9iamVjdC5wcm90b3R5
cGUudG9TdHJpbmcgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0cyBkZXBlbmRpbmcgb24gaG93IGl0
IHdhcyByZXNvbHZlZC4KKworUEFTUzogdGhpcy50b1N0cmluZygpIHNob3VsZCBiZSBbb2JqZWN0
IFdpbmRvd10gYW5kIGlzLgorUEFTUzogdG9TdHJpbmcoKSBzaG91bGQgYmUgW29iamVjdCBVbmRl
ZmluZWRdIGFuZCBpcy4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9vYmplY3QtcHJvdG90
eXBlLXRvU3RyaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9vYmpl
Y3QtcHJvdG90eXBlLXRvU3RyaW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL29iamVjdC1wcm90b3R5cGUtdG9TdHJpbmcuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMwIEBACis8cD5UaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nIHJldHVybnMgZGlmZmVyZW50IHJlc3VsdHMgZGVwZW5kaW5nIG9uIGhvdyBpdCB3
YXMgcmVzb2x2ZWQuPC9wPgorPHByZSBpZD0ibG9nIj48L3ByZT4KKworPHNjcmlwdD4KK2Z1bmN0
aW9uIGxvZyhzKQoreworCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzICsgIlxuIikpOworfQorCitmdW5jdGlvbiBzaG91
bGRCZShhRGVzY3JpcHRpb24sIGEsIGIpCit7CisJaWYgKGEgPT09IGIpIHsKKwkJbG9nKCJQQVNT
OiAiICsgYURlc2NyaXB0aW9uICsgIiBzaG91bGQgYmUgIiArIGIgKyAiIGFuZCBpcy4iKTsKKwkJ
cmV0dXJuOworCX0KKworCWxvZygiRkFJTDogIiArIGFEZXNjcmlwdGlvbiArICIgc2hvdWxkIGJl
ICIgKyBiICsgIiBidXQgaW5zdGVhZCBpcyAiICsgYSArICIuIik7Cit9Cis8L3NjcmlwdD4KKwor
PHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKwl0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKworLy8gQ2hyb21lIGFuZCBGaXJlZm94IGdpdmUgV2luZG93LnByb3RvdHlwZSBhIHVuaXF1
ZSB0b1N0cmluZyBpbXBsZW1lbnRhdGlvbiAtLSBvdmVyd3JpdGUgaXQgd2l0aCBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nIHRvIG1ha2Ugc3VyZSB3ZSdyZSB0ZXN0aW5nIHRoZSByaWdodCB0aGlu
Zy4KK3RoaXMudG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOworCitzaG91bGRC
ZSgidGhpcy50b1N0cmluZygpIiwgdGhpcy50b1N0cmluZygpLCAiW29iamVjdCBXaW5kb3ddIik7
CitzaG91bGRCZSgidG9TdHJpbmcoKSIsIHRvU3RyaW5nKCksICJbb2JqZWN0IFVuZGVmaW5lZF0i
KTsKKzwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zdHJpbmctcHJvdG90eXBl
LWZ1bmN0aW9uLXRoaXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvc3RyaW5nLXByb3RvdHlwZS1mdW5jdGlvbi10aGlzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLXByb3RvdHlwZS1mdW5jdGlvbi10
aGlzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVz
dCB2ZXJpZmllcyB0aGF0IFN0cmluZy5wcm90b3R5cGUgZnVuY3Rpb25zIENoZWNrT2JqZWN0Q29l
cmNpYmxlLCBldmVuIGlmIHRoZSBjYWxsZXIgaXMgaW4gYSBkeW5hbWljIHNjb3BlLgorCitQQVNT
OiBUaHJldyBleGNlcHRpb246IFR5cGVFcnJvcjogVHlwZSBlcnJvcgorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3N0cmluZy1wcm90b3R5cGUtZnVuY3Rpb24tdGhpcy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLXByb3RvdHlwZS1mdW5jdGlvbi10aGlz
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3N0cmluZy1wcm90b3R5
cGUtZnVuY3Rpb24tdGhpcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKzxw
PlRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IFN0cmluZy5wcm90b3R5cGUgZnVuY3Rpb25zIENoZWNr
T2JqZWN0Q29lcmNpYmxlLCBldmVuIGlmIHRoZSBjYWxsZXIgaXMgaW4gYSBkeW5hbWljIHNjb3Bl
LjwvcD4KKzxwcmUgaWQ9ImxvZyI+PC9wcmU+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cocykK
K3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUocyArICJcbiIpKTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmUoYURl
c2NyaXB0aW9uLCBhLCBiKQoreworICAgIGlmIChhID09PSBiKSB7CisgICAgICAgIGxvZygiUEFT
UzogIiArIGFEZXNjcmlwdGlvbiArICIgc2hvdWxkIGJlICIgKyBiICsgIiBhbmQgaXMuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsb2coIkZBSUw6ICIgKyBhRGVzY3JpcHRpb24g
KyAiIHNob3VsZCBiZSAiICsgYiArICIgYnV0IGluc3RlYWQgaXMgIiArIGEgKyAiLiIpOworfQor
PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisKK3RyeSB7CisgICAgd2l0aCh7fSkgeworICAgICAgICBjaGFy
Q29kZUF0ID0gU3RyaW5nLnByb3RvdHlwZS5jaGFyQ29kZUF0OworICAgICAgICBjaGFyQ29kZUF0
KCI2Iik7CisgICAgfQorfSBjYXRjaChlKSB7CisgICAgbG9nKCJQQVNTOiBUaHJldyBleGNlcHRp
b246ICIgKyBlKTsKK30KKzwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3Jp
cHQtdGVzdHMvYXJyYXktZnVuY3Rpb25zLW5vbi1hcnJheXMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvYXJyYXktZnVuY3Rpb25zLW5vbi1hcnJheXMu
anMJKHJldmlzaW9uIDE1MTM0NCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3Rz
L2FycmF5LWZ1bmN0aW9ucy1ub24tYXJyYXlzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIEFycmF5LnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24oKSB7IHJldHUKIHNob3VsZEJl
KCJbMCwgMSwgMl0udG9TdHJpbmcoKSIsICciYXJyYXktam9pbiInKTsKIEFycmF5LnByb3RvdHlw
ZS5qb2luID0gYXJyYXlKb2luOwogCi1zaG91bGRUaHJvdygiQXJyYXkucHJvdG90eXBlLnRvTG9j
YWxlU3RyaW5nLmNhbGwoe30pIik7CitzaG91bGRCZSgiQXJyYXkucHJvdG90eXBlLnRvTG9jYWxl
U3RyaW5nLmNhbGwoe30pIiwgJyInICsgJyInKTsKIAogc2hvdWxkQmUoIkFycmF5LnByb3RvdHlw
ZS5jb25jYXQuY2FsbCh4ID0geyBsZW5ndGg6MiwgMDonYicsIDE6J2EnIH0pIiwgIlt4XSIpOwog
CkluZGV4OiBMYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzExX0V4cHJlc3Npb25zLzEx
LjFfUHJpbWFyeV9FeHByZXNzaW9ucy8xMS4xLjFfVGhlX3RoaXNfS2V5d29yZC9TMTEuMS4xX0Ey
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1h
bmNlLzExX0V4cHJlc3Npb25zLzExLjFfUHJpbWFyeV9FeHByZXNzaW9ucy8xMS4xLjFfVGhlX3Ro
aXNfS2V5d29yZC9TMTEuMS4xX0EyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTUxMzQ0KQorKysg
TGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xMV9FeHByZXNzaW9ucy8xMS4xX1ByaW1h
cnlfRXhwcmVzc2lvbnMvMTEuMS4xX1RoZV90aGlzX0tleXdvcmQvUzExLjEuMV9BMi1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiBTMTEuMS4xX0EyCiAKLVBBU1Mg
CitGQUlMIFNwdXRuaWtFcnJvcjogIzE6IHRoaXMudG9TdHJpbmcoKSA9PT0gdG9TdHJpbmcoKS4g
QWN0dWFsOiBbb2JqZWN0IFdpbmRvd10KIAogVEVTVCBDT01QTEVURQogCkluZGV4OiBMYXlvdXRU
ZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjRfQXJyYXkvMTUu
NC40LzE1LjQuNC4zX0FycmF5X3Byb3RvdHlwZV90b0xvY2FsZVN0cmluZy9TMTUuNC40LjNfQTJf
VDEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9y
bWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNF9BcnJheS8xNS40LjQvMTUuNC40LjNfQXJyYXlf
cHJvdG90eXBlX3RvTG9jYWxlU3RyaW5nL1MxNS40LjQuM19BMl9UMS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDE1MTM0NCkKKysrIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0
aXZlX09iamVjdHMvMTUuNF9BcnJheS8xNS40LjQvMTUuNC40LjNfQXJyYXlfcHJvdG90eXBlX3Rv
TG9jYWxlU3RyaW5nL1MxNS40LjQuM19BMl9UMS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiBTMTUuNC40LjNfQTJfVDEKIAotUEFTUyAKK0ZBSUwgU3B1dG5pa0Vy
cm9yOiAjMS4yOiB2YXIgb2JqID0ge307IG9iai50b0xvY2FsZVN0cmluZyA9IEFycmF5LnByb3Rv
dHlwZS50b0xvY2FsZVN0cmluZzsgb2JqLnRvTG9jYWxlU3RyaW5nKCkgdGhyb3cgVHlwZUVycm9y
LiBBY3R1YWw6IFNwdXRuaWtFcnJvcjogIzEuMTogdmFyIG9iaiA9IHt9OyBvYmoudG9Mb2NhbGVT
dHJpbmcgPSBBcnJheS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc7IG9iai50b0xvY2FsZVN0cmlu
ZygpIHRocm93IFR5cGVFcnJvci4gQWN0dWFsOiAKIAogVEVTVCBDT01QTEVURQogCkluZGV4OiBM
YXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjVfU3Ry
aW5nLzE1LjUuNC8xNS41LjQuNl9TdHJpbmcucHJvdG90eXBlLmNvbmNhdC9TMTUuNS40LjZfQTFf
VDMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9y
bWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC42X1N0cmlu
Zy5wcm90b3R5cGUuY29uY2F0L1MxNS41LjQuNl9BMV9UMy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDE1MTM0NCkKKysrIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09i
amVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC42X1N0cmluZy5wcm90b3R5cGUuY29uY2F0
L1MxNS41LjQuNl9BMV9UMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiBTMTUuNS40LjZfQTFfVDMKIAotUEFTUyAKK0ZBSUwgVHlwZUVycm9yOiBUeXBlIGVycm9y
CiAKIFRFU1QgQ09NUExFVEUKIApJbmRleDogTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5j
ZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41X1N0cmluZy8xNS41LjQvMTUuNS40LjdfU3RyaW5nLnBy
b3RvdHlwZS5pbmRleE9mL1MxNS41LjQuN19BMV9UMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41
X1N0cmluZy8xNS41LjQvMTUuNS40LjdfU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mL1MxNS41LjQu
N19BMV9UMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1MTM0NCkKKysrIExheW91dFRlc3RzL3Nw
dXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1
LjUuNC43X1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZi9TMTUuNS40LjdfQTFfVDMtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogUzE1LjUuNC43X0ExX1QzCiAKLVBB
U1MgCitGQUlMIFR5cGVFcnJvcjogVHlwZSBlcnJvcgogCiBURVNUIENPTVBMRVRFCiAKSW5kZXg6
IExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9T
dHJpbmcvMTUuNS40LzE1LjUuNC44X1N0cmluZy5wcm90b3R5cGUubGFzdEluZGV4T2YvUzE1LjUu
NC44X0ExX1QzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zcHV0bmlr
L0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjVfU3RyaW5nLzE1LjUuNC8xNS41LjQu
OF9TdHJpbmcucHJvdG90eXBlLmxhc3RJbmRleE9mL1MxNS41LjQuOF9BMV9UMy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDE1MTM0NCkKKysrIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2Uv
MTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC44X1N0cmluZy5wcm90
b3R5cGUubGFzdEluZGV4T2YvUzE1LjUuNC44X0ExX1QzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIFMxNS41LjQuOF9BMV9UMwogCi1QQVNTIAorRkFJTCBUeXBl
RXJyb3I6IFR5cGUgZXJyb3IKIAogVEVTVCBDT01QTEVURQogCkluZGV4OiBMYXlvdXRUZXN0cy9z
cHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjVfU3RyaW5nLzE1LjUuNC8x
NS41LjQuMTBfU3RyaW5nLnByb3RvdHlwZS5tYXRjaC9TMTUuNS40LjEwX0ExX1QzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05h
dGl2ZV9PYmplY3RzLzE1LjVfU3RyaW5nLzE1LjUuNC8xNS41LjQuMTBfU3RyaW5nLnByb3RvdHlw
ZS5tYXRjaC9TMTUuNS40LjEwX0ExX1QzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTUxMzQ0KQor
KysgTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41
X1N0cmluZy8xNS41LjQvMTUuNS40LjEwX1N0cmluZy5wcm90b3R5cGUubWF0Y2gvUzE1LjUuNC4x
MF9BMV9UMy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiBTMTUu
NS40LjEwX0ExX1QzCiAKLVBBU1MgCitGQUlMIFR5cGVFcnJvcjogVHlwZSBlcnJvcgogCiBURVNU
IENPTVBMRVRFCiAKSW5kZXg6IExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0
aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC4xMV9TdHJpbmcucHJvdG90eXBl
LnJlcGxhY2UvUzE1LjUuNC4xMV9BMV9UMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41X1N0cmlu
Zy8xNS41LjQvMTUuNS40LjExX1N0cmluZy5wcm90b3R5cGUucmVwbGFjZS9TMTUuNS40LjExX0Ex
X1QzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTUxMzQ0KQorKysgTGF5b3V0VGVzdHMvc3B1dG5p
ay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41X1N0cmluZy8xNS41LjQvMTUuNS40
LjExX1N0cmluZy5wcm90b3R5cGUucmVwbGFjZS9TMTUuNS40LjExX0ExX1QzLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIFMxNS41LjQuMTFfQTFfVDMKIAotUEFT
UyAKK0ZBSUwgVHlwZUVycm9yOiBUeXBlIGVycm9yCiAKIFRFU1QgQ09NUExFVEUKIApJbmRleDog
TGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41X1N0
cmluZy8xNS41LjQvMTUuNS40LjEyX1N0cmluZy5wcm90b3R5cGUuc2VhcmNoL1MxNS41LjQuMTJf
QTFfVDMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3NwdXRuaWsvQ29u
Zm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC4xMl9T
dHJpbmcucHJvdG90eXBlLnNlYXJjaC9TMTUuNS40LjEyX0ExX1QzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMTUxMzQ0KQorKysgTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRp
dmVfT2JqZWN0cy8xNS41X1N0cmluZy8xNS41LjQvMTUuNS40LjEyX1N0cmluZy5wcm90b3R5cGUu
c2VhcmNoL1MxNS41LjQuMTJfQTFfVDMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogUzE1LjUuNC4xMl9BMV9UMwogCi1QQVNTIAorRkFJTCBUeXBlRXJyb3I6IFR5
cGUgZXJyb3IKIAogVEVTVCBDT01QTEVURQogCkluZGV4OiBMYXlvdXRUZXN0cy9zcHV0bmlrL0Nv
bmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjVfU3RyaW5nLzE1LjUuNC8xNS41LjQuMTNf
U3RyaW5nLnByb3RvdHlwZS5zbGljZS9TMTUuNS40LjEzX0ExX1QzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmpl
Y3RzLzE1LjVfU3RyaW5nLzE1LjUuNC8xNS41LjQuMTNfU3RyaW5nLnByb3RvdHlwZS5zbGljZS9T
MTUuNS40LjEzX0ExX1QzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTUxMzQ0KQorKysgTGF5b3V0
VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41X1N0cmluZy8x
NS41LjQvMTUuNS40LjEzX1N0cmluZy5wcm90b3R5cGUuc2xpY2UvUzE1LjUuNC4xM19BMV9UMy1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiBTMTUuNS40LjEzX0Ex
X1QzCiAKLVBBU1MgCitGQUlMIFR5cGVFcnJvcjogVHlwZSBlcnJvcgogCiBURVNUIENPTVBMRVRF
CiAKSW5kZXg6IExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVj
dHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC4xNF9TdHJpbmcucHJvdG90eXBlLnNwbGl0L1Mx
NS41LjQuMTRfQTFfVDMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Nw
dXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1
LjUuNC4xNF9TdHJpbmcucHJvdG90eXBlLnNwbGl0L1MxNS41LjQuMTRfQTFfVDMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAxNTEzNDQpCisrKyBMYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNl
LzE1X05hdGl2ZV9PYmplY3RzLzE1LjVfU3RyaW5nLzE1LjUuNC8xNS41LjQuMTRfU3RyaW5nLnBy
b3RvdHlwZS5zcGxpdC9TMTUuNS40LjE0X0ExX1QzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIFMxNS41LjQuMTRfQTFfVDMKIAotUEFTUyAKK0ZBSUwgVHlwZUVy
cm9yOiBUeXBlIGVycm9yCiAKIFRFU1QgQ09NUExFVEUKIApJbmRleDogTGF5b3V0VGVzdHMvc3B1
dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS41X1N0cmluZy8xNS41LjQvMTUu
NS40LjE1X1N0cmluZy5wcm90b3R5cGUuc3Vic3RyaW5nL1MxNS41LjQuMTVfQTFfVDMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVf
TmF0aXZlX09iamVjdHMvMTUuNV9TdHJpbmcvMTUuNS40LzE1LjUuNC4xNV9TdHJpbmcucHJvdG90
eXBlLnN1YnN0cmluZy9TMTUuNS40LjE1X0ExX1QzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTUx
MzQ0KQorKysgTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0
cy8xNS41X1N0cmluZy8xNS41LjQvMTUuNS40LjE1X1N0cmluZy5wcm90b3R5cGUuc3Vic3RyaW5n
L1MxNS41LjQuMTVfQTFfVDMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogUzE1LjUuNC4xNV9BMV9UMwogCi1QQVNTIAorRkFJTCBUeXBlRXJyb3I6IFR5cGUgZXJy
b3IKIAogVEVTVCBDT01QTEVURQogCg==
</data>
<flag name="review"
          id="225624"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>